You are on page 1of 120

Zalotay Péter: DIGITÁLIS TECHNIKA II

Zalotay Péter

DIGITÁLIS TECHNIKA II.

Elektronikus jegyzet
BMF Kandó Kálmán Villamosmérnöki Kar

89.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

1. A mikrogép (Mikroszámítógép)..........................................................................................................6
1.1. A központi vezérlő egység ........................................................................................................................... 6
1.2. Processzor vezérlés ...................................................................................................................................... 6
1.3. Memóriák ..................................................................................................................................................... 7
1.3.1. A program memória( PM ) .......................................................................................................7
1.3.2. Az adatmemória ( DM ).............................................................................................................7
1.4. Periféria illesztés.......................................................................................................................................... 7
1.5. A tápegység ( TE )........................................................................................................................................ 8
1.6. A busz-rendszer ........................................................................................................................................... 8
1.7. mikroprocesszor .......................................................................................................................................... 8
1.7.1. Utasítás feldolgozó ....................................................................................................................9
1.7.2. Aritmetikai - logikai egység ( ALU ).........................................................................................9
1.7.3. Regiszter - tömb.......................................................................................................................10
1.7.4. Busz illesztés ...........................................................................................................................10
1.7.5. Időzítő - vezérlő egység ...........................................................................................................10
1.7.6. A processzor megszakításkezelése ..........................................................................................10
1.7.7. Memória írás, olvasás ..............................................................................................................11
1.7.8. Periféria írás, olvasás ...............................................................................................................12
1.8. Memóriák, és illesztésük ........................................................................................................................... 12
1.8.1. A memóriák elvi felépítése ......................................................................................................12
1.8.2. Csak olvasható (fix) memóriák................................................................................................13
1.8.3. Írható, olvasható memóriák .....................................................................................................16
1.8.4. Memóriák illesztése .................................................................................................................17
1.9. Perifériák illesztése a mikrogéphez ......................................................................................................... 18
1.9.1. Bemenetek (input) illesztése....................................................................................................18
1.9.2. Kimenetek (output) illesztése ..................................................................................................19
1.9.3. Perifériák címzése....................................................................................................................20
2. A mikrokontroller .............................................................................................................................21
2.1. A 8051 mikrokontroller család................................................................................................................. 21
2.1.1. A CPU és regiszterei................................................................................................................22
2.1.2. Belső memória .........................................................................................................................22
2.1.3. A Portok...................................................................................................................................25
2.1.4. Programozható időzítő / számláló egységek............................................................................26
2.1.5. Soros vonali illesztő.................................................................................................................30
2.1.6. Megszakítások .........................................................................................................................33
2.1.7. Teljesítmény felvétel vezérlése................................................................................................35
2.2. Külső memóriák illesztése......................................................................................................................... 35
2.2.1. Adat-, és programmemória kezelése........................................................................................35
2.2.2. Külső perifériák csatlakoztatása .............................................................................................36
3. Mikrogépek programozása ...............................................................................................................37
3.1. A programozásról általában..................................................................................................................... 37
3.1.1. A programozás célja ................................................................................................................37
3.1.2. A programfejlesztés lépései .....................................................................................................38

2.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

3.2. Assembly nyelvű programozás................................................................................................................. 39


3.2.1. A forrásnyelvi program............................................................................................................39
3.3. Fordítást vezérlő utasítások...................................................................................................................... 46
3.3.1. Assembler DIREKTIVÁK.......................................................................................................46
3.3.2. Fordítási parancsok ..................................................................................................................47
4. A 8031/51 típusú mikrokontrollerek utasításai ...............................................................................50
4.1. Az utasítások, és azok hossza.................................................................................................................... 50
4.2. Futási idő .................................................................................................................................................... 50
4.3. Címzési módok........................................................................................................................................... 51
4.3.1. A címzésről általában ..............................................................................................................51
4.3.2. Regiszter-címzés......................................................................................................................51
4.3.3. Direkt címzés ...........................................................................................................................52
4.3.4. Indirekt címzés.........................................................................................................................52
4.3.5. Közvetlen címzés.....................................................................................................................52
4.3.6. Indirekt regiszter-címzés..........................................................................................................52
4.4. A különböző utasítás fajták ...................................................................................................................... 53
4.4.1. Az adatátviteli utasítások.........................................................................................................53
4.4.2. Az aritmetikai utasítások. ........................................................................................................55
4.4.3. Logikai és boole utasítások......................................................................................................56
4.4.4. Forgatás ( rotáció)....................................................................................................................56
4.4.5. Vezérlés átadó utasítások.........................................................................................................57
4.5. Az utasítások hossza és végrehajtási idejük............................................................................................ 60
5. Programofejlesztés ............................................................................................................................61
5.1. A programfejlesztés lépései ...................................................................................................................... 61
5.2. A programfejlesztés eszközei.................................................................................................................... 62
5.3. Programszerkezetek .................................................................................................................................. 63
6. Programfejlesztés az XE251 környezetben. .....................................................................................68
6.1. Fájl (Fájlkezelés menü) ............................................................................................................................. 69
6.2. Editor (ASCII szöveges fájlok megtekintése, módosítása) .................................................................... 70
6.3. Assembler / Compiller (Fordítás menü).................................................................................................. 71
6.4. A Linker ..................................................................................................................................................... 71
6.5. Tesztelés (programellenőrzés) .................................................................................................................. 72
6.6. A súgó ......................................................................................................................................................... 73
6.7. Példák programfejlesztésre ...................................................................................................................... 73
Feladat: .......................................................................................................................................................79
7. A programtesztelés ............................................................................................................................84
7.1. Programszimuláció.................................................................................................................................... 84
7.2. A programok valósidejű tesztelése........................................................................................................... 85
7.3. A monitor program ................................................................................................................................... 86
7.3.1. Inicializálás ..............................................................................................................................86
7.3.2. Memória utasítások..................................................................................................................87
8. Függelék............................................................................................................................................89
3.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

8.1. Assembler direktívák ................................................................................................................................ 89


8.1.1. Szimbólum definiáló direktívák: .............................................................................................89
8.1.2. Helyfoglaló, és inicializáló direktívák .....................................................................................90
8.1.3. Modulok közötti kapcsolatok direktívái ..................................................................................90
8.1.4. Cím beállító és szegmens választó direktívák .........................................................................91
8.2. Fordítási parancsok................................................................................................................................... 92
8.2.1. Elsődleges parancsok: .............................................................................................................92
8.2.2. Másodlagos parancsok ............................................................................................................95
8.2.3. Feltételes fordítási parancsok..................................................................................................96
8.3. A 8031/51 mikrokontroller család utasításai .......................................................................................... 98
8.4. A szimulátor parancsainak részletes leírása ......................................................................................... 102
8.5. A monitorprogram parancsainak részletes leírása .............................................................................. 107
8.5.1. Lépésenkénti futtatás parancsai: ............................................................................................112

4.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Bevezetés
A tantárgy feladata a mikroprocesszoros un. intelligens berendezések - PC-k, ipari irányító készülékek
(PLC-k), különböző hírközlési rendszerek stb. - működésének megismeréséhez, programozásuk
elsajátításához szükséges alapismeretek megtanítása. Jártasságot kíván nyújtani az assembly nyelvű
programozásban, valamint készséget kialakítani a mikrogépek használatában.
A felsorolt célkitűzések elérése érdekében foglalkozunk
· a mikroszámítógépek általános felépítésével és működésükkel,
· a mikroprocesszorok rendszertechnikai szerepével,
· az un. "egy chip-es" számítógép, a mikrokontroller alkalmazásával,
· a perifériák illesztésével,
· a processzorközeli programozás (assembly nyelvű) alapjaival,
A mérési gyakorlatok keretében egy általános célú mikrogépen sajátítják el a hallgatók
· a programozás alapjait,
· a különböző programszerkezetek kialakítási módszereit,
· a megszakítások használatát,
· a különböző irányítási feladatok programozását.

5.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

1. A mikrogép (Mikroszámítógép)
Mikrogépeknek (mikroszámítógépek) nevezzük a mikroprocesszoros, vagy mikro-kontrolleres
digitális berendezéseket. A személyi számítógépek ( PC - k ) mellett többek között ilyen készülékek
irányítják a különböző ipari gyártósorokat, korszerű gépkocsikat és a szórakoztató elektronika,
valamint a háztartási gépek egy nagy csoportját is.
A mikrogépek mindegyikében megtaláljuk
· a központi vezérlő egységet ( CPU Central Processor Unit ),
· a program memóriát,
· az adat memóriát,
· a periféria illesztő egységeket,
· és a tápegységet.
A mikrogép rendszertechnikai felépítését szemlélteti a 1.ábra.

1. ábra
1.1. A központi vezérlő egység

A CPU irányítja a mikrogép program szerinti működését. A működés az un. utasítás ciklusok
sorozatából tevődik össze. Egy utasítás ciklusban a CPU
· a programtárból beolvassa az soron következő utasítást,
· végrehajtja az utasításnak megfelelő elemi műveletet, és
· előállítja a mikrogép elemeit vezérlő jeleket.
1.2. Processzor vezérlés

A mikroprocesszor működését az un. processzorvezérlő jelekkel lehet változtatni.


A működést a beépített, vagy külső órajel generátor ütemezi.
További vezérlő jelek:

6.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· a bekapcsolási alapállapotot vezérlő bemenet a RESET,


· működést befolyásoló várakozás (wait) vezérlő bemenet READY,
· megszakítás-t kérő bemenet INT,
· a megszakítás elfogadását visszajelző kimeneti jel INTA,
· külső busz vezérlő, vagy másik processzor által kiadott un. busz kérési jelet fogadó
bemenet, és a busz kezelését átadó kimeneti jel
· a RD (olvasó), WR (író , és periféria választó jelek.
1.3. Memóriák

A mikrogépek működéséhez feltétlenül szükséges a programot, és a számítások, műveletek


operanduszait tároló memóriákra. Funkcionálisan ezek külön egységet alkotnak, ugyanakkor fizikailag
egy memória is alkothatja ezeket.
1.3.1. A program memória( PM )
A mikrogép működését előíró program utasításainak megfelelő műveleti kódokat, és egyes
operanduszait tárolja a program memória. A műveletek végrehajtása során e memória területről csak
olvasás történik. Olyan mikrogépekben amelyek csak egy programot hajtanak végre ( pl. videó-magnó
irányítása), a programot un. fix-memória (ROM, PROM, EPROM, EEPROM) tárolja. A PC - ben
futás közben is változik az éppen végrehajtandó program, ezért itt irható-olvasható memóriába ( RAM
) tárolódnak az éppen aktuális program kódjai, operanduszai.
1.3.2. Az adatmemória ( DM )
Az adatmemória tárolja a működés során használt változók, perifériákról beolvasott, ill. kiviendő
információk aktuális értékeit. A feladatból adódóan csak irható-olvasható memóriák (statikus és
dinamikus RAM, mágneses tárolok stb.) használhatóak ilyen feladatra.
1.4. Periféria illesztés

A mikrogép és a külső eszközök adatforgalma és vezérlése a periféria illesztő egysé-geken keresztül


történik. Mindkettő irányulhat a külső eszköztől a mikrógépbe (bemeneti-, vagy input egység), illetve
ellenkező irányba (kimeneti-, vagy output egység ). Az ember-gép közvetlen kapcsolat alapeszközei az
adat-, és parancsbevitelre szolgáló klaviatúra, illetve a különböző megjelenítő egységek (képernyő,
szám-, és karakter kijelzők stb. ) ahová a mikrogép a műveletek eredményeit írja ki. Amikor a
mikrogép egy berendezést irányít ( automatizálás ) az információk és parancsok gép-gép közötti
illesztő egységeken keresztül történik.

7.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

1.5. A tápegység ( TE )

A mikrogép feszültség, és áramellátását biztosítja. A leggyakrabban normál hálózatból (230 VAC


50 Hz) állítják elő a tápegységek az integrált áramkörök biztos működését szolgáló stabilizált (Ucc= 5
V), illetve az egyéb célokra használt stabilizálatlan egyenfeszültségeket (12 V, stb.). Különleges
mikrogépek tápenergiáját akkumulátor is biztosíthatja ( pl. gépkocsik fedélzeti számítógépei,
meteorológiai mérésadatgyűjtők stb.)
1.6. A busz-rendszer

A mikroprocesszor közvetlen környezetét a különböző memóriák, programozható perifériák, illesztő-,


és processzorvezérlő egységek alkotják.
A környezet elemei közötti adatmozgás, és egyéb műveletek jelei a BUSZ vonalakon keresztül
történik. Elvi felépítését láthatjuk a 1.ábrán.
A DATA (adat) buszon kétirányú adatmozgás lehetséges. A cél, vagy a forrás mindig a processzor.
Az ADRESS (cím) busz vonalain adja ki a processzor azt a címet (programszámláló tartalmát)
ahonnan, vagy ahová az adat átvitelre kerül. A címbusz vonalszáma (szélessége) határozza meg a
csatlakoztatható maximális memóriakapacitást. Például ha 16 bites címzés 216 bájt, azaz 64 Kbájt
elérését teszi lehetővé.
A vezérlő vonalak, vagy CONTROLL "busz" változó számú vonala miatt igazában nem nevezhető
busznak. Ezeken a vonalakon keresztül vezérli a mikroprocesszor a kiválasztott adatmozgatást.
1.7. mikroprocesszor

A mikroprocesszor olyan integrált áramkör, amely egy digitális számítógép központi egységének (
CPU - Central Processor Unit ) alapvető feladatait látja el.
Az Intel cég 8080 típusjelű első mikroprocesszora 1973-ban került a piacra. A mai napig számtalan
változatot fejlesztettek ki, amelyek közül a legismertebbek a 8085, 8086, 80286, 80386, 80486, 80586
( pentium ), és a sor folytatódik.
A mikroprocesszorban - gyártótól, és típustól függetlenül - megtalálhatók a
· utasítás dekóder és ciklus vezérlő,
· aritmetikai-logikai egység ( ALU),
· regisztertömb ( Accumulator, operatív-, és átmeneti tárolók ),
· Stack mutató ( Stack-pointer SP),
· Program számláló ( PC ),
· időzítő és vezérlőegység,
· adat-, és címbusz meghajtók.

8.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A továbbiakban az Intel 8085 típusú mikroprocesszor felépítését tárgyaljuk. A mikroprocesszor blokk-


sémája látható a 2. ábrán.

2. ábra

1.7.1. Utasítás feldolgozó


A soron következő - Fetch ciklusban - beolvasott utasítás egy regiszterbe íródik, amelyhez csatlakozó
utasítás dekóder " értelmezi " az utasítás kódot, vagyis előállítja az utasítás végrehajtásához szükséges
belső vezérlőjeleket.

1.7.2. Aritmetikai - logikai egység ( ALU )


A mikroprocesszor az utasításban előirt aritmetikai (ÖSSZEADÁS, KIVONÁS), valamint logikai (ÉS,
VAGY, KIZÁRÓ-VAGY, és TAGADÁS) műveleteket az ALU (Arithmetic Logic Unit) műveleti
egység végzi. A műveleti egységhez tartoznak az Accumulátor (ACC) a Flag (jelző), és az átmeneti
(temporary) 8 bites regiszterek. A legtöbb műveletvégzés előtt az egyik operanduszt az ACC-be kell
vinni, a másik operandusz a regiszter tömbben, vagy a külső memóriában, illetve a programban kell
legyen. A művelet eredménye az ACC-be kerül, és egyúttal állíthatja a jelző (flag) regiszterben lévő
feltétel biteket. Ezek a bitek

· Zero 1 ha az eredmény 0,
· Carry 1 ha az eredmény túlcsordul,
· Sign 1 ha az eredmény negatív,

9.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· Parity 1 ha páros számú egyes van az akkumulátorban,


· AC (Auxiliari carry - közbenső átvitel ) 1 ha az alsó négy bitről van átvitel.
1.7.3. Regiszter - tömb
A processzorban van egy irható, olvasható memória, amely egyrészt bájtos (8 bit), másrészt szavas (16
bit) szervezésű. A B, C, D, E, H, L jelölésű hat különálló bájtos regisztert jelent. Ugyanezek
regiszterpárként is elérhetők a BC, DE, HL jelölésekkel. E regiszterek bájtosan operanduszokat, míg a
szavas szervezésben operandusokat, vagy címet tárolhatnak. További két regiszterpár a Stack-pointer (
SP ), valamint a Program-számláló ( PC ). Ezek mindig címet tárolnak. Az SP tárolja a Stack- ( zsák )
memória aktuális címét. A PC-ben van a soron következő programbájt címe.

1.7.4. Busz illesztés


A mikroprocesszor és a környezete közötti adatforgalom a buszrendszeren keresztül történik. A
processzor a DATA (adat) buszhoz kétirányú, míg az ADRESS (cím) buszhoz egyirányú (kifelé
irányított) buszmeghajtó - tri-state - illesztő áramkörökön csatlakozik

A két busz lábkiosztása részben átfedett. Az adatbitek, és a cím alsó 8 bitje azonos lábakon
(AD0...AD7) jelenik meg. Míg a cím felső 8 bitje külön lábakon (A8 .. A15) van kivezetve. A közös
lábakon kivezetett adat-, és címbitek szétválasztásához egy külső tároló (8 bites Latch) szükséges.
Ebbe az ALE (Address Latch Enable ) jel írja be ciklus elején kiadott címbiteket.

A vezérlő vonalak, vagy CONTROLL "busz" változó számú vonala miatt igazában nem nevezhető
busznak. Ezeken a vonalakon keresztül valósul meg az egész rendszer - pl. adat-cím szétválasztás (
ALE ), az írás ( WR), vagy az olvasás (RD) - vezérlése.

A processzort vezérlő jelek biztosítják a működés időbeli ütemezését (CLOCK, READY),


alaphelyzetbe állítását (RESET), a busz használatának átadását másik processzornak, vagy DMA
vezérlőnek (HOLD, HLDA), megszakítás kérések fogadását ( INT,TRAP, stb.), visszajelzését (INTA).

1.7.5. Időzítő - vezérlő egység


Az időzítő - vezérlő egység fogadja a processzort vezérlő jeleket és előállítja a rendszer működését
vezérlő jeleket. A kiadott jelek egy része tri-state illesztésű.

1.7.6. A processzor megszakításkezelése


A mikroprocesszorok a programban megirt sorrendben hajtják végre az utasításokat. Az előre ismert,
és jól definiált műveletek sorrendje viszonylag könnyen irható le. Sok esetben a feladat olyan, hogy a
mikrogépnek egy külső esemény bekövetkeztekor abba kell hagynia az éppen futó program
végrehajtását, és az eseménytől függő más programot kell futtatnia. Ezt a folyamatot nevezzük
program-megszakításnak (interrupt).

10.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Alapvetően az alábbi két megszakítási eljárást alkalmazzák:

· egyik módszernél a megszakítás kérése, és elfogadása után a külső vezérlő adja meg azt a
címet, ahonnan a processzornak hívnia kell az un. megszakítás szubrutint. E módszernél a
megszakítást kérő jel érkezik az INTR bemenetre. A kérés elfogadása után a processzor
adja az INTA jele(ke)t, amelynek hatására az adatbuszon kapja meg a cím bájtjait,
· a másik eljárásnál minden megszakításkérő bemenethez (TRAP, RST 5.5, RST 6.5, RST
7.5) egy-egy adott cím tartozik, és a processzor innen hívja az aktuális megszakítás-rutint.
1.7.7. Memória írás, olvasás
A memóriák funkcionálisan két csoportba sorolhatók. Az egyik a programot (PM ), a másik pedig az
adatokat, és változók értékét tároló un. adatmemória (DM).

A processzor a programmemóriából olvassa ki az utasítás-kódokat, illetve a programban foglalt


adatokat és címeket. Erre a memóriaterületre írás sohasem történik.

Az adatmemória tartalmát a processzor olvassa is, és írja is. A memória kezelést az IO/M jelű vezérlő
vonalának 0 szintjével jelzi.

Egy bájt írása, vagy olvasása egy un. gépi ciklus alatt történik, amely az órajel periódusidejével
megegyező ütemekből ( T1, T2, T3, stb ) áll. A memória, illetve periféria olvasás időzítését
szemlélteti az 3. ábra.

CLK
IO/M
A8 … A15
A0-A7 ..D0-D7
ALE
RD
READY

3. ábra
A T1 (cikluskezdő) ütemben a címbitek, az IO/M (periféria/memória választó), és az ALE (címtároló)
jelek kerülnek a megfelelő vonalakra. A T2 - ben kerülnek a buszra az adatbitek, és az írást (WR=0),
vagy olvasást (RD=0) vezérlő jelek. Ugyanekkor vizsgálja meg a processzor a READY várakozást
kérő bemenetet. Ameddig ez aktív (0 szintű) un. várakozási ütemet (Tw) következnek. A T3 ütemben -

11.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

a vezérlőjel felfutó élénél - történik az adatok beolvasása a processzorba (olvasási ciklus), vagy a
memóriába (írási ciklus).

1.7.8. Periféria írás, olvasás


A leggyakrabban alkalmazott programozható perifériák az időzítő, a megszakítás-vezérlő, a
kommunikációt (soros, párhuzamos) végző, és különböző bites, vagy bájtos portok. A portok
rendszeren belüli, vagy más rendszerekhez történő illesztést is elláthatják. A memória, illetve periféria
írás időzítését szemlélteti a 4.ábra.

CLK
IO/M
A8 … A15
A0-A7 ..D0-D7
ALE
WR
READY

4. ábra
A processzor priféria írásakor, vagy olvasásakor csak 8 bites címet küld a buszra, és ezt mind a
címbusz alsó-, mind pedig a felső 8 bites részén egyformán. Ily módon 256 különböző cím lehetséges.
Az IO/M vonal ekkor 1 szintű. Miután az írást a WR, az olvasást pedig a WR jel vezérli, ezért azonos
címen egy kimeneti-, és egy bemeneti - 8 bites - peréfira érhető el.

A periféria írási-, és olvasási gépi ciklusok időzítése megegyezik a memória elérési gépi ciklusokéval.

1.8. Memóriák, és illesztésük

A következőekben röviden áttekintjük a mikrogépekben használt, félvezető alapú memóriák

· általános felépítését,
· legfontosabb változatait,
· címzési módját.
A leggyakrabban használt bájt szervezésről beszélünk alapvetően. Az ilyen memóriában tárolt adatok
bájtonként (8 bit) olvashatók, vagy írhatók. Nem térünk ki azokra a memóriákra, amelyeknél a tárolt
információ egyes bitjei közvetlenül érhetők el.

1.8.1. A memóriák elvi felépítése

12.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Az 5. ábra szemlélteti egy memória (chip) alapvető részeit.

5. ábra

· A tároló-cellák –ba kerülnek beírásra a tárolni kívánt információk, adatok.


A tárolás történhet bit -es, vagy bájt -os egységekben
· A dekóder választja ki a - címek (A0, A1,…An-1) alapján - meghatározott adatot.
· Az adatbusz illesztőn keresztül jut a kiválasztott helyről az adat a buszra, vagy fordítva.
A leírt memória-felépítés elvileg minden változatnál azonos. Lényeges különbség a tárolandó
információ (adat) beírási módja között van. Ezek alapján különböztetjük meg a

csak olvasható (fix), és az


írható-olvasható tárolókat.
A következőekben áttekintjük e-memória változatok lényeges tulajdonságait.

1.8.2. Csak olvasható (fix) memóriák


A fix memóriák megnevezés arra utal, hogy a tárolt adatokat csak olvasni lehet a mikrogépben futtatott
alkalmazói programban. Az adatok beírása csak programozó egységgel végezhető.

A beírás történhet

· maszkolással, a memória gyártása során, amelyet ROM – nak (Read Only Memori – csak
olvasható memória) nevezünk,
· a felhasználó által, de csak egyszer programozhatóak a PROM – ok (Programabble Read
Only Memori – programozható csak olvasható memória),
a felhasználó által többször is programozhatóak az EPROM –ok (Erasable Programabble Read Only
Memori – törölhető, és programozható csak olvasható memória), illetve az EEPROM –ok ( Electrical

13.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Erasable Programabble Read Only Memori – elektromosan törölhető, és programozható csak olvasható
memória).

Az EPROM –ban tárolt adat törlése - a tok tetején lévő quartz ablakon keresztül - meghatározott
hullámhosszú UV sugárral végezhető („napoztatás”). Az EEPROM adatai elektromos árammal
törölhetőek ki, a készülékből való eltávolítás nélkül.

A következőekben röviden tekintsük át a fix memóriák egyes részegységeinek feladatát, működését.

Þ A dekódoló egység
Feladata, hogy a címbemenetekre (A0 … An-1) adott bináris kód dekódolásával, 1 az n-ből kóddá
alakításával kiválasszon egy memória-egységet, bájtot, vagy bitet. A címbemenetek száma n,
határozza meg a memória kapacitását, vagyis hány egységnyi információ tárolható benne.

Þ A memória cellák
Az ismertetett változatok bájtos-memóriacelláinak elvi megvalósítását szemléltetjük a 6. ábrán.
Mindhárom változatnál mátrix elrendezést rajzoltunk. A dekóder a sor-vezetékek egyikére ad csak 0
szintet. Az oszlopvezetékek mindegyike – ellenálláson keresztül – az 1 szintű tápfeszültségre (Ut)
csatlakozik. A sor-oszlop keresztpontjait vagy összekötik, vagy nem. A „rövidzár” , vagy hiánya adja
a tárolt információ egy bitjének az értékét.

A 6.a.ábrán a ROM felépítését láthatjuk. A dekódoló által kiválasztott sornál (bájtnál) azokra az
oszlopvezetékeken lesz 0 szint amelyeknél – a gyártás során felvitt - összekötő vezeték van, a többi
pedig 1 szintű lesz. Az így „beprogramozott” bájt jut a belső adatbuszon az illesztő egységre. Az
illesztő egység kialakítása – hogy invertáló, vagy nem invertáló - határozza meg, milyen szintű lesz
az engedélyező jel időtartama alatt az adatbusz egyes vezetékeire jutó jel szintje.

A 6.b.ábra a PROM felépítését mutatja. Gyárilag mindegyik sor oszlop keresztpontban van összekötő
vezeték, vagyis mindegyik bit azonos értékű. A rövidzárak könnyen olvadó fémből készülnek. A
felhasználás előtt egyszer programozható a memória azáltal, hogy kiolvaszthatók a szükséges
összekötök. Ily módon a tárolandó információt a felhasználó viheti be a chip-be. Hibás programozást
már nem lehet módosítani!

A 6.c.ábrán az újra programozható fix-memóriák - EPROM, illetve EEPROM - kialakítása látható.


Mindegyik keresztpontban van egy FET , amelyeknél a vezérlő elektróda (Gate) egy „sziget”,
amelyekbe bevihetők elektromos töltések (elektronok, vagy lyukak), illetve onnan kitörölhetők. A
töltés-bevitel mindig elektromosan történi, amit „beégetésnek” is nevezünk. A szigetekben tárolt
töltések kitörléséhez szükséges energiát vagy UV sugárzással (EPROM), vagy elektromos áram révén
(EEPROM) visszük be. Azok a tranzisztorok vezetnek, amelyeknél a vezérlőelektróda töltött, a többi

14.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

viszont szakadás. A működés további része teljesen megegyezik a ROM, és PROM működésénél
leírtakkal.

a. b.

c.
6. ábra
Þ A BUSZ illesztő
Mindegyik memória típusnál a a kiválasztott információ tri-state kapukon keresztül kerül –
engedélyező jelek hatására - az ADAT BUSZ egyes vezetékeire. Az illsztés egyik változatának elvi
kapcsolási rajza látható a 7.ábrán.

7. ábra

Az ábrán jelölt tri-state kapu nem invertáják a belső jelet. Létezik olyan megoldás is, amelynél
invertálás után kerül a jel a külső adat buszra. Az adatátvitelt két jel együtt engedélyezi. Az EN-el

15.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

jelölt jel az un. chip enabla CE (tok engedélyező), vagy máskép chip-select CS (tok kiválsztó). A tok
olvasásának engedélyezését a címekből állítja elő egy dekódóló logika. Az olvasó jelet RD (Read) a
mikroprocesszor küldi a vezérlő buszra. A memória-tokoknál ezt az engedélyező bemenetet OE
(Output Enable) jelöléssel adják meg. A legtöbb memória típusnál mind az olvasó OE, mind pedig a
tok kiválasztó CE (CS) bemenetek aktív szintje a 0.

1.8.3. Írható, olvasható memóriák


A számítógépen futó alkalmazói programból írható-olvasható memóriákat nevezik RAM-nak. A jelölés
a Random Accesse Memori („véletlen” hozzáférésű memória) megnevezésből adódik. A véletlen
hozzáférés arra utál, hogy a memória egységek teljesen egyformán érhetők el. Találkozhatunk a RWM
(Read Write Memori) elnevezéssel is, amely az írható-olvasható tulajdonságot jelöli.

A 8.a. ábrán a RAM tároló celláinak elrendezése, a b. ábrán pedig a tároló cellák felépítése látható.
Minden bitet egy-egy félvezető alapú D flip-flop tárol. Az egyes tárolók írását, illetve olvasását a
dekódoló egység Ki jele készíti elő. A flip-flop beírását a Cb billentő jel végzi. Mind az írás, mind
pedig az olvasást a külső vezérlőjelek – a busz illesztőn keresztül – hajtják végre.

a. b.
8. ábra
A 9.ábra szemlélteti egy RAM busz-illesztő egységének felépítését. A kiválasztott bájt bitjeinek írását
a Cb jel végzi, amelyet az EN engedélyező és a WR író jel állít elő, és egyúttal engedélyezi a külső
adatbusz jeleinek fogadását.

16.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

9. ábra

Az adat olvasása pedig az EN engedélyező, és a RD olvasó jelek hatására történik, amikor is a


kiválasztott bájt egyes bitjeinek értékét a tri-state kapuk a külső adat-buszra csatolják.

1.8.4. Memóriák illesztése


A mikrogépekben különböző típusú, illetve kapacitású memória-tokok vannak. Ezek elérése a CPU
felől az eltérő címük alapján történik. A 10.ábrán – egy példa segítségével – szemléltetjük a különböző
memóriák címzését, illesztésüket a CPU-hoz.

10. ábra
Az ábra szerinti példán a CPU –hoz (IC1) két 27128 típusú EPROM (IC2, IC3), és két 6164 típusú
RAM (IC4, IC5) illeszkedik. Az egyes memória-tokok kapacitása címbitek száma alapján állapítható
meg.

Az EPROM kapacitása 16 kBájt, mivel 14 címvezetékkel (A0 … A13) választható egy memória egység
a tokon belül.

17.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

k = 214 = 16 384

A RAM –nak 13 címvezetéke (A0 … A12) van, tehát a kapacitása 8 kBájt.

Az egyes tokok közötti választást a nem használt címbitek kombinációi alapján lehet kialakítani. A
példában az A15, és az A14 bitek négy kombinációját állítja elő az IC6 jelű dekódoló (SN74LS139). A
kapcsolásban használt négy memória-tok címzési tartományait foglaltuk össze a következő
táblázatban. A tokon belüli címzéshez használt címbitekhez írt x jelenti azt, hogy az 0, vagy 1 értékű is
lehet. A RAM – nál az A13 bit nincs felhasználva sem a tokon belüli, sem a tokok közötti
választáshoz, ezért ezt n –el jelöltük. Mivel a bit mindkét lehetséges értékénél ugyanaz a tok érhető el,
ezért nem teljes a dekódolás. Amikor ez nem okoz hibát, az ilyen dekódolás megengedett, mert
kevesebb áramkört alkalmazhatunk.

tok A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A1 Cím


IC2 0 0 x x x x x x x x x x x x x x 0000H – 3FFFH
IC3 0 1 x x x x x x x x x x x x x x 4000H – 7FFFH
IC4 1 0 n x x x x x x x x x x x x x 8000H – 9FFFH
A000H – BFFFH
IC5 1 1 n x x x x x x x x x x x x x C000H – DFFFH
E000H – FFFFH

A teljes dekódolás hiánya miatt a RAM-ok minden bájtja két címen is hozzáférhető!!

1.9. Perifériák illesztése a mikrogéphez

A mikrogépek feladata, hogy különböző függetlenváltozók – bemeneti jelek -értékeitől függően,


kimeneti jelekkel – függő változók - működtessen készülékeket.

A bemeneti, és a kimeneti jelek egyaránt lehetnek digitálisak (kétértékű), illetve analógok (folytonos,
kvantált stb.). A tantárgy keretében csak a digitális jelek illesztésével foglalkozunk.

Perifériákat illesztő áramkörök alapvető feladatai:

· a csatlakozó periféria adatvonalainak összekapcsolása az ADAT busszal,


· szint-, és teljesítmény illesztés,
· potenciál-leválasztás (esetleges).
A következő részekben a legegyszerűbb, de alapvető illesztési megoldásokat tekintjük át.

1.9.1. Bemenetek (input) illesztése


A mikrogépbe érkező jeleket illesztő áramkörök leggyakoribb megoldása a bájtos szervezés.
Gondoskodni kell a bejövő jelek

· potenciál illesztéséről,

18.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· szűréséről, és a
· megfelelő időpontban történő mintavételezésről.
A 11. ábra szerinti áramköri kapcsolás egy adat mintavételezésére mutat példát.

11. ábra
Az ábrán a tri-state kaput az IO/RD jel nyitja, amely akkor 0 szintű, ha a periféria (I/O) kezelése
engedélyezett és olvasó jel (RD) van. A bemenetei jelet egy nyomógomb adja, amely csak
megnyomáskor szolgáltat zárt áramkört. Elektronikus áramkörökben “szakadás” nem engedhető meg.
Az Rf felhúzó ellenállás biztosítja, hogy a kapu bemenetén állandóan legyen feszültségszint. Amikor
nincs lenyomva a BE gomb, akkor 1 szintű a bemenet, és ezt is olvassa be a BUSZ –ra a mintavételező
jel. A gomb lenyomott állapotát 0 szint jelzi. Az Rs és Cs prell-mentesítő, és szűrő.

1.9.2. Kimenetek (output) illesztése


A mikrogéphez kimenetei a csatlakozó készülékeket (kijelzők, relék, stb.) működtetik. A vezérelt
készülék határozza meg illesztés feltételeit, vagyis a

· szint-átalakítás jellegét, a
· teljesítmény-átvitel mértékét,
· potenciál illesztés kívánalmait.
Minden típusú kimeneti illesztő egységben van tartó áramkör, mivel a mikrogép a kimeneti jeleket
programciklusonként csak egyszer frissíti. Két jelfrissítés között minden bit értékét tárolni kell!

A kimeneti jel illesztésének egy elvi kapcsolási vázlata látható a12.ábrán .

12. ábra

19.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A tartó áramkör (D flip-flop) mindig azt az értéket tárolja, amely az IO/WR jel 1-0 átmenetekor
érvényes adat. A tárolt értékrt az EROSIT jelű 0 szintre aktív nyitott(open)-kollektorú erősítő
kapcsolja a kimenethez csatlakozó RELÉ tekercséhez. Mivel az erősítő invertál, ezért az 1 szintű tárolt
értéknél húz meg a relé.

1.9.3. Perifériák címzése


A perifériákat illesztő áramkörök alapvetően kétféle megoldás szerint kapcsolódnak a CPU
környezetébe. A megoldások:

· a memóriába ágyazott, illetve a


· önálló perifériaként.
A mikroprocesszorok – az IO utasításaikkal - külön is kezelhetik a periféria-elemeket, ugyanakkor a
RD/WR vezérlőjelek is használhatók egy-egy diszkrét regiszter, vagy tri-state kapú vezérléséhez. Az
uróbbi megoldást nevezzük memóriába-ágyazásnak (memory-mapped). A mikrokontrollerek
többsége csak memóriába-ágyazott perifériakezelést tud vezérelni. A 13.ábrán egy 8 bites bemeneti
tri-state kapu (SN74541), és ugyamcsak 8 bites tart áramkör (SN74573) illesztése a DATA BUS-hoz..

13. ábra
A következő fejezetekben, illetve a mérési gyakorlatok során több áramköri változat megismerésére is
mód nyílik.

20.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

2. A mikrokontroller

A mikrokontroller egyetlen közös áramkörbe (chip-be) integrált csökkentett utasításkészletű


mikroprocesszor és több periféria áramkör. A több cég által is gyártott 8031/51 típusú
mikrokontrollerben a következő perifériák találhatók: (14. ábra)

· két 16 bites időzítő/számláló ( T0, T1 ),


· négy 8 bites - bitenként is kezelhető - Port ( P0, P1, P2, P3 ),
· 128 bájt belső memória ( RAM ),
· 128 bájt SFR memória ( RAM ),
· 4 Kbájt programmemória ( ROM csak a 8051 típusban),
· RS 232 szabvány szerinti soros vonalillesztő,
· megszakítás vezérlő egység,

14. ábra

2.1. A 8051 mikrokontroller család

A 8051 mikrokontroller családnak különböző típusú mikrokontrollerei vannak. A család alaptípusa a


8031/51 kontroller. A továbbfejlesztett változatok mindegyikében változatlanul benne van az alaptípus
minden eleme, és további perifériákat is tartalmaz, vagyis működésben felülről kompatíbilisak. A
család minden tagjának azonos az utasítás-készlete. A bővített perifériák miatt több SFR regisztert,
illetve megszakítást használható. A kontroller család elemeit több cég is ( Siemens, Philips, Dallas,
Atmell stb. ) gyártja és forgalmazza.

Néhány elterjedt típus és periféria bővítései :

21.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· 8032/52 3. időzítő/számláló (T2),


· 80C552 3.idözítő/számláló (T2),
Watchdog számláló (T3),
8 csatornás (10 bites) A/D átalakító,
2. soros vonalillesztő ( I2C busz ),
két PWM modulációs kimenet.
· 80515/535 3.idözítő/számláló (T2),
8 csatornás (8 bites) A/D átalakító,
programozható referencia-feszültség,
2. soros vonalillesztő ( RS232 ),
2.1.1. A CPU és regiszterei
A mikrokontroller központi műveletvégző és vezérlő egysége ( CPU ) - a tulajdonképpeni
mikroprocesszor rész - hajtja végre

· az utasításbeolvasás -t, és "értelmezés"-t,


· az aritmetikai-, és logikai műveleteket,
· a belső működés - utasítástól függő - vezérlését,
· a külső vezérlőjelek generálását.

A CPU működését közvetlenül támogató SFR regiszterek:

· az akkumulátor ( ACC ) a műveletek operandusz-, és célregisztere,


· a státusz-regiszter (PSW),a műveletek eredményétől függő feltétel bitek tárolója,
· a stack-pointer ( SP ), tárolja a stack memóriába utoljára letárolt információ címét,
· a program számláló ( PC ), tárolja a következő utasítás-bájt címét.
· a B regiszter , a szorzás, ill. osztásnál az egyik operandusz-, és célregiszter.
2.1.2. Belső memória
A 8031/51 típusban 128 bájt - míg a család többi tagjában 256 bájt - méretű operatív belső memória és
128 bájtos SFR memória van. (15. ábra)

22.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

15. ábra

A belső operatív memória - címsorrendben - a következő részekre tagozódik:

· az alsó 32 bájt ( 00H - 1FH ) négy 8 bájtos Regiszter Bank - ra oszlik ( BANK0, BANK1,
BANK2, BANK3 ),
· a következő 16 bájt ( 20H - 2FH ) bit-címezhető memóriaterület,
· a további címeken ( 30H - 7FH az 51-es típusnál, illetve 30H - FFH a többi kontrollérnél )
általános felhasználású memória.

Az SFR jelölésű memóriaterület ugyancsak a 80H - FFH címen helyezkedik el, de címzési módja
különbözteti meg az ugyanezen címtartományban lévő általános felhasználású memóriától

2.1.2.1. A Bankok és használatuk

A Bankok közül mindig csak egy - az aktívnak választott - érhető el az utasításban foglalt címzés-el.
A kiválasztott bank egyes regisztereit az R0, R1, ... R7 szimbólumokkal jelöljük. Az R0, és R1
használható indirekt címzéshez, míg a többi tárolásra, vagy ciklusszervezéshez alkalmazható. A teljes
BANK terület bármelyik bájtja direkt címzéssel tetszőlegesen irható, vagy olvasható.

A Bank kiválasztása a PSW regiszter RS1, RS0 jelű bitekbe irt értékkel, történik ( a két bites bináris
szám adja a Bank számát, pl. RS1 = 1, RS0 = 0 a BANK2 -t teszi aktívvá).

A PSW regiszter bitkiosztása a következő:

CY AC F0 RS1 RS0 OV - P

23.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Az egyes flag-ek, jelző-bitek:

· CY (carry) az átvitel-, áthozat -bit, amely az aritmetikai műveleteknél jelzi a túlcsordulást,


· AC az alsó négy bit túlcsordulását jelző bit, a BCD átalakításnál van szerepe,
· F0 felhasználó által használható jelző-bit,
· RS0-RS1 határozzák meg az aktuális Bank -ot,
· OV az aritmetikai túlcsordulást jelzi,
· P az Accumulátorban lévő 1 páros számát jelzi (0, ha páratlan számú 1 van).
A CY, OV, és P bitek értékétől függően program-ugrásokat lehet végrehajtani. A vonatkozó feltételes
vezérlésátadó utasításokat a programozásnál fogjuk ismertetni.

2.1.2.2. A bit-címezhető memória, és használata

A bit-címezhető bájtok egyes bitjei külön-külön is írhatók, olvashatók, illetve értékükkel logikai
műveletek végezhetők. Az egyes bitek kétféle módon címezhetők, még-pedig

· bájtcím. bitszám formában pl. 20.5 a 20H című bájt 5-ös bitje ( a bit-szám 0 - 7 szám
valamelyike, 0 az első, 7 a nyolcadik bitet jelenti ),

· abszolút bitcímzéssel 00H - 7FH címtartományban. A 16 bájtos memóriaterületen lévő


128 ( 16 * 8 ) bit számozása a legelső bájt legkisebb helyértékű bitjénél kezdődik ( 20.0 -
00H ), majd a következő bit s így tovább, s sor a legutolsó bájt legnagyobb helyértékű
bitjével fejeződik be ( 2F.7 - 7FH ).

A bites logikai műveletvégzés lehetősége folytán a mikrokontrollerek nagyon előnyösen használhatók


automatizálási (vezérlési) feladatokat megvalósító berendezések (PLC – k) építésére.

2.1.2.3. Általános felhasználású memóriaterület

A belső operatív memória 30H címtől kezdődő memóriaterületét minden megkötöttség nélkül lehet
változók értékének tárolásra felhasználni.

A memória terület 00H - 7FH címen elhelyezkedő bájtjai ( a 8031/51 típusnál csak ez létezik ) mind
direkt-, mind pedig indirekt címzéssel elérhetők. A 80H - FFH című bájtok csak indirekt címzéssel
érhetők el, mivel ugyan ezen a címeken vannak az SFR terület bájtjai, amelyek kezeléséhez viszont a
direkt címzést kell használni.

2.1.2.4. Speciális Funkció Regiszterek (SFR)

Az SFR jelölésű - a 80H - FFH című - memóriaterületen helyezkednek el a

24.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· CPU regiszterek,
· programozható perifériák vezérlő-, és státusz regiszterei,
· a Port-ok kimeneti tárolói.

Az SFR regiszterek között vannak olyanok, amelyek csak bájtosan, és olyanok is amelyek bitjei
egyedenként is írhatók, olvashatók. Az utóbbi csoportba azok a regiszterek tartoznak, amelyeknek a
címe 8-al osztható (pl. 80H,88H....F0H,F8H ).

2.1.3. A Portok
A mikrokontrollerek és a környezet között az adatcsere a Portokon keresztül történik. A portok mind
bájtosan, mind pedig bitesen kezelhetők. Mindegyik port-bit alkalmazható be-, vagy kimenetként is. A
mikrokontroller családnál a portok többsége nem csupán egyszerű I/O portként használható, hanem
további, úgynevezett másodlagos funkcióra is alkalmazható. A négy Port egy - egy bitjének kapcsolási
rajza a 16. ábrán látható.

A 8031/51 kontrollernél az egyes portok másodlagos funkciói a követezőek:

· P0 multiplexelt CIM - ADAT busz ( AD0.... AD7 ),


· P1 nincs
· P2 cím felső 8 bitje ( A8 ...... A15 ),
· P3 bitenként különböző:
soros vonal (RxD - P3.0, TxD - P3.1)
külső megszakítás bemenetek (INT0 - P3.2, INT1 - P3.3),
számláló bemenetek (T0 - P3.4, T1 - P3.5),
külső memória vezérlése ( WR - P3.6, RD - P3.7).

P0 P1

25.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

P2 P3

16. ábra

Minden port-bit írásakor az adat a D-tárolóba kerül, amelyben tárolt érték állítja be - az illesztő
áramkörön keresztül – a kimenet állapotát. Egyszerű olvasáskor a lábon lévő adat kerül a belső
buszra. A read-modify típusú utasításokkal a tároló tartalmát lehet visszaolvasni

Amikor a port-bitet bemenetként kívánjuk felhasználni, vagy a másodlagos funkciót akarjuk


engedélyezni, akkor a D - tárolóba HIGH szintet ( 1 - et ) kell írni. A RESET jel hatására a
mikrokontroller mindegyik portjánál a tárolókba magától 1 íródik.

2.1.4. Programozható időzítő / számláló egységek


A 8031/51 típusú mikrokontrollerben két programozható időzítő/számláló (T0, T1) perféria van. A két
periféria felépítése egyforma, és három üzemmódban azonosan is használható. Eltérés a kettő között
az, hogy az "osztott" üzemmódra (3-as üzemmód) csak a T0 - ás időzítő/számláló programozható, míg
a soros adatátvitelt ütemező Baud-rate generátor-ként csak a T1 - es használható.

A T0 egység a TH0, és a TL0 jelű, míg a T1 pedig a TH1, és a TL1 jelű SFR regiszterekben számlálja
a kiválasztott bemenet impulzusait. Az impulzusforrás lehet az órajel 12-e ( foszc/12 ), vagy egy külső
impulzussorozat, amelyet a T0 ( P3.4 ), vagy a T1 ( P3.5 ) lábakra csatlakoztatunk. A számlálók
üzemmódját a TMOD (Timer-Modus) nevű SFR regiszter tartalma határozza meg. A számlálók
vezérlő bitjei, és a túlcsordulást tároló bitek a TCON (Timer-Control) - bitenként is irható, olvasható -
SFR regiszterben vannak.

A számláló akkor használható digitális késleltetőnek (időzítőnek), ha a számlált jelsorozat frekvenciája


állandó. Ez a feltétel a belső – frekvencia-stabilizált - órajel kiválasztásánál teljesül, és ekkor mondjuk,
hogy az egység időzítő. A kívülről érkező jelsorozat kiválasztásakor esemény-számlálásról beszélünk.

Az időzítés alapegysége a mindenkori órajel periódusidejének 12 szerese, mivel gépi ciklusonként


növekszik (incrementálódik) a számtartalom. A számlálásnál a külső jel élváltásának

26.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

meghatározásához két gépi ciklus szükséges, és ezért a legnagyobb számlálható frekvencia az órajel-
frekvencia 24-e.

2.1.4.1. Időzítő / számlálók vezérlése

A T0 számláló periféria üzemmódját a TMOD regiszter alsó négy bitje, míg a felső négy bit a T1
egységét állítja be. (Az azonos szimbólumok indexe utal a számláló számára ).

· A C/T0(1) bit választja ki az impulzus-forrást. A bit logikai 1 érétke a leosztott belső


órajelet, míg a 0 érték a külső lábra érkező jelet kapcsolja a számlálóra.

· M10(1) és az M00(1) bitekből álló bináris szám határozza meg az számláló-regiszterek


működésének módját, az üzemmód-ját.

· A számláló indításának, leállításának módját a GATE0(1) kapuzó bit szabja meg. 0


érétkénél csak szoftverből, míg egy értékénél szoftverből, és külső jellel (hardver módon)
is vezérelhető a számláló.

A számlálás indítható, illetve leállítható:

· csak szoftver vezérlési módban a TCON regiszterben lévő TR0(1) szoftver indító bit
logikai 1 szinttel indít, 0 - val pedig leállít,

· szoftver, és hardver vezérlésű módban, a TR0(1) bit és az INT0(1) lábra kívülről adott
vezérlő jel együttes 1 szintje indítja a számlálást, míg bármelyik 0 értéke leállítja azt.

A TMOD és a TCON regiszterek bitjei a következők:

TMOD T1 T0

2.1.4.1.1.1. M1 C/T M1 M0
TCON

2.1.4.1.1.2. TF0 IT1 IE0 IT0


F1

számlálók leállítása után is megmarad a regiszterekben lévő számtartalom, és egy újra indítás után
erről az értékről folytatódik a számlálás.

A számláló regiszterek tartalma programból - tetszőleges értékre - bármikor átírható.

2.1.4.2. Időzítő / számlálók 0-ás és 1-es üzemmódjai

27.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Mindkét üzemmódban szabadon futó előre számlálóként működik a periféria. A különbség csupán az,
hogy a 0 - ás módban a magasabb helyértékű regiszter (a TH0(1)) csak 5 bites, míg az 1 - es módban 8
bites. Ennek megfelelően a 0 - ás üzemmódba állított számláló 13 bites, míg az 1 - es módusú pedig 16
bites.

A két regiszterből álló számláló kiegészül egy túlcsordulás bittel (TF0 (1)), amely a TCON
regiszterben van. A túlcsordulást követően a számlálás kezdődik elölről, és a túlcsordulás bit is
törlődik. A túlcsordulás megszakítás-t (interrupt) is indíthat, ha az engedélyezett. Az áramköri
felépítést szemlélteti a 16. ábra.

17. ábra

A számláló modulusa változtatható oly módon, hogy a túlcsorduláskor egy 0 - tol eltérő kezdőértéket,
írunk a számlálóregiszterekbe. (Csak megszakításos működésnél valósítható meg!)

2.1.4.3. Időzítő / számlálók 2-es üzemmódja

A 2 - es üzemmódban csak a TL0(1) 8 bites regiszterben történik a számlálás. A regiszter


túlcsordulásakor ebbe a regiszterbe magától átíródik a TH0(1) regiszter tartalma, és ezért nem kell a
kezdőértéket mindig újra írni. . Az áramköri felépítést szemlélteti a 17. ábra.

28.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

18. ábra

A túlcsordulást jelző bitnek ugyanaz a működése, mint a 0 - ás, vagy az 1 - es üzemmódokban.

A 2-es üzemmódot elsősorban az állandó késleltetési időalap előállítására szokás használni. A soros
adatátvitel ütemezéséhez (Baud-rate generátor) a T1 számlálót is ebbe a módba kell beállítani.

2.1.4.4. A T0 időzítő/számláló 3-as üzemmódja

A 3-as üzemmódot osztott regiszteresnek is nevezhetjük, mivel ekkor a T0 jelű periféria egység két 8
bites számláló regisztere más-más impulzussorozatot számlálhat.

· A TH0 a leosztott órajelet számlálja, ha a TR1= 1. Túlcsordulásakor a TF1 bitbe kerül 1.


Ez egy vezérelt késleltető.

· A TL0 regiszterhez csatlakoznak a T0 vezérlő áramkörei, és ezért e regiszterben 8 bitesen


a leosztott órajel (időzítés), vagy a T0 lábra érkező impulzusok számlálása történhet
(eseményszámlálás).

Az áramköri felépítést szemlélteti a 18. ábra.

29.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

19. ábra

Ezt az üzemmódot akkor kell használnunk, ha szükséges a soros kommunikáció - tehát a T1 foglalt - és
a feladat megoldásához szükséges két független számláló.

2.1.5. Soros vonali illesztő


A mikrokontroller beépített perifériája a soros adatátviteli illesztőegység.

A soros átvitelnél a kontroller a TxD jelű lábon adja a kiviendő, míg az RxD jelű lábon fogadja a
beérkező adatokat.

Az átviteli egység Full - duplex, ami azt jelenti, hogy egyidejűleg mind adás, mind pedig vétel is
folyhat.

A periféria üzemmódjainak vezérlő bitjei, illetve a státusz bitek az SCON jelű SFR regiszterben
vannak.

Négyféle üzemmódban működhet az átviteli egység. A leggyakrabban az RS232C szabványnak


megfelelő 3-as üzemmódot használják.

A soros - aszinkron kommunikációt a T1 időzítő/számláló ütemezi 2-es üzemmódban. Az átvitel


Baudban (bit/sec) mért sebességét az órajel frekvenciája és a számláló modulusa határozza meg, amely
számítható is, vagy a katalógusokból kikereshető.

A kommunikáció a 19. ábra szerinti bitsorrendben bájtonként történik.

· Adásszünetben az átviteli vonalakon magas szint van.


· Egy bájt adása az egy bit-ideig tartó alacsony szintű un. START bittel kezdődik.
· Ezután kerülnek egymás után a vonalra - a legkisebb helyértékűvel kezdve - a bájt bitjei, az
ADAT - bitek.(D0 – D7)
· Az adatok után következhet egy paritás - ellenőrző bit, amely programozástól függően el is
maradhat.( P )
· A bájt adását egy, vagy két - magas szintű - STOP - bit zárja le.

30.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

D1 D2 D3 D4 D5 D6 D7 P

Adás szünet Start bit Adat bitek Paritás bit Stop bitek

20. ábra

Az adatátvitel önszinkronozó, mivel egy bájt átvitelét egy magasról-alacsony szintre váltó él indítja
mindig. Adásszünetben a vonalak magas szinten vannak.

A kommunikáció csak akkor lesz hibamentes, ha az adó és a vevő átviteli sebessége, és formátuma
azonos.

A 20. ábrán látható az RS232 szabvány szerint működő soros vonali illesztő egység logikai vázlata.

A programozható illesztő a TxD (Transmit =adó), és az RxD (Rcievie =vevő) vonalakon keresztül
kommunikál a csatlakozó egységgel. E mellett még a két készülék közös tápfeszültség pontjait (GND)
kell összekötni.

A fizikailag különböző vonalak lehetővé teszik az egyidejű adást, és vételt, vagyis DUPLEX.

A működést ütemező jelet a T1 számláló túlcsordulása végzi. Az adás sebességét még az SMOD bit 0-
ba állításával felezni lehet.

Két SBUF (Serial Buffer) jelű léptető-regisztert találunk az ábrán. Az egyik a kiviendő adatot, míg a
másik a vett adatot tárolja. A felhasználói felületről nézve, mindkettő azonos címen van!! A
különbség, hogy az adó-regiszterbe csak írni, míg a vevő-regiszterből csak olvasni lehet.

A 20. ábra alapján tömören áttekintjük a soros adás, és a vétel működését.

31.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

21. ábra

2.1.5.2. Adás

Az adás egy - az SBUF –ba irányuló - adatátviteli utasítással indul. Ekkor az „Írás az SBUF -ba” jelű
bemenetre érkező vezérlő jel a belső adatbuszról az SBUF -ba tölti a kiviendő adatot, a D flip-flop -ba
írja a TB0 bit értékét (9. bit), valamint indítja az adás vezérlését (Start).

A további folyamat önállóan megy végbe, amely a 21. ábrán követhető. Az adás-vezérlő állítja elő a
Send, Data, és Shift jeleket. Ezek vezérlik a TxD vonalon kilépő – a 19. ábrán vázolt felépítésű
adatsort. A nyolcadik adat bit (D7) kilépése után írja 1-be a TI bitet, amely jelzi az információ
kivitelének végét.

32.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

22. ábra

2.1.5.3. Vétel

A soros vonalon érkező információ az RxD csatlakozópontra jut. Amíg nincs érvényes adat, a vonal
magas szinten van. A vonalon megjelenő 1 – 0 átmenet „jelezheti” bájt következik.

A vétel-vezérlő egységet az élfigyelő indítja a Start bemenetén, és ez a jel egyúttal törli a 16-os osztót
is. Az osztó a háromszor vizsgálja a bejövő jel szintjét (a bit-idő közepén). A Start-bit esetében ez a 0.
Amennyiben a három eredmény többsége 0 szintű, akkor valóban új adat-bájt kezdődik, tehát
folytatódik az adatsor beléptetése. Amennyiben a vizsgálat nem ad 0-t, akkor egy külső zaj indított, és
nem folytatódik a művelet. A nyolc adatbit beléptetése után 1-be vált az RI (Recevie Interrupt) bit,
amely jelzi az új információ beérkezését. Az új adat párhuzamosan kiolvasható.

2.1.6. Megszakítások
A mikrokontroller megszakításainak segítségével oldhatók meg az események valós idejű kezelése. A
program megszakítását kérheti :

· külső esemény az INT0, ill. az INT1 lábakra adott jellel,


· a T0, vagy a T1 számláló túlcsordulása,
· a soros adatátvitel.

A felsorolt források mindegyikéhez tartozik egy megszakítás kérő (interrupt requist) bit, amely 1-be
írása kezdeményezheti a a megszakítást. A megszakítások mindegyikéhez tartozik a programmemória
egy címe.

33.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

23. ábra

Mindegyik megszakítás elfogadása egyedileg engedélyezhető, vagy tiltható az IEN (Interrupt Enable)
SFR regiszter megfelelő bitjeivel (1 enged, 0 tilt). Ugyanezen regiszter legmagasabb helyértékű (MSB)
bitje általános engedélyező bit. Ha ez 0 akkor mindegyik megszakítás elfogadása tiltott, amikor 1
értékű, csak akkor hatásosak az egyedi engedélyezések.

A megszakításforrások között egy prioritási sorrend van, ami azt jelenti, hogy egyidejű
megszakításkéréskor a magasabb prioritásút szolgája ki a CPU. A prioritási sorrend korlátozottan
módosítható az IP ( Interrupt Priority ) regiszter egyes bitjeivel.

2.1.6.1. Megszakítások kiszolgálása

A megszakítás elfogadásakor a Stack -be a visszatérési cím a PC programszámlálóba a


megszakításforráshoz tartozó cím ( fix című megszakítás kiszolgálás ) íródik, és a CPU e címmel
kezdődő szubrutin hívást végez. Ezért ezekre a címekre olyan vezérlésátadó utasítást kell írni, amely a
a megszakítást kiszolgáló rutin kezdőcímére ugratja a program-folytatást.

A megszakítás elfogadása után a CPU letiltja a további megszakítás engedélyezést, ezért a kiszolgáló
rutint a RETI utasítással kell befejezni, aminek hatására töltődik vissza a Stack -ből a PC-be a
visszatérési cím, és az általános megszakítás-elfogadás engedélyeződik.

A külső megszakítások kezdeményező jelét legalább két gépi ciklus idejéig kell fent tartani, de a
kiszolgáló rutin vége előtt meg kell szüntetni.

34.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A megszakításkérő bitek közül a külső megszakításokhoz tartozók a rutinba ugrás után törlődnek. A
számláló túlcsordulások, - ha az időzítéses módban üzemelnek - ugyancsak törlődnek. Egyébként
szoftver úton kell törölni a megszakítás rutinban.

2.1.7. Teljesítmény felvétel vezérlése


A mikrokontroller teljesítmény felvétele programból állíthat. A két lehetséges üzemmód

· Power Dawn ,
· És az Idle.

24. ábra

2.2. Külső memóriák illesztése

A mikrokontrollerhez külső program-, és adatmemória is csatlakoztatható. A külső memóriák


címzése, és adatforgalma a P0, és P2 portokon keresztül történik.

· A P2 port adja a címbuszra a felső nyolc bitet ( A8 ... A15 ).


· A P0 porton jelenik meg - időosztással - először a cím alsó nyolc bitje ( A0 ... A7 ), majd
az adatbusz ( D0 ... D7 ) funkcióját látja el. A szétválasztáshoz külső tárolót ( EXL ) kell
alkalmazni, amelybe az ALE ( Address Latch Enable ) vezérlőjel lefutó éle írja be a
címbiteket.
2.2.1. Adat-, és programmemória kezelése
A 16 bites címmel 64 Kbájt memória érhető el. Ez a memória - kapacitás megduplázódik azzal, hogy a
programmemóriából történő olvasást - a címkiadást követően - a PSEN (Program Strobe Enable) jel,
míg az adatmemóriából az olvasást az RD (Read), az írást pedig a WR (Write) jel vezérli.

Azoknál a kontrollereknél, amelyekben van belső programmemória is (pl. a 8051 típus) a belső és
külső memória együtt lehet 64 Kbájt, és a külső memória kezdő címe a belső után következik.

35.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

De mód van arra is, hogy csak külső memóriát használjunk. Ehhez az EA jelű szelektáló bemenetre 0
szintet kell adni. Ilyenkor a külső programmemória kezdő címe 0000H.

2.2.2. Külső perifériák csatlakoztatása


A mikrokontroller családnál - a mikroprocesszoroktól eltérően - nincs külön perifériát író/olvasó
utasítás.

A perifériákat illesztő áramköröket a külső adatmemória részeként kell megvalósítani (memóriába


ágyazott periféria ).

A bemeneti - input - egységek jeleit - szintillesztő áramkörökön keresztül - egy busz-meghajtó


áramkör (pl. 74LS541) bemeneteihez kell csatlakoztatni. A meghajtó kimenetei az adatbuszhoz
csatlakoznak. Az áramkör kiválasztásához cím-dekódolót (pl. 74LS138) kell használni, amely az
illesztőhöz rendelt címnél előkészíti az átvitel engedélyezést, amely a RD jel hatására következik be.
Ekkor a külső periféria adatbitjei a kontroller akkumulátorába kerülnek.

Kimeneti - output - egységhez kimeneti tárolót kell alkalmazni (pl. 74LS574), amely kiválasztása - a
bemenethez hasonlóan – cím - dekódolással történik, és az akkumulátorból kiírandó adat a tárolóba a
WR jel hatására íródik be. A tároló kimenetei szint-, és teljesítményillesztő áramkörökön keresztül
hajthatják meg a vezérelt egységeket.

36.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

3. Mikrogépek programozása
A fejezetben a 8031/51 típusú mikrokontroller család valamelyik típusával megépített mikrogép
assembly nyelvű programozásával foglalkozunk.

3.1. A programozásról általában

A különböző automatizálási, adatfeldolgozási, vagy egyéb alkalmazói feladatok céljára ma már csak
programozható „intelligens” berendezéseket, mikroprocesszoros készülékeket használnak. Az ilyen
készülékek működését a programmemóriában tárolt kódsorozat – a program – határozza meg.

A mikrogépek két csoportba sorolhatók aszerint, hogy a felhasználó módosíthatja-e a működtető


programot, vagy nem.

A háztartási gépekben, vagy a korszerű vezérlőelektronikával ellátott gépjárművekben, vagy


különböző gyártó berendezésekben lévő mikrogépek működtető programját gyárilag írják be a csak
olvasható típusú memóriákba ( ROM, PROM, EPROM stb.), s így az a felhasználó által nem
módosítható. Ezeket fix programú készülékeknek nevezzük.

A különböző feladatokra is felhasználható készülékeknél – számítógépeknél (PC), programozható


logikai vezérlőknél (PLC) stb. - gyárilag csak a konfigurációnak megfelelő memória, és periféria-
kezeléseket (BIOS, monitor program stb.) készíti el a készülékgyártó, és tárolja a fix memóriában. A
készülék programmemóriájának egy jelentős területe írható-olvasható (RAM), amelybe felhasználói
programok tölthetők, és innen futtathatók. Az ilyen berendezéseket nevezik szabadon programozható
típusúaknak.

A letölthető felhasználói programokat akkor kell írnunk, ha ugyanazon készüléket más-más feladat
ellátására is fel kívánunk használni.

A következőekben tömören foglalkozunk a programfejlesztés céljával, eszközeivel, módszereivel, és


ellenőrzésének fajtáival.

3.1.1. A programozás célja


A mikrogép működését meghatározó programot az un. code-, vagy programmemóriába kell tárolni az
alkalmazott mikroprocesszor, vagy mikrokontroller - a továbbiakban processzor - típusától függő gépi
kódok sorozatával. A program végrehajtásakor a processzor innen olvassa ki az utasításokat, és
paramétereket.

A programozás célja tehát.

· egy olyan kódsorozat létrehozása, amelyet


· egy mikrogép (mikroprocesszor bázisú számítógép) programmemóriájába töltve,

37.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· meghatározza a mikrogép feladat szerinti működését.


3.1.2. A programfejlesztés lépései
A programfejlesztés az alábbiakban tömören ismertetett lépésekből áll.

A program felépítésének megtervezése. Ezt segíti a folyamatábra megrajzolása.

a. A programban használt változók, állandók, periféria-címek meghatározása.

b. szöveges formában - valamilyen szövegszerkesztő (editor) segítségével - kell megírni a


programozási-nyelv " helyesírási " (szintaktikai), és tartalmi (szemantikai) szabályai szerint. Az
így megirt szöveg a program forrásnyelvi formája. A számítógépek, mikrogépek
alkalmazásának széleskörű elterjedése a különböző programnyelv választékot is bővítette. A
programnyelveket gépközeli- (assembly), és a magas szintű nyelvek csoportjába sorolhatjuk.

· Gépközeli az a programozás, amelynél minden program lépés – programsor - az


alkalmazott processzor egy-egy utasítása. Mivel minden processzornak saját
utasításkészlete van, ezért a programírás is processzorfüggő. Az ilyen programírást
nevezzük assem bly vagy más közelítésben processzorutasítás szintű
programírásnak.

· A m agas szintű programozási nyelvek (Pascal, C, stb) rendszerint a nemzetközileg


elfogadott m atem atikai, logikai műveletek, és különböző általános , a
programszerkezetet meghatározó utasítások segítségével írják le a feladatot.
Ezért e nyelveken a programozás független attól a géptől, amelyen a programot futatni
akarjuk. A magas szintű nyelven történő programírást m űvelet - központú
programozásnak is nevezhetjük.

c. A forrásnyelvi programból a különböző fordító programok (assembler, compiller) állítják elő a


program tárgykódú (object) alakját, illetve a programlistát, amelyek már a processzor
utasításkódjait is tartalmazzák. (A leírtakból következik, hogy a magas szintű nyelveknél is a
fordítóprogram már processzortól függő.)

d. A tárgykódú programból, vagy programokból (több modul esetében) a szerkesztő (linker)


program állítja elő a futtatható programváltozatot.

Az így előállított programot kell beírni (letölteni) a programmemóriába. A programmemória lehet


fix (ROM, EPROM), illetve irható-olvasható (RAM) kialakítású. A beégetés, vagy letöltés történhet
teljes kódú (bináris), vagy tömörített (pl. HEX) alakú fájlból. Ennek megfelelően a programozás utolsó
lépése a kívánt kódkonverzió elvégzése.

38.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

3.2. Assembly nyelvű programozás

A különböző assembly nyelvek nagyon sok azonos elemet tartalmaznak. Rendszerint a felépítésük,
szintaktikai szabályaik közel azonosak. Lényeges eltérés a processzorok utasítás-készleteiben van.

Az assembly nyelvek formai követelményei viszonylag szigorúak. A legerősebb kötöttség a processzor


utasítások írása, amelyeket az adott processzor dokumentációjának deklarált formájában szabad
használni. Szabadságfok, hogy nincs különbség a kis-, és nagybetűs írásmód között.

Mindegyik assembly - ben használhatók:

· szimbólumok a változók, állandók, és címek megadásához,


· címkék (label) a programrészek azonosításához,
· helyfoglaló-értékadó utasítások (direktívák) a program-. és az adatmemória kezeléséhez,
· műveleti jelek (operátorok) a szimbólumok, címek közötti aritmetikai, logikai
műveletekhez,
· fordítási (command) utasítások, és
· magyarázatok (comment) a program szöveges leírásához.
3.2.1. A forrásnyelvi program
A forrásnyelvi program írásakor törekedni kell az áttekinthető felépítésre, a megfelelő
magyarázatokkal támogatni az érthetőséget. Ugyanakkor szigorúan be kell tartani a szintaktikai
szabályokat.

A program általános szerkezete a következő:

· fej a program jellemzőinek tömör összefoglalása,


· fordítási parancsok,
· a használt változók, konstansok, memória szegmensek deklarálása,
· a program – törzs (inicializálás, főprogram),
· a szubrutinok (alprogramok).
A mikrogép által elvégzendő feladatokat a főprogramban, és a szubrutinokban kell leírni a processzor
utasításainak segítségével.

A forrásnyelvi programban minden utasítást külön sorba kell írni. Egy sor általános felépítése a
következő:

címke: műveleti utasítás és operandusok ; magyarázat

39.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A sorokból - felsoroltak közül - egy, kettő, vagy mindhárom hiányozhat, vagyis egy sor lehet üres,
tartalmazhat csak címkét, vagy csak magyarázatot, vagy csak utasítást, illetve ezek lehetséges
variációit.

A forrásnyelvi program ajánlott felépítése az alábbi sorrendben:

§ a programazonosító fej,
§ fordítási parancsok,
§ deklarálások:
- konstansok, periféria címek megadása,
- szegmensek deklarációja,
- szegmenseken belüli deklaróciók
§ a főprogram megírása,
§ alprogramok (szubrutinok) megírása.
A következő példa szemlélteti az ajánlott programfelépítést. Az alkalmazott magyarázatok (comment-
ek) segítik a szerkezet felismerését. Mint látható a magyarázó szövegek kezdhetők a sor bármelyik
helyén, de mindig pontos-vesszővel kell kezdeni. A fordító program (assembler) soronként fogja
olvasni a forrásnyelvű szöveget, és amikor a sorban ; - t talál, akkor abbahagyja a sor elemzését, és a
következő sort fordítja.

;xxxxxxx A PROGRAMAZONOSÍTÓ FEJ xxxxxxx


;************************************************************
;* BMF KKVM Automatika Intézet *
;* Elektronika Szakcsoport *
;************************************************************
;* Főprogram: GYAKORLÓ-TESZT *
;* Változat: V1.2 *
;* Dátum: 1999.09.05 *
;* Készítette: XY *
;************************************************************
;* A modul leírása: *
;* A mikrokontrolleres gyakorló belső perifériái- *
;* nak tesztelése. *
;************************************************************

;xxxxxxx FORDÍTÁSI PARANCSOK xxxxxxx


$XREF
$DEBUG
NAME FO_MOD

;################### DEKLARÁCIÓK ###########################


;****** Gyakorló port címei ******
NGS XDATA 0C000H ; nyomógomb-sor címe
LEDS XDATA 0C001H ; LED-sor címe

40.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

;******* Szegmensek deklarálása ******


PROG SEGMENT CODE ; program
VALT SEGMENT DATA ; bájtos változók
VALTB SEGMENT DATA BITADDRESSABLE ; bitcímezhető változók
STACK SEGMENT DATA ; stack memória
;****** ADAT szegmens bájtos változóknak *******
RSEG VALT
DS 10H ;helyfoglalás 16 bájt részére

;****** ADAT szegmens bitcímezhető változóknak *******


RSEG VALTB
; xxxxx bájtos változók xxxxx
DS 2 ; nevezetlen helyfoglalás
BEM: DS 1 ; bemeneti memória
BEPEL: DS 1 ; pozitív él memória
JELZ: DS 1 ; jelző bájt

; xxxxx bit változók xxxxx


NG0P BIT BEPEL.0 ; NG0 nyomógomb poz.él bitje
NG6P BIT NG0P+6 ; NG6 nyomógomb poz.él bitje
NG1N BIT BENEL.1 ; NG1 nyomógomb neg.él bitje
JLZB1 BIT JELZ.0 ; 1.jelzőbit

; ****** STACK kijelölés ******


RSEG STACK ;STACK kezdet
DS 10H ;16 bájt lefoglalása STACK részére
;################### PROGRAMOK ###################################
;***** Program szegmens *****
RSEG PROG
;xxxxxxxx Program-törzs xxxxxxxxx
START: LJMP INIT ; ugrás az inicializálásra
;****** Megszakítás ugrótábla ******
DS 8 ; helyfoglalás a megszakításoknak

;******* Inicializálás *******


INIT: MOV SP,#STACK-1
. ; változóknak kezdőértének megadása
. ; periféria üzemmódok beállítása
. ; megszakítások engedélyezése

;******** Fő program *********


FOPR: CALL BEOLV ; beolvasás, él meghatározás
;xxx a feladatot megoldó program xxx
. ; a program további része
.

41.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

.
;xxx kimenetek vezérlése xxx
FOPRV:
CALL KIIR ;kimenetek vezérlése
JMP FOPR ; visszatérés a főprogram elejére

;******** Szubrutinok ********


;xxxxxxx beolvasó és él képző rutin xxxxxxx
BEOLV:
MOV DPTR,#NGS
MOVX A,@DPTR ;beolvasás a nyomógomb-sorról
. ; a rutin további része
.
.
RET ;visszatérés a főprogramba

;xxxxxxx kiviteli rutin xxxxxxx


KIIR:
MOV DPTR,#LEDS ;kimeneti memória kivitele
MOV A,KIM ;a kimeneti perifériára –LED sorra
. ; a rutin további része
.
.

RET

END ; a fordítóprogramnak jelzi a forrás


;végét

3.2.1.1. A címke ( label )

A címkét olyan programrészek első utasítása elé kell írni, amelyekre a program egyéb helyein
hivatkozunk, vagyis ahová a vezérlést át kell adni (ugrás, vagy rutin hívás). A címke tulajdonképpen a
hivatkozási hely címét tartalmazó szimbólum. A programban azonos címkék nem használhatók!

A címke egy betűvel ( 'a' .... 'z', 'A'..... 'Z', '.' ) kezdődő karaktersor (szimbólum, jelző), amelynek
további karakterei számjegyek is lehetnek, és a ' : ' karakterrel kell befejezni. Magyar ékezetes betűk
használata tilos! Elvileg a karakterek száma nincs korlátozva, de a fordító csak az első nyolc karaktert
tárolja, és nem tesz különbséget a kis és nagybetűk között. ( Ha két címke csak a kilencedik
karaktertől kezdve különbözik, akkor a fordító hibát jelez, mivel azonosnak tekinti azokat. )

A címkéket rendszerint a sor elejére írjuk, kiemelve ezzel a sor jelző szerepét.

Helyes címkék: Helytelen címkék:

Kezdet: 2.sor:
_1sor: Ugrás.1:
foprog_2: Első sor:
42.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

3.2.1.2. Műveleti utasítás és operandusok

A programsorban a műveleti utasítás írja elő a CPU által végrehajtandó műveletet, és a hozzá
csatlakozó operandus - ok adják meg a műveleti tényezőket, vagy azok címét. Az operandus lehet:

· speciális assembler szimbólum (pl. regiszter),


· program szimbólum,
· indirekt cím,
· konstans,
· belső RAM cím,
· bit-cím,
· program cím.
A használható speciális assembler szimbólumok:

A (ACC) Akkumulátor
B B regiszter
R0...R7 az aktuális regiszter-bank munkaregiszterei
DPTR a külső memóriák címzéséhez használt regiszterpár (DPH-DPL)
PC programszámláló
C túlcsordulás bit
AB regiszterpár szorzásnál, és osztásnál
AR0..AR7 az aktuális regiszterbank munkaregisztereinek abszolút címe
A lehetséges műveleti utasításokat, a hozzá tartozó operandusokat, és helyes írás-módjukat az
alkalmazott mikroprocesszor / mikrokontroller utasításkészlet - e tartalmazza.

A műveleti utasítást egy szóval, az un mnemonic - al írják le, amely a művelet angol megnevezése,
vagy annak rövidítése.

Az operandusok lehetnek szám - ok, vagy szimbólum - ok, illetve meghatározott írásjel, amely
meghatározza az adott operátor címzési módját.

pl. MOV 20 , 45

sorban a műveleti utasítás a MOV mnemonic a mozgatást jelenti, amely után meg kell adni először a
cél cím - ét, (itt a 20-as című memóriahely), majd a forrás címét, vagy értékét ( példánkban a 45
ugyancsak cím ). Az utasítás tehát arra utasítja a CPU - t, hogy a 20 - as címen található adatot másolja
át a 45 címen lévő helyre.

A következő utasításban

43.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

MOV 20 , #45

a második operandus előtt álló # azt jelenti, hogy az utána következő szám egy állandó érték, amely a
programmemóriában az utasítás-kód után van.Az utasítás hatására a 20 - as című helyre 45 írodik.

Az operandusok szimbólumokkal is megadhatók.

Az operandusok, vagy új szimbólumok előállíthatók a már deklarált szimbólumok operátorokkal


történő összekapcsolásával.

3.2.1.3. Operátorok:

· aritmetikai:
+,- előjel ( +5, -0AH )
+,- összeadás, kivonás ( cím + offset )
* szorzás ( 1200H*7 )
/ osztás ( 17/4 )
MOD maradék ( 17 MOD 4 )
() csoportosítás ( (cím-offset)*3 )

· logikai:
NOT egyes kompl. ( NOT 5 )
HIGH szó felső bájtja ( HIGH 1234 )
LOW szó alsó bájtja ( LOW 1234 )
SHR,SHL jobbra/balra lépt. ( 2 SHR 8 )
AND ÉS művelet ( SIMB AND 0AH )
OR VAGY művelet ( SIMB1 OR SIMB2 )
XOR KIZÁRÓ-VAGY m. ( 12H XOR 5 )
· hasonlító:
>= / GTE nagyobb egyenlő ( SIMB >= 13H )
<= / LTE kisebb egyenlő ( SIMB LTE 0A1H )
<> / NE nem egyenlő ( SIMB NE 045H )
= / EQ egyenlő ( SIMB = 0A2H )
< / LT kisebb mint ( SIMB < 0B2H )
> / GT nagyobb mint ( SIMB GT 051H )

3.2.1.4. Szimbólumok használata

44.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A programozást nagyban segíti, ha számokkal megadott címek, változók helyett a jelentésre utaló
szavakat, rövidítéseket, vagyis szimbólumok - at használunk.

Szimbólumok a már megismert címke, illetve utasítás mnemonic - ok is.

· a címke egy programcímet helyettesít,


· az utasítás mnemonic a CPU utasításkódját.
Szimbólumokkal lehet helyettesíteni

· változók tárolási helyének címét,


· konstansokat.
Szimbólumban csak betű, számjegy és a '_' karakter szerepelhet.

A processzor utasítás - mnemonicjai, illetve a belső regiszterek elnevezései, és a direktívák nem


használhatók általános szimbólumként.

A szimbólum deklarálásához az EQU direktívát kell használni. pl.

EQU BE_GOMB 12

és felhasználása programsorban a

MOV C , BE_GOMB

azt jelenti, hogy a CPU túlcsordulás bit -jébe ( C ) másolja át a 20 cím bit értékét.

3.2.1.5. A számok, szövegek ábrázolása

A számítástechnikában nem csupán a decimális, hanem a bináris, az oktális, és a hexadecimális


számábrázolást is használják, illetve az ASCII szabvány szerinti karakter, és string megadás is
szükséges.

Bináris:
a bináris számjegyek sorozata után irt B betű
pl. 011010 b vagy 011010 B
Decimális:
a decimális számjegyek sorozata vagy utána irt D betű
pl. 345 vagy 345 D
Oktális:
az oktális számjegyek sorozata után irt O betű
pl. 137 o vagy 137 O
Hexadecimális:

45.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

a hexadecimális számjegyek sorozata után irt H betű, ha szám a betű karakterek


valamelyikével kezdődik akkor 0 – kell elé írni
pl. 15A H vagy 0E34 H .

Karakterek
' A ' formában megadott karaktert az ASCII kóddal helyettesít.

Szöveg ( string )
" Ez egy szöveg " az egyes karaktereket ASCII kóddal helyettesítve
helyezi le.

3.2.1.6. Magyarázatok (comment)

A programrészletekhez magyarázatok (comment) is írhatok a forrásnyelvi programunkban. Ezzel


segíteni lehet a programlépések megértését, az áttekinthetőséget. A magyarázó szöveget mindig a ;
karakterrel kell kezdeni.

; Példa a magyarázat elhelyezésére

KEZD: ; itt kezdődik a program


MOV A,#5EH ; az akkumulátor feltöltése
ANL A,KIM ; a kimeneti memória maszkolása
JZ TOV
A magyarázat szerepelhet egy önálló sorban is, de ha van címke, vagy utasítás, illetve mindkettő, akkor
csak ezeket követően írható.

3.3. Fordítást vezérlő utasítások

A forrásnyelvi fájlból a fordítóprogram (az assembler) készít tárgykódú (.obj) fájlt.

A fordító számára is lehet utasításokat adni, az un. direktívák segítségével. A legfontosabb direktívák a
követezőek:

3.3.1. Assembler DIREKTIVÁK


A direktívák tulajdonképpen a fordítást vezérlő parancsok. Ezek segítségével

· szimbólumok definiálhatók,
· lefoglalhatók és inicializálhatók memória területek,
· összekapcsolhatók modulok,
· beállíthatók program-, és szegmenscímek.

46.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

3.3.2. Fordítási parancsok


A forrásnyelvi fájl fordítási módozatára adhatók a fordítási parancsok. A parancsok között az
elsődleges típusúak csak egyszer használhatók, és a forrás-program legelső - értékelhető - sorában kell
megadni (megjegyzés, magyarázó szöveg megelőzheti). A másodlagos típusú parancsok a programban
többször, és bármely helyen megadhatók. Mindkét típusú parancsot sor elejére a $- jellel kezdve kell
írni.
A fordítási parancsok egy külön csoportját alkotják a feltételes parancsok, melyek segítségével -
megadott feltétektől függően - programrészek kitilthatók a fordításból.

A51 MACRO ASSEMBLER PELDA1 DATE 02/09/96 PAGE 1

MS-DOS MACRO ASSEMBLER A51 V4.4


OBJECT MODULE PLACED IN C:\XE2A51\GYAK\PELDA1.OBJ
ASSEMBLER INVOKED BY: A51 C:\XE2A51\GYAK\PELDA1.A51

LOC OBJ LINE SOURCE

1 ;xxxxxxx fordítási parancsok xxxxxxx


2
3 $XREF
4 $DEBUG
5
6 ;*********************************************************
7 ;* K K M F Automatika Intézet *
8 ;* Elektronika Szakcsoport *
9 ;*********************************************************
10 ;* F‹program: Helyfoglalás adatoknak *
11 ;* Változat: V1.0 *
12 ;* Dátum: 1996.08.20 *
13 ;* Készítette: Zalotay Péter *
14 ;********************************************************
15 ;* A modul leírása: *
16 ;* Példák a különböző helyfoglalási megoldásokra *
17 ;********************************************************
18
19 NAME Pelda_1
20
21 ;xxxxxxx Deklarációk xxxxxxx
22
23 ;**** Relatív címmegadások (relokálható szegmensek)*****
24
25 VALT1 SEGMENT DATA ;Adatszegmens a direkt címezhető
;belső mem.-ban
26 VALT2 SEGMENT DATA BITADDRESSABLE ;Adatszegm. a bit címezhető
;belső m.-ban
27 VALTB SEGMENT BIT ;Bit szegmens
28 STACK SEGMENT IDATA ;Stack szegmens
29 PROG SEGMENT CODE ;Program szegmens
30

47.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

31 ;****** Program szegmens ******


32
33 RSEG PROG
34
0000 758100 F 35 MOV SP,#STACK-1 ;A program első utasítása
36 .
37 .
;A program utolsó utasítása
39
40 ;****** Adatszegmens a direkt címezhető belső memóriában *****
41
42 RSEG VALT1
43
44 V1: DS 1 ;Helyfoglalások a V1,V2,V3 változóknak
0001 45 V2: DS 2
0003 46 V3: DS 1
0004 47 DS 20 ;Nevezetlen memóriaterület lefoglalása
48
49 ;***** Adatszegmens a bit címezhető belső memóriában *****
50
51 RSEG VALT2
52
0000 53 BEM: DS 1 ;Helyfoglalás a BEM és KIM változóknak
0001 54 KIM: DS 1
55
56 ;***** Bit szegmens *****
57
58 RSEG VALTB
59
0000 60 B1: DBIT 1 ;Helyfoglalás a B1,B2,B3 kétérték ű változóknak
0001 61 B2: DBIT 1
0002 62 B3: DBIT 1
63
64 ;***** Stack szegmens ****
65
66 RSEG STACK
67
0000 68 DS 10H ;Stack memória lefoglalása
69
70
71 ;***** Abszolút címmegadások ****
72
73 CSEG AT 1000H
74
1000 7800 F 75 FOLYT: MOV R0,#KIM
76
77 DSEG AT 30H
78
0030 79 BEM2: DS 1
0031 80 KIM2: DS 1
0032 81 V4 DATA 32H
00AF 82 K1 EQU 0AFH
83
84 BSEG AT 30H
85
0030 86 B4: DBIT 1
0031 87 B5: DBIT 1
0000 88 B6 BIT BEM.0
89
90

48.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

91 END

XREF SYMBOL TABLE LISTING


---- ------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES / REFERENCES

B1 . . . . B ADDR 0000H.0 R SEG=VALTB 60#


B2 . . . . B ADDR 0000H.1 R SEG=VALTB 61#
B3 . . . . B ADDR 0000H.2 R SEG=VALTB 62#
B4 . . . . B ADDR 0026H.0 A 86#
B5 . . . . B ADDR 0026H.1 A 87#
B6 . . . . B ADDR 0000H.0 R SEG=VALT2 88#
BEM. . . D ADDR 0000H R SEG=VALT2 53# 88
BEM2 . D ADDR 0030H A 79#
FOLYT C ADDR 1000H A 75#
K1 . . . . N NUMB 00AFH A 82#
KIM. . . D ADDR 0001H R SEG=VALT2 54# 75
KIM2 . D ADDR 0031H A 80#
PELDA_1. . ---- ---- 19
PROG . C SEG 0003H REL=UNIT 29# 33
SP . . . . D ADDR 0081H A 35
STACK.I SEG 0010H REL=UNIT 28# 35 66
V1 . . . . D ADDR 0000H R SEG=VALT1 44#
V2 . . . . D ADDR 0001H R SEG=VALT1 45#
V3 . . . . D ADDR 0003H R SEG=VALT1 46#
V4 . . . . D ADDR 0032H A 81#
VALT1. D SEG 0018H REL=UNIT 25# 42
VALT2. D SEG 0002H REL=BITADDRESSABLE 26# 51
VALTB.B SEG 0003H REL=UNIT 27# 58

REGISTER BANK(S) USED: 0


ASSEMBLY COMPLETE, NO ERRORS FOUND

49.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

4. A 8031/51 típusú mikrokontrollerek utasításai


A 8031/51 mikrokontroller család mindegyik egyedének az utasításkészlete egyforma. Az utasítások
nagyon hasonlítanak a 8080 típusú mikroprocesszoréhoz. Lényeges eltérés azonban, hogy a 8051-t
elsősorban különböző vezérlési feladatokhoz fejlesztették ki, és ezért bit műveletek programozása is
lehetséges.

A vezérlési feladatok többségénél kétállapotú bemeneti jelek állapotát kell lekérdezni, és ezek alapján
logikai műveletek elvégzése után kétállapotú vezérlőjeleket kell kiadni, reléket, lámpákat stb.
vezérvezérléséhez. Az ilyen jellegű működés bitszervezést igényel. A bitműveleteket végzéséhez
fejlesztették ki – a belső memória egy szegmensének - bitenkénti címzési lehetőségét, és a bitekre is
értelme logikai műveletek (boole - utasítások).

4.1. Az utasítások, és azok hossza

A 8051 mikrokontrollernek összesen 111 utasítása van. Az utasítások között egy-, két- és három bájt
hosszúakat találunk. Az utasítás bájt-számban a műveleti kód és - rendszerint közvetetten - az
operandus -ok is benne vannak. Az utasítások között:

· 49 egy-bájt
· 45 két-bájt és
· 17 három-bájt

hosszúságú van.

4.2. Futási idő

Egy program futási idejének pontos meghatározásához ismerni kell azt, hogy az egyes utasítások
feldolgozása hány gépi ciklus alatt történik. A 8051mikrokontroller utasításainak a végrehajtása - a
MUL és DIV aritmetikai utasítások kivételével - egy-, vagy két gépi ciklus időtartamú. A két utasítás
végrehajtásához négy gépi ciklus szükséges. A 2. fejezetben tárgyaltuk, hogy egy műveleti ciklus 12
oszcillátor-periódus hosszú. Az órajel frekvenciájának ismeretében a program végrehajtásához
szükséges idő - a futási idő - a követezőek szerint számolható ki:

A program összes utasításaihoz tartozó ciklusok összegét szorozni kell a quartz periódusidejének 12-
szeresével.

A 8051 utasításai - a végrehajtási ciklusszám alapján - az alábbiak szerint oszlanak meg:

· ·63 egy-ciklusú,
· 46 két-ciklusú és

50.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· 2 négy-ciklusú.

4.3. Címzési módok

A memóriákban tárolt értékek, illetve tárolásuk helye (címeik) különböző formában adhatók meg.
Ezeket nevezzük címzésnek.

4.3.1. A címzésről általában


A 8051-nél az alábbi öt különböző címzési mód alkalmazható:

· regiszter-,
· direkt-,
· indirekt-,
· közvetlen-,
· indirekt regiszter-

címzés.

A mikrokontroller különböző memóriaterületekkel kommunikál. A fizikailag, vagy logikailag


elkülönített területek más-más címzési móddal érhetőek el.

A 8051 ötféle címzési módja alapvetően két nagy csoportot alkot, mégpedig a direkt és az indirekt
címzésűeket.

A direkt címzésnél az utasítás része a megfelelő tárlócella címe (szám). Az indirekt címzésnél a
tárlócella címét egy regiszterben (pointer) van. Az utasítás ez utóbbiak címét tartalmazza.

Az indirekt címzés kissé nehézkesebb, mivel a programozónak először arról kell gondoskodnia, hogy a
szükséges cím a megfelelő tároló-egységbe kerüljön. Ugyanakkor rugalmasabb programozást tesz
lehetővé. Az indirekt címzés egy másik lehetősége az un adatmutató, vagyis a Data-Pointer (DPTR)
használata. Az adatmutatóba egy 16 bites szám irható, amely 64 Kbájt kapacitású adatmemória
címzését teszi lehetővé. Az adott értékhez relatív címzés is megoldható.

A relatív címzés a strukturált programozást teszi könnyebbé. Sok esetben előnyös ez a módszer.

4.3.2. Regiszter-címzés
Az aktuális bank R0 …R7 regisztereire, valamint az un processzor regiszterekre - ACC, B, PSW,
DPTR - közvetlenül lehet hivatkozni. Az ilyen utasításoknál az utasításkód három legalacsonyabb
helyiértékű bitje határozza meg az aktuális regisztert.

Például: a MOV A, 32H utasítás a 32H című belső memória tartalmát az Akkumulátorba (A)
viszi.

51.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

4.3.3. Direkt címzés


A direkt címzésnél az utasítás része az elérendő memória címe. A cím az utasítás műveleti kódja utáni
hexadecimális szám.

Például: MOV 25, 32H utasítás a 32H című belső memória tartalmát a 25 (decimális) című
rekeszbe viszi.

A speciális funkcióregiszterek (SFR -k) csak a direkt címzéssel érhetők el. A belső RAM alsó 128
bájtja direkt módon is címezhető.

4.3.4. Indirekt címzés


Az indirekt címzésnél egy regiszterben (pointer) van az a cím, amellyel a memória valamelyikébe írni,
vagy onnan olvasni akarunk.

E címzésnél tehát nem az utasítás, hanem - az aktuális regiszterbank - R0, vagy R1 regisztere, illetve a
DPTR tartalmazza az elérendő memóriacella címét. Az R0, R1 címzésnél a 8 bites tartalommal 256
bájt széles RAM terület címezhető. E terület lehet a teljes belső-, vagy a külső RAM egy lapja (page).
A 16 bites DPTR segítségével csak külső memória (adat, vagy program) címezhető.

Az indirekt címzésre példa a MOVX A,@Ri utasítás ( i értéke 0, vagy 1 ), amely az akkumulátorba
viszi a külső RAM egy cellájának tartalmát. A cella címe az Ri regiszterben van. A magasabb
helyiértékű 8 címbit ez alatt nem változik meg. Az utasítás segítségével relatív címzést is meg tudunk
valósítani. Először a P2 SFR -be kell beírni a cím magasabb bájtját, s az Ri -be, pedig az alacsonyabb
bájtot.

Az indirekt címzések egy bájtosak. Segítségükkel a külső RAM 256 bájtos területe érhető el. A teljes
memóriaterület - 64 Kbájt - címzése a DPTR adatmutató regiszterrel történhet, pl. MOVX
A,@DPTR .

A stack - terület a PUSH és POP utasításoknál is indirekt a címzés. A címe itt a stack - mutatóban
(SP) van. Ezen az alapon a stack - terület is a RAM tetszőleges területére helyezhető. A
programozónak kell biztosítani a Stack kezdő címének megfelelő beállítását.

4.3.5. Közvetlen címzés


A közvetlen címzésnél az utasításhoz tartozó adat, vagy cím az utasítás része.

Ez azt jelenti, hogy a kívánt értéket - az utasítás részeként - a programmemóriában (ROM, vagy
EPROM) van.

Például: a MOV A, #23H utasítás 23 hexadecimális értéket ír az akkumulátorba.

4.3.6. Indirekt regiszter-címzés


52.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Az indirekt regiszter-címzésnél a tényleges fizikai címet két regiszter tartalmának az összege adja. A
cím tehát egy bázis-, és egy eltolási (offset) címrészből áll. A bázis cím vagy az adatmutatóban
(DPTR), vagy a programszámlálóban (PC) van. E címhez adja hozzá az akkumulátor (A) tartalmát.

Például: a MOVC A, @A+ DPTR utasítás hatására az Akkumulátorba másolja a program (code) –
memória azon rekeszének tartalmát, amelynek a címe az Akkumulátor, és a DPTR regiszterekbe írt
számok összege.

Az indirekt regiszter-címzési formát rendszerint a programtárolóban lévő táblázat kezeléséhez


használjuk.

4.4. A különböző utasítás fajták

A 8051-nek 111 különböző utasítása van. Ezek a következő négy csoportba sorolhatók:

· adatátviteli utasítások,
· aritmetikai utasítások,
· logikai, ill. bit műveleti utasítások,
· vezérlés átadó utasítások.

A felhasználói könyvek, katalógusok, és itt is az alábbi rövidítéseket használjuk:

Rn az R0 - R7 munkaregiszterek valamelyikét jelöli. Az utasítás e regiszter


tartalmára vonatkozik.

direct a belső RAM -ban egy cím.

@Ri az R0, vagy R1 regiszterekkel történő indirect címzés.

#data az utasításban megadott 8 bites adat.

#data 16 az utasításban megadott 16 bites adat (a 2. és a 3. bájt).

rel egy relatív cím. A következő utasítás címéhez viszonyítottan -128 és +127
területen belülre mutathat.

bit jelentheti a 128 db bit-címezhető területen lévő bit valamelyikét, vagy az SFR
területen egy I/O -,, illetve vezérlő-, vagy státuszbitet.

4.4.1. Az adatátviteli utasítások

53.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Az adatátviteli - az un. MOV - utasítások regiszter vagy memória cella tartalmát viszik át egy másik
regiszterbe, vagy memória cellába.

Az utasítás típus három csoportra bontható.

4.4.1.1. Az általános adatátviteli utasítások

A csoportot az alábbi utasítások alkotják:

MOV cél, forrás

egy bitet, vagy bájtot visz át a belső memóriában lévő forrás-helyről a cél-helyre.

PUSH reg

inkrementálja a Stack-Pointer tartalmát majd a vonatkozó regiszter tartalmát az SP által címzett


memóriába, írja.

POP reg

az SP által címzett memória tartalmát átírja a vonatkozó regiszterbe, majd dekrementálja az SP


tartalmát.

Az utasítások a címzett helyről az adatot átmásolják a cél helyre, de közben a forrás tartalmát nem
változtatják meg.

4.4.1.2. Akkumulátor-utasítások

Ezeknél az utasításoknál az ACC -regiszter a célja, vagy a forrása az adatátvitelnek. Az akkumulátor


önmaga lehet a cél is és a forrás is.

XCH A , mem

(exchange) az akkumulátor és a címzett memória tartalmát cseréli fel.

XCHD A , mem

hasonló az XCH utasításhoz, de csak az akkumulátor és a címzett memória tartalmának az alsó négy
bitjét cseréli meg.

MOVX cél,forrás

a külső adatmemória és az akkumulátor között végez adatátvitelt, vagyis az egyik memóriahely mindig
az Akkumulátor.

MOVC A,forrás

54.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

programtárolóból visz egy bájtot az akkumulátorba. A címzésnél a DPTR -ben, vagy PC-ben van a
báziscím.

4.4.1.3. Data-Pointer utasítás

MOV DPTR, # áll

a megadott 16 bites állandóval tölti fel a Data-Pointer -t ( DPTR )..

4.4.2. Az aritmetikai utasítások.


A 8051 mikrokontroller matematikai műveletei korlátozottak. Csupán 8 bites előjel nélküli számokkal
lehet műveleteket végezni. Az Overflow-flag (OV) segíti a felhasználót az előjeles számok
összeadásánál és kivonásánál. A 8051 aritmetikai utasításai hasonlítanak a 8080 és a 8085
mikroprocesszorok azonos utasításaihoz.

4.4.2.1. Összeadó utasítások

ADD A , op2

a 2. Operandus és az akkumulátor tartalmát (1. operandus) adja össze. Az eredmény az akkumulátorba


kerül.

ADDC A , op2

mint az ADD utasítás, de még a CY flag értékét is az eredményhez adja.

DA A

a BCD számok összeadása után alakítja az eredményt BCD alakúra.

INC bájt

a címzett memória tartalmát inkrementálja (1-el növeli).

4.4.2.2. Kivonó utasítások

DEC bájt

A címzett memória tartalmát dekrementálja (1-el csökkenti). Az INC utasítás ellentettje.

SUBB A , op2

az akkumulátor tartalmából (1. operandus) levonja a címzett 2.operanduszt. Ha a CY=1, akkor az


eredményből még 1-t levon. A művelet eredménye az akkumulátorba kerül.

4.4.2.3. Szorzó és osztó utasítások

A B regisztert (az SFR -ben) kizárólag csak ezeknél az utasításoknál használja közvetlenül a kontroller.

55.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

MUL AB

két előjel nélküli 8 bites számot szoroz össze. A szorzandókat az ACC és a B regiszterekbe kell vinni.
A szorzat kétbájtos lesz. Az eredmény alacsonyabb helyiértékű bájtja az ACC -be, míg a magasabb
helyiértékű pedig a B-be kerül. A 256-nál, nagyobb eredménynél az OV 1-be íródik.

DIV AB

az ACC tartalmát osztja a B tartalmával. Előjelet nem vesz figyelembe! Az osztás egészrészét az ACC
fogja tartalmazni. A maradék kerül a B regiszterbe. Ha a hányados 0, akkor az OV flag 1-be íródik.

4.4.3. Logikai és boole utasítások.


A logikai utasítások formailag nagyon hasonlóak a mikroprocesszorok azonos jellegű utasításaihoz. E
csoport viszont - az aritmetikai műveletekkel ellentétben - sokkal bővebb alkalmazási lehetőséget
nyújt. A 8051-es mikrokontrollert elsődlegesen vezérlésekhez fejlesztették és ezért mind bitekkel,
mind pedig bájtokkal tud logikai műveleteket végrehajtani.

ANL op1 , op2

logikai ÉS művelet az operandus -ok azonos helyiértékű bitjei között. Az eredmény az első operandus
(op1) helyére íródik, miig a második nem változik meg.

ORL op1 , op2

az ANL -hez hasonlóan végez logikai VAGY műveletet.

XRL op1 , op2

az EXKLUSIV-OR ( kizáró-vagy) művelet két operandus azonos helyiértékű bitjei között. Az


eredmény - az ANL és ORL műveletekhez hasonlóan - az első operandus helyére kerül.

Az ANL, ORL műveletek egyes bitek között is alkalmazhatóak. A hagyományos diszkrét logikai
hálózatok kiválthatók a 8051 bázisú rendszerrel (például a különböző tárolt programú vezérlések).

SETB bit

A direkt címzett bitet 1-be írja.

CLR bit

Törli a direkt címzett bitet.

4.4.4. Forgatás ( rotáció)


RL A

az akkumulátor tartalmát egy hellyel balra forgatja.

56.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

RLC A

az akkumulátor tartalmát a CY közbeiktatásával forgatja egy hellyel balra.

RR A

az akkumulátor tartalmát egy hellyel jobbra forgatja.

RRC A

az akkumulátor tartalmát a CY közbeiktatásával forgatja egy hellyel jobbra.

Az RLC és RRC utasításoknál a CY az akkumulátor kilencedik bitjének tekinthető.

SWAP A

felcseréli az akkumulátor felső- és alsó négy bitjét.

4.4.5. Vezérlés átadó utasítások.


A vezérlés átadó utasítások alkalmazhatók a programokon belüli különböző ugrások végrehajtására.
Ilyen lehet egy szubrutin hívása, vagy egy feltételtől függő program-elágazás. A utasítások az alábbi
három csoportba sorolhatók:

· feltétel nélküli programelágazás,


· feltételes programelágazás ,
· megszakítás kiszolgálás.

Ezen utasítások közös jellemzője, hogy a programszámláló tartalmát változtatják meg. A PC határozza
meg, hogy a kontroller mely címről hiv. beutasítást. Ennek megváltoztatásával vezérelhető egy
programelágazás.

A program-elágazási utasítások megtörik a program tiszta sorrendi (lineáris) lefutását.

Először meg kell ismerni az ugrás (JUMP), a szubrutinhívás (CALL), és a megszakítást (Interrupt)
kiszolgáló rutinhívás közötti alapvető különbségeket.

A különböző JUMP cím utasítások (esetleg egy meghatározott feltételtől függően) a program
meghatározott helyére történő ugrást vezérlik. A program végrehajtása e helyről fog folytatódni.

A CALL cím utasítás egy szubrutin kezdetére adja át a következő utasítás hívását. Ugyanakkor a
Stack-be automatikusan eltárolja a főprogram következő utasításának címét. A rutin feldolgozása egy
RET utasításig tart. A RET hatására a főprogram - a Stack-ben tárolt címről - fut tovább. Ugyanaz a
szubrutin a főprogram tetszőleges helyéről és többször is hívható. Elsődlegesen a különböző
összetettebb, de ismétlődő műveletekhez használjuk a szubrutinokat.

57.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Egy szubrutin CALL utasítással történő hívása |kizárólag szoftverből történhet.

A megszakítási programelágazás, hasonlóan a CALL-hoz egy szubrutin hívását jelenti. Lényeges


eltérés, az hogy ezt az ugrást egy hardver-esemény váltja ki. A szubrutin hívása a megszakítás után
azonnal megtörténik. A CALL-al való szubrutinhívásra addig kell várni, amíg a program az adott
CALL-hoz nem ér.

4.4.5.1. Feltétel nélküli vezérlésátadás

A feltétel nélküli ugrás, mint ahogyan a nevében is benne van, nem függvénye valamilyen
eredménynek. Az ugrás minden esetben bekövetkezik, amikor a program egy ilyen utasításhoz ér.
Szigorúan véve a RETURN utasítás is e csoportba tartozik. A CALL végrehajtása előtt a főprogram
következő utasításának címe a stack-be íródik, s közben a Stack-pointer értéke kétszer
inkrementálódik (16 bites cím kerül be a stack-be). A RET utasítás hatására ez a cím visszaíródik a
PC-be, miközben az SP tartalma kettővel csökken.

ACALL cim11

két bájtos szubrutinhívó utasítás. 2 K-bájtos szegmensen belüli programugrást hajt végre. Az ACALL-
hoz 11 bites cím tartozik. A PC-ben lévő legnagyobb helyiértékű öt bit érvényes marad (együtt adják a
16 bites címet). Az ACALL hívásakor a PC taralma inkrementálódik. Ha az ACALL egy 256-bájtos
szegmens utolsó két bájtja, akkor a PC inkrementálása miatt az a következő szegmensbe kerül.

LCALL cím16

három bájtos szubrutinhívó utasítás. Alkalmas a teljes 64-Kbájton belüli tetszőleges című rutin
hívására a 16 bites címzés miatt.

AJMP cim11

két bájtos - 2 K-bájtos szegmensen belüli - ugrást vezérlő utasítás.

LJMP cím16

három bájtos ugrást vezérlő utasítás. Alkalmas a teljes 64-Kbájton belüli tetszőleges címre történő
ugrásra a 16 bites címzés miatt.

SJMP rel

relatív ugrást vezérlő utasítás. A SHORT JUMP használatával csak 256 bájtos területen belüli ugrás
oldható meg.

JMP @A+DPTR

58.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

az ugrás címét a DPTR és az akkumulátor tartalmának összege adja. A 8 bites akkumulátor-tartalom


egy lapot fog át. A DPTR a teljes 64 Kbájt -os programmemória tetszőleges helyére mutathat.

Megjegyzés: a legtöbb assembler elfogadja a JMP, illetve a CALL utasítás mnemonic -ot is. Az
ugrás távolságától függően helyettesít a megfelelő utasítással.

RET

az ACALL vagy az LCALL utasításokkal meghívott szubrutinból való visszatérést vezérli. Hatására a
PC-be íródik a szubrutinhívást követő utasítás címe.

RETI

megszakítás ( interrupt ) után hívott szubrutinból való visszatérés utasítása. A visszatérésen kívül
felszabadítja a megszakítástiltást.

4.4.5.2. Feltételes vezérlésátadás

Az előzőekkel ellentétben az ugrás csak akkor következik, ha meghatározott feltétel teljesül.

A feltételes ugrás mindig relatív. Az éppen aktuális helytől számítottan 8 bites címtávolságon belül
lehet a cél-hely, vagyis az utasítás helyétől számítva -128, vagy +127 bájt területen belül lehet a cél
cím.

A 8051-nek a következő feltételes ugró-utasításai vannak:

A program a megadott címre ugrik, ha teljesül a megadott feltétel

JZ rel

ha az akkumulátor tartalma 0.

JNZ rel

ha az akkumulátor tartalma nem 0.

JC rel

ha a Carry - Flag értéke 1.

JNC rel

ha a Carry - Flag 0.

JB bit, rel

ha a direkt címzett bit 1.

JNB bit, rel

59.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

ha a direkt címzett bit 0.

JBC bit, rel

ha a direkt címzett bit 1, majd törli a bitet.

CJNE adat1, adat2, rel

összehasonlítja a megadott (címzett) két adatot. Akkor következik az ugrás, ha a két tartalom nem
egyforma. Amikor az első adat (regiszter tartalom) a kisebb, akkor a CY is 1-be íródik. Ellenkező
esetben törlődik.

DJNZ mem , rel

először dekrementálja az adott címen lévő értéket. Majd ellenőrzi, hogy a csökkentett érték 0 vagy nem
és az utóbbi esetben hajtja végre az adott címre az ugrást.

4.4.5.3. A FLAG -ket befolyásoló utasítások

A 8051 utasításai közül csak nagyon kevés változtatja a mikrokontroller flag -jeit. A 4.5. táblázatban
foglaltuk össze, hogy az egyes flag -ekre melyik utasítás hat. Az X azt jelenti, hogy az adott flag -t az
utasítás változtatja. A 0 ill. az 1 jelöli azt a konkrét értéket, amelyre a flag mindig beáll a művelet
hatására.

4.4.5.4. READ-MODIFY-WRITE utasítások

A READ-MODIFY-WRITE utasítások egy port tartalmát kiolvassák, a kívánt értékre változtatják, és


azonnal visszaírják a port - latchbe. A READ-MODIFY-WRITE utasításokhoz mindig egy port címe
tartozik.

A csoportba tartozó utasítások a 4.6. táblázatban láthatók

4.5. Az utasítások hossza és végrehajtási idejük

Az 4.1 - 4.4 táblázatokban az egyes utasítások hosszát és az oszcillátor periódusában megadott


végrehajtási idejét adtuk meg. A felhasználó ezek alapján kiszámíthatja a szükséges memóriaterületet
és a futás időt.

60.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

5. Programofejlesztés
A mikrogép működését meghatározó programot az un. code-, vagy programmemóriába kell tárolni
az alkalmazott mikroprocesszor, vagy mikrokontroller - a továbbiakban processzor - típusától függő
gépi kódok sorozatával. A program végrehajtásakor a processzor innen olvassa ki az utasításokat, és
paramétereket.

A programozás célja tehát.

· egy olyan kódsorozat létrehozása, amelyet


· egy mikrogép ( mikroprocesszor bázisú számítógép ) programmemóriájába töltve
· meghatározza a mikrogép feladat szerinti működését.

5.1. A programfejlesztés lépései

A programfejlesztés az alábbiakban tömören ismertetett lépésekből áll.

e. A program felépítésének megtervezése. Ezt segíti a folyamatábra megrajzolása.

f. A szükséges memória-szegmensek deklarálása

g. A programban használt változók, konstansok, periféria-címek meghatározása.

h. szöveges formában - valamilyen szövegszerkesztő (editor) segítségével - kell megírni a


programozási-nyelv " helyesírási " (szintaktikai), és tartalmi (szemantikai) szabályai
szerint. Az így megirt szöveg a program forrásnyelvi formája. A számítógépek,
mikrogépek alkalmazásának széleskörű elterjedése a különböző programnyelv
választékot is bővítette. A programnyelveket gépközeli- (assembly), és a magas
szintű nyelvek csoportjába sorolhatjuk.

· Gépközeli az a programozás, amelynél minden programlépés – programsor -


az alkalmazott processzor egy-egy utasítása . Mivel minden processzornak saját
utasításkészlete van, ezért a programírás is processzorfüggő. Az ilyen programírást
nevezzük assembly vagy más közelítésben utasítás – szerkezet ű
programírásnak.

· A magas szintű programozási nyelvek ( Pascal, C, stb ) rendszerint a


nemzetközileg elfogadott matematikai, logikai műveletek, és különböző
általános, a programszerkezetet meghatározó utasítások segítségével
írják le a feladatot. Ezért e nyelveken a programozás független attól a géptől,

61.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

amelyen a programot futatni akarjuk. A magas szintű nyelven történő programírást


művelet - központú programozásnak is nevezhetjük.

i. A forrásnyelvi programból a különböző fordító programok (assembler, compiller)


állítják elő a program tárgykódú (object) alakját, illetve a programlistát, amelyek
már a processzor utasításkódjait is tartalmazzák. (A leírtakból következik, hogy a magas
szintű nyelveknél is a fordítóprogram már processzortól függő.)

j. A tárgykódú programból, vagy programokból (több modul esetében) a szerkesztő


(linker) program állítja elő a futtatható programváltozatot.

k. Az így előállított programot kell beírni (letölteni) a programmemóriába. A program-


memória lehet fix (ROM, EPROM), illetve irható-olvasható (RAM) kialakítású. A beé-
getés, vagy letöltés történhet teljes kódú (bináris), vagy tömörített (pl. HEX) alakú fájl-
ból. Ennek megfelelően a programozás utolsó lépése a kívánt formátum-konverzió
elvégzése.

5.2. A programfejlesztés eszközei

A programfejlesztés leglényegesebb eszköze az ember, mivel a feladatot megvalósító program


algoritmusait, felépítését, változók, konstansok meghatározását stb. csak alapos tervező, elemző
munkával lehet, és kell elvégezni

A programfejlesztés tárgyi eszközei ma kizárólag általános célú számítógépek PC-k, és az ezeken futó
fejlesztő-programok segítségével történik. Természetesen e programok csak a technikai háttért adják.
A teljesség igénye nélkül az alábbi szoftverek elengedhetetlenül szükségesek:

· a rajzoló programok (folyamatábra rajzolás),

· a szövegszerkesztők, editorok (forrásnyelvű állomány írásához),

· az assemblerek, compillerek ( a szöveges állomány fordításához),

· a linkerek ( az abszolút tárgykódú állomány szerkesztéséhez),

· az obj-hex, obj-bin átalakítók (formátum-konverzióhoz),

· a szimulátorok (a program-szimulációhoz),

· emulátorok, terminál-monitor programok (a valós idejű teszteléshez)

A programfejlesztés módszerei – a sokszor az adottságoktól függően – különbözőek. A PC-k


elterjedésének kezdetén a fejlesztési lépések egyedi végrehajtása, esetleg un. parancs-fájlok (batch)

62.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

segítségével segítették a hatékonyságot. A számítógépek, a szoftvergyártás rohamos fejlődése hozta az


un. integrált fejlesztői környezetek kialakítását. A nagy szoftvergyártó cégek különféle környezeteket
(DOS, majd Windows operációs rendszerekben) fejlesztettek. Ezek elsősorban az elterjedt magas
szintű nyelvekhez, úgymint a Pascal, C++ stb. készültek. A különböző multitask-os operációs
rendszerekben egymás után jelentek meg az „automatizált” programfejlesztő programcsomagok pl.
DELFI, BILDER stb.

A 8031/51 mikrokontroller család programfejlesztéséhez a Keil Elektronik cég másfél évtizede készít
fejlesztő programokat ( a51.exe, c51.exe, l51.exe, lib51.exe, ohs51.exe), illetve integrál fejlesztő
környezetet (UV2). A főiskolai oktatásban is ezeket a fejlesztői szoftvereket alkalmazzuk. Az oktatási
feltételeket, és igényeket kielégítő fejlesztő környezet-családot (az XE2 különböző változatait
oktatóink irányításával a hallgatók szakdolgozataikban dolgoztak ki. A továbbiakban a legújabb
változatú – XE251 elnevezésű – fejlesztői környezet működését, és használatát írjuk le.

5.3. Programszerkezetek

A mikroprocesszoros berendezések programjainak legkisebb egységei az utasítás-kódok, és


paramétereik. Nagyobb egységek azok a program-blokkok, utasítás-csoportok, amelyek egy adott
jellegű művelet végrehajtásához tartoznak. A következőekben összefoglaljuk az alapvető
programblokkokat, és szemléltetjük folyamatábrával, illetve assembly nyelvű példával.

· Műveleti blokk,

. egy logikailag összetar-


; az OP1 és OP2 összeadása
tozó (matematikai,
MOV A,OP1
logikai, ADDC A,OP2 stb.)
MOV ERED,A
utasításcsoport..
.

· Feltétel nélküli programugrás

; ugrás a folytatásra A következő utasítás


.
MOV ERED,A beolvasása a prog-
LJMP FOLYT
. rammemória
.
FOLYT:
távo- labbi címről
MOV DPTR,#NGS történik
..

63.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· Feltételes programugrás

Egy változó (bájtos,


; ha az A=0 ugrás a folytatásra
. bites) aktuális értékétől
ADDC A,OP2
JZ FOLYT függ, hogy az új utasítás
MOV ERED,A
. beolvasása a program
.
FOLYT: memória következő cí
MOV DPTR,#NGS
méről, vagy távolabbi
címről történik.

· Összehasonlítás

; ha az A=0 ugrás a folytatásra Két bájtos változó


.
relációjának (kisebb,
CJNE V1,V2,NEM_E
JMP EGYEN nagyobb, egyenlő) V1 = V2 ?
NEM_E: JC KISEBB
NAGY: . meghatározása
. V1 < V2 ?
JMP FOLYT többszörös döntéssel
KISEBB: .
. végezhető el. Nagyob Kisebb Egyenlő
JMP FOLYT
EGYEN: .
.
FOLYT: .
.

A matematikai, logikai feladatok elemi programszerkezetek segítségével írhatók le. Ezek a már
megismert program-blokkokból építhetők. Jellegzetes elemi program-szerkezetek:

· Lineáris (lefutó) program elemi programblokkok sorozata, amely a program


lefutása, (az elemi blokkok végrehatása) után nem tér
vissza a program elejére. A program futási ideje alatt
csak egyszer hajtódik végre. Pl. inicializálás stb.

· Ciklikus program ismétlődő - elemi blokkokból álló – programcsoport


(ciklustörzs). A program futási ideje alatt ennek
végrehajtása ismétlődik. Pl. a főprogram (a main) stb.

64.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· Feltételes program végrehajtás egy művelet, érték-összehasonlítás, stb. eredményétől


függ a programcsoport végrehajtása.

Miután minden szoftver ciklikus szervezésű, ezért ezt részletezzük. Minden programciklus alapvetően
a következő elemeket tartalmazza:

· ciklustörzs az a programcsoport, amely ismétlődik,

· ciklus változó az a változó, amelynek értékének tartománya meghatá-


rozza a ciklustörzs ismétlését,

· értékelés a ciklusváltozó értékének összehasonlítása a ciklusban


maradás feltételeivel,

· döntés az értékelés eredményétől függő programelágazás.

A feladattól függően több változatban szervezhetők programciklusok. A szerkezet függ a


ciklusváltozótól, az értékelés cikluson belüli helyétől. Jellegzetes ciklus típusok:

tól - ig .. (for to) ciklus

; 16 bájt törlése
.
MOV R7,#16 olyankor használjuk, amikor a
MOV R0,#BEM ciklusba lépés előtt ismert az
ISM: MOV @R0,#0 ismétlések száma,
INC R0

DJNZ R7,ISM
.

· amíg .. (while) ciklus

amíg a ciklusváltozó adott


.
ISM: CJNE @R1,# ’b’,TOV értéktartományba esik ismé
; ciklustörzs telten hajtsa végre a ciklus
.
. törzset (a ciklusváltozó a
.
törzsben módosul). A cik-
AJMP ISM lus elöl-tesztelt.

65.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· majd-amíg...( do-while)

először hajtja végre a cik-


ISM: ; ciklustörzs lustörzset , majd amíg a cik-
.
. lusváltozó adott értéktarto-
.
mányba esik ismétli azt ( a
CJNE A,BEM,ISM ciklusváltozó a törzsben
.
módosul). A ciklus hátul-
tesztelt.

A technikai feladatokat megvalósító programok struktúrája az ismertetett elemi programszerkezetek


használatával kialakítható. Egy alkalmazói program a következő alapvető egységekből áll:

· inicializálás a változók kezdőértéké-


nek, programozható peri-
fériák üzemmódjának,
megszakítási rendszer
szükség szerinti beállítá-
sa, stb., lefutó típusú,

· főprogram (main) a feladatot ismétlődően


végrehajtó program min-
dig (ciklikus), amely há-
rom fő részre bontható:

· a bemeneti értékek frissítése, tárolása

· a feladat szerinti műveletek megoldása


az aktuális bemeneti értékekkel, és az új
kimeneti változók tárolása.

· kimenetek frissítése a ciklusban meg-

66.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

határozott kimeneti változókkal.

· alprogramok (szubrutinok)

a részfeladatokat megoldó programrészek lefutó típusúak.

A leírt általános felépítést szemlélteti a folyamatábra.

67.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

6. Programfejlesztés az XE251 környezetben.

A fejlesztői környezet menürendszerű kialakítású, és támogatja a programfejlesztés technikai részét a


forrásnyelvű állomány írásától a valósidejű programellenőrzésig. Az XE251-környezetben mind
assembly, mind pedig C forrásnyelvű programok fejleszthetőek.

A program indítása az XE251.BAT parancsfájl aktiválásával történik, amely után a 25. ábra szerinti
képet kapjuk

A menük választéka
(a megnyitható menü neve piros)

A menü funkciója A kiválasztott munka-állomány

25. ábra

Az egyes menük megnyitása történhet:


· a cursor - vezérlő gombok mozgatásával + Enter leütésével,
· az Alt + a menü nagybetűjének együttes leütésével,
· az egér segítségével.
.Bármely menüből az Esc segítségével lehet kilépni.
68.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A továbbiakban tekintsük végig az egyes menük és almenük funkcióit

6.1. Fájl (Fájlkezelés menü)

A menü a különböző fájlok (állományok) kiválasztását, megtekintését szolgálja. A menü


megnyitásával megnyíló ablakban - 2. ábra – látható almenük közül lehet választani.

A Betölt almenüben választható ki az állomány – a


forrásnyelvű fájl -, amellyel dolgozni ( írni, módosítani )
fogunk.
A Megtekint almenüben választhatjuk ki a fejlesztés során
keletkező állományokat.
A Könyvtár létrehozása menüpontot megnyitva könyvtárat
hozhatunk létre a C:\XE251\MUNKA\ alá.

26. ábra

A Fájl létrehozás megnyitásával egy új munkafájlt hozhatunk létre az előzőben megnyitott könyv-
tárban. A létrehozandó fájl előre elkészített sablon alapján készül, így egy kezdeti általános (és
hasznos) tartalommal rendelkezik, mely programvázként szolgál. Külön álmenüből választhatunk,
hogy Assembly vagy C programhoz illetve Projekt-fájlhoz előkészített sablont kívánunk használni. A
*.*-ot választva üres fájlt hozhatunk létre.
A Takarítás almenü aktiválásával törölhetjük a segéd-állományokat a használt munka-könyvtárból. ( a
forrásállomány és a projekt fájl marad meg).
A Kilépés /Quit almenü aktiválásával léphetünk ki.
A 27.ábra mutatja a Betölt menüpont megnyitása utáni képet. Itt választhatjuk ki a fejlesztésben
alkalmazott

*.A51 assembly nyelvű, vagy


*.C C nyelvű forrásállományt,

*.PRJ projekt fájlt,


*.* egyéb kiterjesztésű állományokat.

27. ábra

69.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A 28. ábrán láthatók a Megtekint megnyitása utáni választások


A Hiba-fájl a fordításnál keletkezik, és a forrásállomány
(szintaktikai) hibáit, és leírását tartalmazza
A Lista-fájl ugyancsak a fordításnál keletkezik,és
mutatja a forrásállomány sorait és a lefordított kódokat. A
hibás soroknál jelzi azokat, és jellegüket
A Map-fájl a szerkesztés (linkelés) eredménye, és a teljes

28. ábra memóriatérképet, szimbólumokat mutatja.

A Kevert C lista csak a C nyelvű programoknál, a linkelés eredményeként jön létre. Mutatja a C
sorokból lefordított assembly listát.
A 29..ábra Hiba-, és Lista -fájl részleteket szemléltet.

29. ábra

6.2. Editor (ASCII szöveges fájlok megtekintése, módosítása)

A menüpontban írható, módosítható a kiválasztott (Fájl / betolt..)


állomány. A menü megnyitása után a 30.ábrán látható kép jelenik
meg.
A Forrás almenüben a forrásnyelvi fájl, míg

30. ábra

70.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A Project almenüben a munkakönyvtárban lévő project fájl írható, módosítható. A project fájl nevére
nincs megkötés. Egy unkakönyvtárban kizárólag egyetlen project-fájl lehet. A project fájllal
kapcsolatos részleteket ld. a Súgó menü Project filozófia című álmenüje alatt.

A MEGSZ.A51, STARTUP.A51 és STARTUP0.A51 menüpontokban a C nyelvű programoknál


szükséges segédfájlok megnyitása szerkesztésre végezhető. Ezek mindegyikének az adott
munkakönyvtárban kell lenniük. Ha a kiválasztott fájl nem létezik, akkor azt az XE251 a szerkesztés
megkezdése előtt létrehozza egy előre elkészített sablon szerint, melyben a szükséges módosítások
gyorsan elvégezhetők. A módosított fájlt automatikusan újrafordítja a rendszer a szerkesztőből való
kilépéskor.
6.3. Assembler / Compiller (Fordítás menü)

A menümegnyitása után (31.ábra) választható ki


a forrásnyelvű állomány fordítása, amely létrehozza az
elsődleges tárgykódú, *.OBJ , a lista *.LST, és a hiba
*.ERR állományokat.
A Linker almenüben történik a tárgykódú fájl(ok) szer
kesztése abszolút object állománnyá.
Az abszolút object állomány letölthet ő Intel-Hex formátumú
31. ábra fájl generálása. Létrehozza a *.HEX állományt.

6.4. A Linker

almenü megnyitása újabb választási lehetőségeket kínál, amelyeket a 32. ábra mutatja.

32. ábra

Egyedi (4000H-ra): Egyedi (egymodulos) forrásfájl linkelése és automatikus relokálása 4000H-ra


Egyedi (0000H-ra): Egyedi (egymodulos) forrásfájl linkelése és automatikus relokálása 0000H-ra

71.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Fontos: A belső IDATA RAM mérete 256 bájtra van megadva, ezért 8051-es mikrokontroller esetén
vigyázni kell, mert annak csak 128 bájtos IDATA memóriája van. A fordító nem fog hibaüzenet adni,
ha ezt túllépjük!

Egyedi + Startup (4000H-ra): Egyedi (egymodulos) forrásfájl linkelése és automatikus relokálása


4000H-ra. Hozzálinkeli még a munkakönyvtárban lévő, a C nyelvű programoknál szükséges
STARTUP.A51 és MEGSZ.A51 segédfájlokat.

Egyedi + Startup (0000H-ra): Egyedi (egymodulos) forrásfájl linkelése és automatikus relokálása


0000H-ra. Hozzálinkeli még a munkakönyvtárban lévő, a C nyelvű programoknál szükséges
STARTUP0.A51 és MEGSZ.A51 segédfájlokat.

Project: Többmodulos forrásfájl linkelése PROJECT fájl alapján

6.5. Tesztelés (programellenőrzés)

A menümegnyitása után választható ki


A Szimulátor almenüben (33.ábra) a Simula5x szoftver szimulátor segítségével
ellenőrizhető a fejlesztett program.
A Terminál almenü (34.ábra)
megnyitásakor a mikrogép és a
PC között – választható soros
vonalon – kommunikációs
kapcsolat jön létre.

33. ábra

34. ábra
A mikrogép monitor-, és a PC-ben elindított terminál programok együtt - a fejlesztett programunk -
lépésenkénti, és valós idejű ellenőrzését teszik lehetővé. A tesztelést részletesen ismertetjük a
következő fejezetben.

72.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

A Disassembler almenübe újabb ablak nyílik meg, és


felkínálja a forrás állomány visszafordításának
(disassemblál) két változatát. Az első az assembly
forrást adja, míg a második a C nyelven írt program
kevert visszafordítását szolgáltatja (35. ábra).

35. ábra

6.6. A súgó

A 36. ábrán látható menüben ismertető leírásokat hívhatunk elő a képernyőre. A programfejlesztés
közben segítséget kaphatunk a munka elvégzéséhez

Az MCS-51megnyítása után a 37. ábra szerinti kép


mutatja, hogy az utasításkészlet is szerepel menükben.

36. ábra
37. ábra

6.7. Példák programfejlesztésre

Ø KOMBINÁCIÓS feladat programozása

· Kiinduló adatok:
· A megvalósítandó feladat indexelt függvénye:

4
F = Õ (15,13, 8, 7, 5, 3,1 )

X = (14, 6, 0 )
· A független változók és súlyozásuk
H ÷ 20 , I ÷ 21 , J ÷ 22 , K ÷ 23 ,
· Függő változó
F

· A függvény igazságtáblázat:

73.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

K J I H F
0 0 0 0 0
0 0 0 1 x
0 0 1 0 0
0 0 1 1 1
0 1 0 0 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 0
1 0 0 0 0
1 0 0 1 x
1 0 1 0 0
1 0 1 1 1
1 1 0 0 0
1 1 0 1 1
1 1 1 0 0
1 1 1 1 x

· A legegyszerűbb konjunktív alakú függvény


F=(H + J K )(J + I+ H)

· A program kétféle algoritmus szerint oldja meg a feladatot:


1. bitműveletekkel függvény-érték közvetlen kiszámítása,
2. az igazságtáblázat 1 értékű soraihoz tartozó kombinációk, és az aktuális
bemeneti kombináció összehasonlítása alapján.

74.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· A program folyamatábrája

Start

Inicializálás

AT _ 1 = (H + J K )
A bemenetek
frissítése
AT _ 2 = (J + I + H)
A függvényérték
kiszámítása
bitműveletekkel F = (AT _ 1)(AT _ 2)

A függvényérték
meghatározása az
igazságtáblázat
alapján ciklusváltozó,
végérték, változtatás
mérték beállítása
A kimenetek
frissítése
Az aktuális bemeneti
kombináció szerepel
a táblázatban?

Szubrutinok Nem
– bemenetek, ?
- kimenetek Nem
frissítése Vége? Igen

F=1
Igen
F=0

75.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· A program assembly nyelvű forrásállománya:

;*************************************************** **
;* K K M F Automatika Intézet *
;* Elektronika Szakcsoport *
;******************************************************
;* Program: Prog_ko.a51 *
;* Változat: V1.0 *
;* Dátum: 2008.04.05 *
;* Készítette: Zalotay Péter *
;******************************************************
;* A modul leírása: Kombinációs feladat programja *
;******************************************************

; xxxxxxx Fordítási parancsok xxxxxxx

$NOMOD51

; xxxxxxx Deklarációk xxxxxxx

$NOLIST
$INCLUDE(C:\XE251\SEGEDLET\GYAK552.INC)
$LIST

; xxxxxxx Szegmensek deklarálása xxxxxxx

PROG SEGMENT CODE ; program


VALTB SEGMENT DATA BITADDRESSABLE
; bájtos változók a BIT címezhető területen
?STACK SEGMENT IDATA ; stack memória

; xxxxxxx XDATA memóriába ágyazott I/O xxxxxxx

XSEG AT 0C000H

NGSOR: DS 1 ; Nyomógomb sor címe X:0C000H


LEDSOR: DS 1 ; LED -sor címe X:0C001H

; xxxxxxx Bájtos változók a BIT címezhető területen xxxxxxx

RSEG VALTB

BEM: DS 1 ; bemeneti memória


KIM: DS 1 ; kimeneti memória
ATM: DS 1 ; átmeneti tároló
H_V BIT BEM.0 ; független változók
I_V BIT BEM.1
J_V BIT BEM.2
K_V BIT BEM.3
F_B BIT KIM.0 ; függő változók
F_T BIT KIM.7
AT_1 BIT ATM.0 ; átmeneti tároló bit

; xxxxxxx STACK szegmens xxxxxxx

RSEG ?STACK ; STACK kezdete


DS 10H ; 16 bájtos STACK

; xxxxxxx Program szegmens xxxxxxx

76.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

RSEG PROG

START: LJMP INIT ; ugrás az inicializálása

; ****** Inicializálás ******

INIT: MOV SP,#?STACK-1 ; a Stack -pointer beállítása

MOV R7,#5 ; a memória munkaterületek törlése


MOV R0,#BEM
IN1: MOV @R0,#0
INC R0
DJNZ R7,IN1

MOV DPTR,#LEDSOR ; a kimeneti periféria alaphelyzetbe állítása


MOV A,#0FFH ; a LED -ek ne világítsanak
MOVX @DPTR,A

FOPR: CALL BEOLV

; xxxxxxx a bit-műveletes függvénymegoldás xxxxxxx

MOV C,J_V az első BLOKK értékének kiszámítása,


ANL C,/K_V ; és tárolása
ORL C,H_V
MOV AT_1,C

MOV C,J_V ; a második BLOKK értékének kiszámítása


CPL C
ORL C,/I_V
ORL C,/H_V

ANL C,AT_1 ; a függvényérték kiszámítása


MOV F_B,C ; tárolása

; xxxxxxx a függvénymegoldása az IGAZSÁGTÁBLÁZAT alapján xxxxxxx


; egy for ciklusban összehasonlítja az aktuális független változó
; kombinációt az IG_T értékeivel!

MOV R6,#6 ; a kezdőértékek, táblázat kezdőcím,


MOV DPTR,#IG_T ; hossz, ciklusváltozó
MOV R7,#0

CIKL: MOV A,R7 ; ciklustörzs


MOVC A,@A+DPTR
ANL A,#0FH
CJNE A,BEM,C_VEG ; a beolvasott kombináció a táblázatban?
SETB F_T ; IGEN, tehát a függvényérték 1
JMP VEG

C_VEG: INC R7
DJNZ R6,CIKL ; ciklusismétlés?
CLR F_T ; nem talált egyező értéket, a függvényérték 0

VEG: CALL KIIR


JMP FOPR

; ****** Szubrutinok *****

77.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

; xxxxxxx A független változók (nyomógombsorról) beolvasása,


; lehelyezése a bemeneti memóriába xxxxxxx
; Használja: a DPTR, ACC regisztereket

BEOLV: MOV DPTR,#NGSOR ; a nyomógombok értékének beolvasása,


MOVX A,@DPTR ; lehelyezése a bemeneti memóriába
CPL A
ANL A,#0FH
MOV BEM,A
RET

; xxxxxxx A függő változók aktuális értékének kivitele


; a kimeneti memóriából a perifériára (LED -sorra) xxxxxxx
; Használja: a DPTR, ACC regisztereket

KIIR: MOV DPTR,#LEDSOR ; a kiszámított kimeneti értékek (KIM-ben)


MOV A,KIM ; kivitele a LED sorra
ANL A,#81H
CPL A
MOVX @DPTR,A
RET

; ****** Konstans táblázatok ******

IG_T: DB 3,4,5,6,11,13 ; az 1 értékű kombinációi indexei

END ; fájl vége direktíva

78.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Ø MEGSZAKÍTÁS (interrupt) használata

Feladat:
· Az egy bájtban tárolt V_B változó tartalmának kiíratása háromkarakteres hétszegmensű
kijelzőre időmultiplex vezérléssel.
· A karakterenkénti kijelzés 10 ms időtartamú legyen. Az időzítést a T0 időzítő/számláló
megszakítása generálja.
· A kijelzést a Start/Stop nyomógomb megnyomása indítsa, a gomb újabb megnyomása, pedig
állítsa le s.i.t.
· A kijelzés tiltását egy LED világítása jelezze!

Megoldás:
· A hardver kialakítása:

Hétszegmensű
kijelzők

Kijelző
választás

Anód
választó

Adat DATA
tároló
0C004H

0C000H

· A program funkciói:

Az inicializálásban: be kell állítani a T0 200us értékenkénti túlcsordulását (2.üzem- mód).


A kijelzendő szám (V_B) nagyságrendjei együtthatóit egy tömb (K_T) elemeibe kell átírni.
Az egyes számjegyek kiírásához - 10ms-ként történik - ki kell választani a soronkövetkező
karakter-kijelzőt, majd a K_T tömből az adat tárolóba át kell írni az aktuális nagyságrend
együtthatóját.
Az időzítés a megszakítás rutinban -a megszakítások- számlálásával történik. A 10 ms időzítés
lejártakor egy bitet (ID_bit) 1-be kell állítani, és a számláló tartalmát törölni.

79.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· A folyamatábra

V_B a kijelzendő szám


K_T [] 3 elemű tömb, a
Start szám együtthatói
Főprogram
Felbontás rutin
Inicializálás
K _ T [2] = V _ B / 100

A bemenetek K _ T [1] = (%( V _ B / 100 )) / 10


frissítése
K _ T [0] = %( (%( V _ B / 100 )) / 10)
nem
Indit?

igen Karakter kiíratás


Felbontás
nagyságrendekre Az n. kijelző
kiválasztása

nem
10 ms? A K_T [n] átírása
az adat tárolóba
igen
Az n. karakter
kiíratása

T0 int.
A kimenetek Időzítés
frissítése
I_D + 1

nem
Szubrutinok I_D = I_M?
– bemenetek,
kimenetek igen
frissítése
- felbontás, I_D=0
- időzítés I_bit=1

80.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· A program assembly nyelvű forrás-állománya

;****************************************************
;* K K M F Automatika Intézet *
;* Elektronika Szakcsoport *
;****************************************************
;* Program: HETSZ_KIJ.a51 *
;* V ltozat: V1.0 *
;* D tum: 2008.04.17 *
;* Készítette: Zalotay Péter *
;****************************************************
;* A modul leírása: Egy bájt tartalmának idő- *
;* multiplex kiírat sa h romkarakteres hétszegmensű *
;* kijelzőre *
;****************************************************

; xxxxxxx Deklarációk xxxxxxx

; xxxxxxx Szegmensek deklarálása xxxxxxx

PROG SEGMENT CODE ; program


VALTB SEGMENT DATA BITADDRESSABLE ; bájtos változók a BIT címezhető területen
?STACK SEGMENT IDATA ; stack memória

; xxxxxxx XDATA memóriába ágyazott I/O xxxxxxx

NGSOR EQU 0C000H ; Nyomógomb sor címe


LEDSOR EQU 0C006H ; LED -sor címe
ADAT_TAR EQU 0C000H ; A kijelző adatt rolója
ANV_TAR EQU 0C004H ; Az anódv laszt s t rolója

; xxxxxxx Bájtos változók a BIT címezhető területen xxxxxxx

RSEG VALTB

BEM: DS 1 ; bemeneti memória


BEMEL: DS 1 ; változás (él) tároló
KIM: DS 1 ; kimeneti memória
V_B: DS 1 ; kijelzendő változó
K_MUT: DS 1 ; kijelző mutató
T_MUT: DS 1 ; táblázat mutató
ATM: DS 1 ; átmeneti t roló
K_T: DS 3 ; együtthatók tömbje
I_MOD: DS 1 ; az időzítés modulusa
I_bit BIT ATM.0 ; időzítő bit
ST_SP BIT BEM.0 ; start/stop gomb
ST_SPE BIT BEMEL.0 ; start/stop változása
JEL BIT KIM.7 ; 0-n l nincs számkijelzés, és a jelző LED világít

; xxxxxxx STACK szegmens xxxxxxx

RSEG ?STACK ; STACK kezdete


DS 10H ; 16 b jtos STACK

; xxxxxxx Program szegmens xxxxxxx

81.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

RSEG PROG

START: LJMP INIT ; ugrás az inicializálásra

ORG START+0BH ; megszakítás rutin hívása


LJMP T0_M

; ****** Inicializálás ******

INIT: MOV SP,#?STACK-1 ; a Stack -pointer beállítása

MOV R7,#10 ; a memória munkaterületek törlése


MOV R0,#BEM
IN1: MOV @R0,#0
INC R0
DJNZ R7,IN1

MOV K_MUT,#0FEH ; a kijelző mutató alaphelyzete


; (az 1-ekre mutat)
MOV T_MUT,#K_T
MOV DPTR,#LEDSOR ; a kimeneti periféria alaph.
MOV A,#0FFH ; a LED -ek ne világítsanak
MOVX @ DPTR,A

ANL TMOD,#0F0H ; T0 üzemmód beállítása


ORL TMOD,#2
MOV TH0,#74
SETB TR0
SETB ET0 ; megszakítás engedélyezése
SETB EA

FOPR: CALL BEOLV ; bemenetek beolvasása

JNB ST_SPE,FO_1 ; a számkijelzés be/ki kapcsolása


CPL JEL

FO_1: JNB JEL,FO_VEG

JNB I_bit,FO_VEG ; kijelző váltás ?

CLR I_bit
MOV DPTR,#ANV_TAR ; kijelző kiválasztás
MOV A,K_MUT
MOVX @DPTR,A
RL A ; táblázat-,és kijelző mutató mód.
INC T_MUT
CJNE A,#0F7H,FO_2
MOV A,#0FEH
MOV T_MUT,#K_T
FO_2: MOV K_MUT,A

MOV DPTR,#ADAT_TAR ; adat kiíratás


MOV R0,K_MUT
MOV A,@R0
MOVX @DPTR,A

FO_VEG: CALL KIIR


JMP FOPR

; ****** Szubrutinok *****

82.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

; xxxxxxx A független valtozók beolvasasa, valtozas figyelése,


; lehelyezés a bemeneti memóriaba xxxxxxx
; Hasznalja: a DPTR, ACC regisztereket

BEOLV: MOV DPTR,#NGSOR ; a nyomógombok értékének beolv.


MOVX A,@DPTR ; lehelyezése a bemeneti memóriaba
CPL A
MOV B,BEM
XRL B,#0FFH ; a valtozas(él) meghat. és tárol
ANL B,A
MOV BEMEL,B
MOV BEM,A
RET

; xxxxxxx A függő változók aktuális értékének kivitelea kimeneti memóriából a perifériára (LED -sorra) xxxxxxx
; Használja: a DPTR, ACC regisztereket

KIIR: MOV DPTR,#LEDSOR ; A kiszámított értékek (KIM-ben)


MOV A,KIM ; kivitele a LED sorra
CPL A
MOVX @DPTR,A
RET

; xxxxxxx A kijelzendő változó helyiértékekre bontása egy tömbbe xxxx


; Használja: az R0, ACC és B regisztereket

FELB: MOV R1,#K_T +2 ; a tömbmutató beállítása


MOV A,V_B ; a 100-ok együtthatójának kiszám.
MOV B,#100
DIV AB
MOV @R1,A ; letétele a tömb harmadik elemébe
DEC R1
XCH A,B ; a 10-ek együtthatójának kiszám.
MOV B,#10
DIV AB
MOV @R1,A ; letétele a tömb második elemébe
DEC R1
MOV @R1,B ; az 1-k letét. az első elembe
RET

; xxxxxxx A 10 ms időzítés a T0 megszakítás rutinja xxxxxxx


; Használja: az ACC és PSW regisztereket

T0_M: PUSH ACC ; a használt regiszterek mentése


PUSH PSW
INC I_MOD ; a számláló értékének növelése
MOV A,I_MOD
CJNE A,#50,T0_MV ; elérte a végértéket ?
SETB I_BIT ; igen
MOV I_MOD,#0
T0_MV:POP PSW ; regiszeterk visszaolvas sa
POP ACC
RETI

END ; fájl vége direktíva

83.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

7. A programtesztelés

A fejezetben tömören ismertetjük a programtesztelés két megoldásához használt programok


működését, és használatát. A fejleszett programok szimulációjához a Simula5x programot használjuk.
A valósidejű teszteléshez az elmult években fejlesztett mikrokontrolleres gyakorló monitor, és
terminálprogjamait tárgyaljuk. Mindkét program kezelésének részletes leírása a Függelékben van.

7.1. Programszimuláció

A PC-n futó szimulátorral a fejlesztett programot ellenőrzött módon lehet futtatni. Ez azt jelenti, hogy
a program végrehajtása közben:

· meg tudjuk vizsgálni és esetleg módosítani a kontroller bármelyik regiszterének tartalmát


(watch),
· meg tudjuk a program futását adott helyen állítani, azaz töréspontot tudunk elhelyezni
(breakpoint),
· tudjuk a programot lépésenként futtatni (single step),
· a külső környezetből jövő (input) adatokat fájlból beolvasva szimulálni (stimulus),
· illetve kiküldött (output) adatokat fájlba eltárolni,
· a szimuláció során bekövetkező eseményeket a későbbi elemzés céljából gyűjteni (log).
Mivel a program támogatja az egér használatát, ezért a szokásos módon egérrel és billentyűzettel is
kezelhető.

A szimulációs programban lehetőség van az assembly nyelvű forrásnyelvi program írására, és a megirt
program futtatására, szimulálására. Ennek segítségével rövidebb programok, szubrutinok megírása és
ellenőrzése is elvégezhető a szimulációs környezetben.

A szimulációs programcsomagban lévő disassembler segítségével módunk van közvetlen gépi kódú
programok ( EPROM tartalom ) visszafejtésére, program elemzésére.

Intel Hex, illetve bináris formátumú programok beolvasását, illetve fájlba írását is támogatja a
program.

A program elindítása után a következő képet látjuk a számítógép képernyőjén:

84.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Gépi kódú program: A legfontosabb


cím_utasításkód_opera regiszterek neve, Forrásnyelvi
ndus alattuk az lista
aktuális

File Run View Break Assemble Options F1=Help


R0 R1 R2 R3 R4 R5 R6 R7 A B DPTR PC PSW Flags
00 00 00 00 00 00 00 00 00 00 0000 0000 00 - - - RB0- -
A verem
------------------------------------------------------------------------------
PROG: | SP= 07 07 07 memória
0000: 02 00 0C
0003: 75 D0 00
LJMP INIT1
MOV PSW, #00
|
| FF: 00 00 00 00
tartalma
INTRCL: | 03: 00 00 00 00
0006: 78 FF MOV R0, #FF | SP: 00 00 00 00
VICL:
0008: 76 00 MOV @R0, #00
|
| OP-2:0000
Az elősőleg
000A: D8 FC DJNZ R0, VICL | OP-1:0000 végrehajtott
INIT1: |
000C: 75 81 60 MOV SP, #60 | P0 = 11111111
utolsó két
000F: 90 5F FF MOV DPTR, #5FFF | P1 = 11111111 utasítás címe
0012: C2 03 CLR GYU | P2 = 11111111
0014: 12 01 82 LCALL LACINIT | P3 = 11111111 Portok
MAIN: | P4 = 11111111
0017: 12 01 95 LCALL PICOLV | PWM0:0 PWM1:0 W tartalma
001A: F5 F0 MOV B, A |
|
-IData -0--1--2--3--4--5--6--7----8--9--A--B--C--D--E--F-IData-SFR-XData-Code- Memóriatartalo
m
0000: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 *................* kijelzése:
0010: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 *................*
0020: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 *................* Idata - belső
F2=SFR, F4=Goto Addr, F7=Step, F8=Proc, F9=Run, Alt F..,F10=Menue 80552/83552
RAM
SFR-SFR
Az egyes menük megnyitása vagy egérrel rákattintással, vagy az ALT és a menü nagybetűvel írt
betűjének együttes lenyomásával történhet pl. a File menü ALT+F betűkombinációval nyílik.

7.2. A programok valósidejű tesztelése

A PC-ben futó terminál-program, és a mikrogépben futó monitor-program együttműködése biztosítja


azt, hogy a PC klaviatúrájáról vezérelni lehet a mikrogépben futó programot, illetve innen használható
a képernyő ASCII karakteres állományok (szövegek, kvázi-grafikus stb. ) megjelenítésére. A két gép
közötti kommunikáció az RS232 szabvány szerinti soros vonalon bonyolódik.

A terminálprogram – az indítását követően – felváltva figyeli a klaviatúrát, illetve a soros vonalat. A


klaviatúrán leütött gomb scan-kódját a soros vonalra továbbítja. A sor vonalról érkező kódokat pedig a
képernyőn jeleníti meg.

Az inicializálást követően a monitorprogram csak a soros vonalat figyeli. Az innen érkező egy
karakteres felhasználói parancs észlelése után hajtja végre a parancshoz tartozó műveletsort, és küldi
vissza válaszokat ugyancsak a soros vonalon.

85.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Felhasználói parancsok:
PPAARRAAN
NCCSS LLEEÍÍRRÁÁSS
Go form address Adott címtő történő felhasználói programfuttatás
U Unassembler Programkód visszafejtő
D Display memory Memóriaterület listáztatás
M Modify memory Memória tartalom megváltoztatása
C Copy memory Memóriaterület másolása
F Fill memory Memóriaterület kitöltése
I Inputs monitoring Bemenetek folyamatos figyelése
H Help Segítség, felhasználói parancsok rövid összefoglalója
S Step form address Adott címtő történő lépésenkénti felhasználói
programfuttatás

7.3. A monitor program

A mikrogép programmemóriájában a 0000h címen kezdődik a monitorprogram. A tápfeszültség be-


kapcsolásakor, vagy a RESET gomb megnyomása után erről a címről indul a programfutás.
Szoftverből is átadható erre a címre a futtatás.
A monitorprogram részei:

· Inicializálás.
· Memóriakezelés.
· Disassambler, (Unassambly).
· Felhasználói program letöltés és futtatás.
· Lépésenként történő felhasználói programfuttatás.
· Perifériakezelés.

7.3.1. Inicializálás
Az inicializálás a mikrokontroller reset-elésekor, vagy a program memória 0000h címére történő ugrás
után történik. Az inicializáló rész:

· törli a monitor program által használt XDATA memóriát (3E00h-3FFFh),


· törli a megszakítás kezelő regisztereket ( IE0,IE1,IP0,IP1), és
· alaphelyzetbe állítja a memóriába ágyazott perifériákat.
A gyakorlón található LED-sor tesztelése egy futófény segítségével történik. A hétszegmensű kijelzők
szegmenseit sorra kiivilágítja, majd a középső g szegmense világít.

86.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Végül inicializálja a soros portot, mely sebességét 9600 Baud-ra állítj. A terminál ablakba egy
bejelentkező szöveg segítségével jelzi a felhasználónak, hogy késszen áll a parancsok fogadására –
38.ábra. A képernyő tetején egy üdvözlő szöveg olvasható, míg lejjebb úgynevezett, prompt jelenik
meg, a következő szöveggel: „ 552> ”.

38. ábra

7.3.2. Memória utasítások


A H gomb (help) leütése tán a képernyőre is kiíródnak a parancsok, illetve a mikrogép memó-
riakiosztása (39. ábra).

39. ábra

G – Go form address – Adott címtő történő felhasználói programfuttatás


U – Unassembler – Programkód visszafejtő

87.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

D – Display memory – Memóriaterület listáztatás

M – Modify memory – Memóriatartalom megváltoztatása


C – Copy memory – Memóriaterület másolása
F – Fill memory – Memóriaterület kitöltése
I – Inputs monitoring – Bemenetek folyamatos figyelése
H – Help – Segítség, felhasználói parancsok rövid összefoglalója
S – Step form address – Adott címtő történő lépésenkénti felhasználói programfuttatás

88.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

8. Függelék
8.1. Assembler direktívák

8.1.1. Szimbólum definiáló direktívák:


EQU A szimbólumhoz rendel egy értéket, vagy regiszter nevet. A szimbólum értéke később már
nem változtatható.
pl. HATAR EQU 1200
ERTEK EQU HAT+R - 'A'
AKKU EQU A
SZAML EQU R7
SET A szimbólumhoz úgy rendel értéket, vagy regisztert, hogy az újra definiálható.
pl. TAR SET R0
VALT SET 1AH
TAR SET R1
VALT SET 0D2H
DATA A szimbólumhoz rendel egy direkt címezhető belső memória címet.
pl. BEM1 DATA 20H
KIM2 DATA 22H
IDATA A szimbólumhoz rendeli a csak indirekt címezhető belső memória egy címét.
pl. OSSZEG IDATA 60H
MARAD IDATA OSSZEG - 1
XDATA A szimbólumhoz rendeli egy külső memória címét.
pl. TABL XDATA 100H
KIF1 XDATA TABL + 23H
CODE A szimbólumhoz rendeli a programmemória egy címét.
pl. START CODE 00H
INTV_0 CODE START + 3
SEGMENT Egy relokálható SZEGMENS deklarálását biztosítja. A következő formában
használható:
Szegm_Nev SEGMENT Szegm_tipus [elh_tip]
ahol a
Szegm_Nev a szegmens funkciójára utaló név,
Szegm_tipus megadja, hogy a szegmens melyik memóriaterületre legyen letöltve,

89.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

elh_tip a letöltés kezdetét határozza meg [ opcionális ].


Szegmens-típusok:
CODE program memória,
XDATA külső adatmemória,
DATA a direkt címezhető belső memória,
IDATA indirekt címezhető belső memória,
BIT a bit-címezhető belső memória.
Elhelyezési típusok:
PAGE lapkezdetre igazítás ( csak CODE és XDATA után ),
INPAGE a szegmens csak egy lapon belül lehet (csak CODE és XDATA után),
INBLOCK a szegmens csak egy 2048 bájtos blokkot foglalhat el (csak CODE
után),
BITADDRESSABLE a belső memória bit-címezhető 16 bájt-ja (20H - 2FH )
lehet (csak DATA és IDATA után ),
UNIT egy biten, vagy egy bájton kezdődő szegmens,
OVERLAYABLE olyan szegmens, amelyet a C-51 deklarált, és ebbe beszerkesztés
engedélyezett.
8.1.2. Helyfoglaló, és inicializáló direktívák
DS adott számú összefüggő memóriaterületet foglal le (bármelyik memóriában),
használata:
[Címke:] DS szám, vagy kifejezés
DBIT adott számú bitet foglal le, használata:
[Címke:] DBIT szám, vagy kifejezés
DB a programmemóriában ad kezdőértéket a felsorolt bájtoknak, használata:
[Címke:] DB szám[,kifejezés][,szimbólum]...
DW a programmemóriában ad kezdőértéket a felsorolt szavaknak, használata:
[Címke:] DW szám[,kifejezés][,szimbólum]...

8.1.3. Modulok közötti kapcsolatok direktívái


Feladatuk a különböző modulokban deklarált szimbólumok elérésének biztosítása.

PUBLIC a direktívával deklarált szimbólumok minden modulból elérhetők,


használata:
PUBLIC Szimb[,Szimb[,....]]

90.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

EXTRN egy másik modulban deklarált szimbólum elérését biztosítja az aktuális


modulban. Használata:
EXTRN Szegm_tipus(Szimb_lista)
NAME az egyes tárgy-modulok (object) megkülönböztetését teszi lehetővé. Ha
nem adjuk meg, akkor a forrásfájl neve lesz a tárgy-modul neve is.
NAME Tárgy_mod_név
8.1.4. Cím beállító és szegmens választó direktívák
A direktívák segítségével adhatók meg programrészek, szegmensek kezdő címei, illetve választhatók
már létező szegmensek.

ORG meghatározza a következő utasítás, vagy adat címét.


ORG 100H
ORG START
END a forrásprogram végét jelzi. ( Mindig kell használni )
RSEG egy - már korábban definiált - relokálható szegmens kiválaszt
RSEG szegmens_név
CSEG, DSEG, XSEG, ISEG, BSEG az egyes szegmensek kezdőcímét lehet
megadni a direktívák segítségével
CSEG [AT absz-cím]
DSEG [AT absz-cím]
XSEG [AT absz-cím]
ISEG [AT absz-cím]
BSEG [AT absz-cím]
Amennyiben nincs cím, akkor a fordításnál mindegyik szegmens 0 címnél kezdődik.
USING az aktuális regiszterbankot választja ki. Használata:
USING sorsszám (a sorszám 0...3 lehet)
A szegmensek kijelölésére, a változók elhelyezésére, és a különböző helyfoglalásokra mutat mintát a
PELDA1.LST fájl. A bemutatott példa a forrásnyelvi fájl fordítása után létrehozott lista-fájlt
szemlélteti. A lista végén látható szimbólum-táblázat megadja, a szimbólum nevét, típusát ( C,D,B,N
), relokálható R, vagy abszolút címre A került a deklarálásnál, valamint azt, hogy a lista hányadik
sorában került deklarálásra #, és melyik sorokban használt még az adott szimbólum. A
relokálhatóaknál még a szegmensnév is látható.
Megfigyelhető, hogy minden relatívan (relokálhatóan) deklarált szegmens változóinak címe 0-án
kezdődik. A tényleges címet a szerkesztés ( linkelés ) után kapják meg.

91.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

8.2. Fordítási parancsok

8.2.1. Elsődleges parancsok:


DATE (rövidítve: DA)

A lista minden oldalán a fejlécbe dátum írása. A dátum maximálisan 9 betűs lehet.

Alapértelmezés: MS-DOS szerinti írásmód


pl.:
$ DATE (12/07/96)
DEBUG/NODEBUG (rövidítve: DB/NODB)

A DEBUG parancs hatására a szimbólum információk ( címkék, szimbólumok és értékük ) is


belekerülnek a *.obj fájlba. Ezek révén a szimulátor, illetve emulátor is megjeleníti ezeket a
szimbólumokat.

Alapértelmezés: NODEBUG
pl.:
$ DEBUG
$ DB
$ NODB
ERRORPRINT/NOERRORPRINT (rövidítve: EP/NOEP)

A fordítás során felismert hibákat lehet egy megadott fájlba kiíratni. Nem változtatja meg azt, hogy a
hibák a lista fájlba is bekerülnek.

Alapértelmezés: NOEP
pl.:
$ EP(PROG1:ERR)
$ NOEP
OBJECT/NOOBJECT (rövidítve: OJ/NOOJ )

Parancs object fájl készítésére, vagy letiltására. Ha nem adunk meg nevet, akkor a forrásfájl nevén
készül a fájl.

Alapértelmezés: OBJECT ( fájl_név.OBJ)


pl.:
$ OBJECT (C:\XE2A51\PELDA1.OBJ)
$ NOOJ

92.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

PAGELENGHT (rövidítve: PL)

A listázásnál egy lapra irt sorok számát határozza meg az utasítás után zárójelbe irt - 10-nél nagyobb -
szám .

Alapértelmezés: PL (68)
pl.:
$ PAGELENGHT (132)
$ PL (75)

PAGEWIDTH (rövidítve PW)

A listázásnál egy sorba irt karakterek számát határozza meg az utasítás után zárójelbe irt - 8 és 132
közötti - szám.

Alapértelmezés: PW(120)
pl.:
$ PW (79)
$ PAGEWIDTH(122)
PRINT/NOPRINT (rövidítve: PR/NOPR )

Készítsen, vagy ne készítsen lista fájlt. Ha a PRINT utasítás után nem adunk meg fájl nevet, akkor a
forrásnéven készül a lista.

Alapértelmezés: PRINT(forrás_név.LST)
pl.:
$ PRINT
$ NOPR
$ PR(temp.lst)
SYMBOLS/NOSYMBOLS (rövidítve: SB/NOSB )

Írjon, vagy ne írjon szimbólum azok attribútumaival táblázatot a lista végére.

Alapértelmezés: SYMBOLS
pl.:
$ SYMBOLS
$ NOSB

MOD51/NOMOD51 (rövidítve: MO/NOMO )

93.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Az alapértelmezésben ( MOD51) az assembler felismeri a 8051 kontroller regiszter és SFR


szimbólumait. Amennyiben más típushoz készül a program, akkor a NOMOD51 parancsot kell
megadni, és az alkalmazott kontroller szimbólumait tartalmazó un. include fájlt (pl.: REG552.INC)
kell a program elején beolvastatni az INCLUDE másodlagos paranccsal.

Alapértelmezés: MOD51
pl.:
$ NOMOD51
COND/NOCOND (rövidítés: nincs)

A COND parancs hatására feltételes fordítás (IF-ELSEIF-ENDIF szerkezet) érvénytelen részét is


listázza, míg a NOCOND megadásnál nem.

Alapértelmezés: COND
pl.:
$COND
$ NOCOND
MACRO/NOMACRO (rövidítés :nincs)

Alapértelmezésben felismeri, és feldolgozza a macro - definíciókat. A NOMACRO utasítás hatására a


fordító nem dolgozza fel a macro -kat.

Alapértelmezés: MACRO
pl.:
$MACRO
$ NOMACRO

REGISTERBANK/NOREGISTERBANK (rövidítve: RB/NORB )

Az RB parancs határozza meg, hogy a programban melyik ( zárójelbe irt szám/számok )


regiszterbankokat kívánjuk használni. A NORB parancs megszünteti a helyfoglalást a bank számára.

Alapértelmezés: REGISTERBANK(0)
pl.:
$ REGISTERBANK (0,1)
$ NORB
XREF/NOXREF (rövidítve: XR/NOXR )

Készítsen, vagy ne keresztreferencia listát a szimbólumtáblázat után.

94.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Alapértelmezés: NOXREF
pl.:
$ XREF
$ NOXR
TITLE (rövidítve: TT)

Írjon a lap tetejére fejlécet. A szöveget zárójelben kell a parancs után írni.

Alapértelmezés: TITLE a fájl neve kiterjesztés nélkül, vagy a 'NAME' paranccsal megadott
név.
pl.:
$ TITLE ( modul meghatározás )
8.2.2. Másodlagos parancsok
EJECT (rövidítve: EJ )

A parancs hatására a listában lapdobás következik

pl.:
$ EJ

INCLUDE (rövidítve: IC)

A parancstól kezdve a fordító a zárójelbe irt fájlt fordítja és iktatja be az object fájlba, majd folytatja a
forrásfájl fordítását. Maximálisan kilenc ilyen közbeiktatást alkalmazhatunk.

pl.:
$ INCLUDE (REG552.INC)

LIST/NOLIST (rövidítve: LI/NOLI )

A parancsok arra adnak utasítást, hogy a következő részeket listázza, vagy ne. Ezzel meghatározott
részek listázása mellőzhető.

Alapértelmezés: LIST
pl.:
$ LIST
$ NOLIST
GEN/NOGEN (rövidítés: nincs )

A parancsok azt határozzák meg, hogy a makró-kifejtés bekerüljön, vagy ne a listába.

95.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Alapértelmezés: GEN
pl.:
$ GEN
$ NOGEN
8.2.3. Feltételes fordítási parancsok
SET/RESET

A feltételes fordítás számára deklarál, vagy szüntet meg szimbólumot és rendel a szimbólumhoz
értéket. Ha csak a szimbólumot deklaráljuk, akkor értéke 0FFFFH lesz.

pl.:
$ SET (TMP, VALT= 55)
$ RESET (TEMP,VALT)
IF

A feltételes szerkezet kezdő parancsa. Utána kell megadni az értékelendő feltételt. Ha a feltétel teljesül,
akkor folytatódik a fordítás, ellenkező esetben az ENDIF parancs utáni rész fordítása következik.

pl.: $ IF (ALT=55)
1. programrész
$ ENDIF
2. programrész
ELSE

Választásos feltételes szerkezet (IF-ELSE-ENDIF) parancsa. Ha az IF feltétele nem teljesül, akkor az


ELSE utáni rész fordítása következik.

pl.:
$ IF (VALT=55)
1. programrész
$ ELSE
2. programrész
$ ENDIF
3.programrész
ELSEIF

Egymásba ágyazott választásos feltételes szerkezet parancsa. Az ELSE ágon belül újabb IF, vagy IF-
ELSE szerkezet beiktatását teszi lehetővé.

pl.:
96.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

$ IF (VALT=55)
1.programrész
$ ELSEIF(VALT2)
2.programrész
$ ELSEIF (SWITCH=2)
3.programrész
$ ENDIF
4.programrész
END

A feltételes fordítási szerkezet lezáró parancsa.

97.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

8.3. A 8031/51 mikrokontroller család utasításai

4.1.táblázat Adatátviteli utasítások

Oszcillátor
Utasítás Hossz
periódus
MOV A,Rn 1 12
MOV A,direct 2 12
MOV A,@Ri 1 12
MOV A,#data 2 12
MOV Rn,A 1 12
MOV Rn,direct 1 24
MOV Rn,#data 2 12
MOV direct,A 2 12
MOV direct,Rn 2 24
MOV direct,direct 3 24
MOV direct,@Ri 2 24
MOV direct,#data 3 24
MOV @Ri,A 1 12
MOV @Ri,direct 2 24
MOV @Ri,#data 2 12
MOV DPTR,#data16 3 24
MOVC A,@A+DPTR 1 24
MOVC A,@A+PC 1 24
MOVX A,@Ri 1 24
MOVX A,@DPTR 1 24
MOVX @Ri,A 1 24
MOVX @DPTR,A 1 24
PUSH direct 2 24
POP direct 2 24
XCH A,Rn 1 12
XCH A,direct 2 12
XCH A,@Ri 1 12
XCHD A,@Ri 1 12

98.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

4.2.táblázat Aritmetikai utasítások

Oszcillátor
Utasítás Hossz
periódus
ADD A,Rn 1 12
ADD A,direct 2 12
ADD A,@Ri 1 12
ADD A,#data 2 12
ADDC A,Rn 1 12
ADDC A,direct 2 12
ADDC A,@Ri 1 12
ADDC A,#data 2 12
SUBB A,Rn 1 12
SUBB A,direct 2 12
SUBB A,@Ri 1 12
SUBB A,#data 2 12
INC A 1 12
INC Rn 1 12
INC direct 2 12
INC @Ri 1 12
INC DPTR 1 24
DEC A 1 12
DEC Rn 1 12
DEC direct 2 12
DEC @Ri 1 12
MUL AB 1 48
DIV AB 1 48
DA 1 12

99.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

4.3.táblázat Logikai - utasítások


Oszcillátor
Utasítás Hossz
periódus
ANL A,Rn 1 12
ANL A,direct 2 12
ANL A,@Ri 1 12
ANL A,#data 2 12
ANL direct,A 2 12
ANL direct,#data 3 24
ORL A,Rn 1 12
ORL A,direct 2 12
ORL A,@Ri 1 12
ORL A,#data 2 12
ORL direct,A 2 12
ORL direct,#data 3 24
XRL A,Rn 1 12
XRL A,direct 2 12
XRL A,@Ri 1 12
XRL A,#data 2 12
XRL direct,A 2 12
XRL direct,#data 3 24
CLR A 1 12
CPL A 1 12
RL A 1 12
RLC A 1 12
RR A 1 12
RRC A 1 12
SWAP A 1 12
CLR C 1 12
CLR bit 2 12
SETB C 1 12
SETB bit 2 12
CPL C 1 12
CPL bit 2 12
ANL C,bit 2 24
ANL C,/bit 2 24
ORL C,bit 2 24
ORL C,/bit 2 24
MOV C,bit 2 12
MOV bit,C 2 24
JC rel 2 24
JNC rel 2 24
JB bit,rel 3 24
JNB bit,rel 3 24
JBC bit,rel 3 24

89.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

4.4.táblázat Vezérlő utasítások


Oszcillátor
Utasítás Hossz
periódus
ACALL addr11 2 24
LCALL addr16 3 24
RET 1 24
AJMP addr11 2 24
LJMP addr16 3 24
SJMP rel 2 24
JMP 1 24
JZ rel 2 24
JNZ rel 2 24
CJNE A,direct,rel 3 24
CJNE A,#data,rel 3 24
CJNE Rn,#data,rel 3 24
CJNE @Ri,#data,rel 3 24
DJNZ Rn,rel 3 24
DJNZ direct,rel 3 24
NOP 1 12
RETI 1 12

4.5.táblázat. A flag -ket állító utasítások


Utasítás CY OV AC
ADD X X X
ADDC X X X
SUBB X X X
MUL 0 X
DIV 0 X
DA X
RRC X
RLC X
SETB C X
CLR C X
CPL C X
ANL C,bit X
ANL X
C,/bit
ORL C,bit X
ORL C,/bit X
MOV C,bit X
CJNE X

101.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

8.4. A szimulátor parancsainak részletes leírása

A következőkben az egye menükön belüli alpontok jelentését tekintjük át.


File menü parancsai:
Load Intel Hex file Intel hexa formátumú fájl betöltése. (ld. később!)
Load binary file Bináris fájl betöltése - az a fájl a kódmemória bináris alakját tartalmazza
Load symbol file Szimbólum fájl betöltése - a forrásprogramban használt címkék,
változók nevei
Clear symbol stack A szimbólumokat tartalmazó verem törlése

Write Intel Hex file A memória tartalmának Intel hexa formátumú fájlba írása
Write binary file A memória bináris tartalmának fájlba írása
Load stimulus file A bemeneti gerjesztéseket tartalmazó fájl betöltése
Open log file A szimuláció alatt történt eseményeket naplózó fájl megnyitása
DOS command DOS parancs kiadása a programból való kilépés nélkül
Quit ALT-F4 Kilépés a programból

Run menü parancsai:

Single step F7 A program lépésenkénti végrehajtása


Single proc F8 A program lépésenkénti végrehajtása, szubrutinok is egy lépésben
Run program F9 A program futtatása
Goto address F4 A program adott címére ugrás
Restart user prog A újra indítása

A lépésenkénti program végrehajtásnál a felhasználói programnak mindig csak egy utasítása


hajtódik végre, és ilyenkor mindig lehetőség van a regiszterek vagy a tártartalmak vizsgálatára, vagyis
a végrehajtott utasítás hatásának, a program helyes működésének az ellenőrzésére.

Ha a töréspontok elhelyezésével sikerült meghatározni azt a programrészt, ahol a program hibásan


működik, akkor ezen a részen belül a hibás utasítás vagy utasítássorozat megtalálása a lépésenkénti
program végrehajtás segítségével könnyen elvégezhető. Lehetőség van szubrutinok egy lépésben
történő végrehajtására is a Single proc paranccsal.

102.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

View menü parancsai:

Register, R0 ... R0-R7 regisztertömb kijelzése/módosítása


Ports, P0 ... Portok kijelzése/módosítása
Internal RAM, Idata
SFR Speciális funkciójú regiszterek
Extern. memory, Xdata Külső adatmemória megnézése/módosítása
Code memory, Cdata Program memória megnézése/módosítása
Idata symbols Belső RAM - hoz a programban rendelt szimbólumok megnézése
SFR symbols SFR - ekhez a programban rendelt szimbólumok megnézése
Bit symbols Bitekhez a programban rendelt szimbólumok megnézése
Code symbols A programban használt szimbólumok megnézése
Xdata symbols Külső RAM - hoz a programban rendelt szimbólumok megnézése
Serial input Soros bemenetre küldött adatok
Serial output Soros kimeneten megjelenő adatok
Cycle count Ciklusszám megjelenítése

Break menü parancsai:

Set breakpoint ctrl - B Töréspont beállítása


Clear breakpoint ctrl - E Töréspont törlése
Remove all breakpoints Az összes beállított töréspont eltávolítása
List breakpoints Töréspontok listázása

A felhasználónak a program élesztése során igen nagy segítséget nyújt, ha a programot egy, még az
indítás előtt kijelölt címen meg lehet állítani, azaz a futását felfüggeszteni. Ekkor ugyanis a regiszterek
és a programban használt változók tartalmainak vizsgálatával könnyen eldönthető, hogy a program
eddig a pontig helyesen, vagy hibásan működött. A teljes programot több, logikailag jól elhatárolt
részre bontva, a hibásan működő programrész gyorsan meghatározható. Az ilyen leállási feltétel - azaz
töréspont (angolul breakpoint) - a programban több is elhelyezhető.

103.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Assemble menü parancsai:

Assemble Assembler forráskód beírása


Disassemble screen Kódból visszafordított assembler forrás képernyőre írása
Disassemble PRN Kódból visszafordított assemblerforrás nyomtatóra
Move code memory Program memória átmozgatása
Fill code memory Program memória feltöltése

A fejlesztői munka során gyakori, hogy egy gépi kódú programrészlet működését kell megérteni. A
gépi kódból az utasítások visszafejtése, egy aránylag egyszerűen programozható tevékenység.
Lényegében a fordítóprogram (az assembler) működésénél leírtak "visszafelé történő" végrehajtására,
sőt ennél egy kicsit egyszerűbb műveletre kell gondolni. Az assembler ugyanis az állandó és a változó
szimbólumtáblát is kezeli, vagyis a felhasználó által definiált szimbólumok értékeit nyilván kell
tartania és a fordítás során a keletkező gépi kódba ezt be kell szerkesztenie.

A visszafordítás (a disassemblálás) során csak az állandó szimbólumtáblát kezeljük. Az operandus


mezőben szereplő értékeket nem szimbolikusan, hanem abszolút formában, hexadecimális számként
jelezzük ki. A visszafordító program működése tehát viszonylag egyszerű. Az első (vagy első két)
bájtból megállapítja, hogy milyen utasításról van szó, a táblázat alapján kiírja a mnemonikját, értelmezi
és visszafordítja az operandus mezőben szereplő értéket.

A probléma azonban ott kezdődik, ha nem tudjuk, hogy melyik az utasítás első bájtja. Ugyanez az eset
áll elő akkor is, ha ismerjük ugyan a program kezdetét, de a program utasításai között adatterület is
elhelyezkedik. Mindkét eset azt eredményezi, hogy a visszafordító program adatot értelmez
utasításként, és így hibásan fordít vissza. Ezért minden visszafordítást kritikával kell fogadnunk.
Ellenőriznünk kell, hogy nem tévedt-e el a visszafejtő program. Például gyakran előfordul, hogy egy
programrészben egymás után sok MOV utasítás szerepel. Ez a terület szinte biztosan nem programot
tartalmaz, hanem szöveget, mivel az MOV utasítás kódjai éppen az ASCII kódtáblában értelmezett
kódok tartományába esnek. Ennek gyors ellenőrzésére a legtöbb visszafejtő program egyszerű
lehetőséget biztosít azzal, hogy a visszafejtett listán a bájtoknak megfelelő ASCII kódot is megjeleníti,
a nem ábrázolható kódokat egy "."-al jelezve.

A tapasztalat azt mutatja, hogy a visszafordítás az adatterület vége után 5-6 bájttal helyreáll. Ez annak
köszönhető, hogy az MCS-51 utasításai között aránylag sok az egybájtos utasítás. Egy ilyen területre
"ráfutva" a visszafordítás ismét helyes lesz. Mivel a maximális utasításhossz négy bájt lehet, ezért
104.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

elegendő három egymást követő egybájtos utasítás ahhoz, hogy a "tévelygés" megszűnjön. Igényesebb
visszafejtők, ha előre megadjuk, akkor a táblázatos részt nem utasításként, hanem táblázatként adják
vissza a listában. Másik fejlett szolgáltatásuk abban áll, hogy a visszafejtett listát--ami tulajdonképpen
egy szövegfájl--képes a rendszer szövegszerkesztője fogadni, és ebből a visszafejtett listából fordítható
forrásnyelvi listát készíteni.

Options menü parancsai:


Szimulálandó processzortípus kiválasztása
MCU 8051/8031
MCU 8052/8032
MCU 83C552/80C552
MCU 80515/80535
MCU 80C517/80C537
Reset mikrocontroller Kontroller RESET - elése
80C552 Watchdog en. 80c552 Watchdog áramkörének engedélyezése
80C517 data pointer 80c517 adatmutatójának beállítása (mivel több van)
80C517 PE#/SWDT-pin láb beállítása
A/D - Converter voltage A/D átalakító feszültsége - itt adhatók meg a bemeneti
feszültségek értékei.
Ports for log file Portok naplózása
Serial I/O ASCII a soros vonal bájtjainak ASCII alakja

Az Intel hexa formátum


Az Intel hexa formátumnál a program gépi kódú részét rekordokba szervezik. Egy rekord változó
hosszúságú lehet.

A rekordban az első mező a rekordjelző mező (Record Mark Field). Ez a mező jelzi a rekord
kezdetét és egy ASCII kettőspontot tartalmaz (:).

A második mező a rekordhossz mező (Record Length Field). Ez a mező két ASCII karaktert
tartalmaz, melyek jelzik a rekordban lévő adatbájtok számát. A hexadecimálisan adott adatbájtok
számát két ASCII karakterré konvertálva adódik ki a mező két karaktere, a magasabb helyiértékű digit
szerepel előbb. Egy rekordban maximálisan 255 adatbájt lehet.

A harmadik mező a betöltési cím mező (Load Address Field). Ez a mező négy ASCII karaktert
tartalmaz, a rekord hexadecimálisan adott betöltési címének ASCII karakterré konvertált értékét az

105.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

alábbi sorrendben: a cím felső bájtjának magasabb helyiértékű digitje, a cím felső bájtjának
alacsonyabb helyiértékű digitje, a cím alsó bájtjának magasabb helyiértékű digitje, a cím alsó bájtjának
alacsonyabb helyiértékű digitje. A rekordban lévő első adatbájt a betöltési címre töltődik, az utána
következő adatbájtok a sorban következő címekre. A fájlvége (End Of File, EOF) rekordban ez a mező
négy ASCII nullát tartalmaz vagy a program kezdőcímét.

A negyedik mező a rekord típus mező (Record Type Field). A rekord típus adatrekord esetén 00,
fájlvége rekord esetén 01. Ez a mező két ASCII karaktert tartalmaz, a rekord típus ASCII karaktereit, a
magasabb helyiértékű digit szerepel előbb.

Az ötödik mező az adat mező (Data Field). Ez a mező tartalmazza az aktuális adatokat két-két ASCII
karakterré konvertálva, a magasabb helyiértékű digit szerepel előbb. A fájlvége rekordban nincs adat
mező.

Az utolsó mező az ellenőrző összeg mező (Checksum Field). Az ellenőrző összeg a második,
harmadik, negyedik és az ötödik mező hexadecimális bájtjainak 8 bitre csonkított összegének kettes
komplemens - e. Az így kapott összeget két ASCII karakterré konvertálva kapjuk a mező két
karakterét, a magasabb helyiértékű digit szerepel előbb.

A leírásból is látható, hogy egy Intel hexa formátumú fájl egy szöveges (ASCII) fájl, így pl. egy
szövegszerkesztő vagy listázó program segítségével megvizsgálhatjuk a tartalmát. Példa Intel hexa
formátumra:

:10200000455A5420455244454D455320564F4C5453
:0B201000204D454746454A54454E49C7
:00000001FF
A leíráshoz kapcsolódva, az első sor mezői:
1. 2. 3. 4. 5. 6.

: 10 2000 00 455A5420455244454D455320564F4C54 53

106.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

8.5. A monitorprogram parancsainak részletes leírása

G – Go form address – Adott címtő történő felhasználói programfuttatás


„Go form address” menü segítségével felhasználói programot futtathatunk a programmemória általunk
megadott kezdőcíméről.

· A „G” billentyű lenyomása után a képernyőn a következő felirat olvasható: „552>GO FROM
ADDRESS:”.
· Ezt követően be kell írnunk azt a memóriacímet – négy karakteres hexadecimális szám
formájában (post-, vagy prefix nélkül) - ahol a felhasználói programunk kezdő utasítása
található.
· Hibás beírást a BACKSPACE gomb segítségével korrigálhatjuk.
· ESC gomb leütésével léphetünk vissza a főmenübe.
· Az ENTER gomb megnyomását követően az ugrási parancs végrehajtódik, azaz a
monitorprogram átadja a vezérlést az általunk előzőleg begépelt memóriacímen található
felhasználói programnak.
U – Unassembler – Programkód visszafejtő
„Unassembler” parancs segítségével a kódmemória tartalmát utasítás mnemonic-os szintaktikákra
fejthetjük vissza.

· Az „U” billentyű lenyomása után a képernyőn a következő felirat jelenik meg:


„552>UNASSEMBLER FROM ADDRESS:”.
· Ezt követően be kell írnunk azt a memória kezdőcímet, melyről vissza szeretnénk fejteni a
kódmemória.
· Az ENTER gomb megnyomását követően a képernyőn megjelenik az első visszafejtett
utasítás.
Az utasítássor a következő adatokat tartalmazza:

· Utasítás kezdőcíme.
· Az utasítást tartalmazó byte-ok hexadecimális formában.
· Az utasítás mnemonik és paraméterk.
Azoknál az utasításoknál melyek SFR byte-okra vagy bit-ekre hivatkoznak nem a hivatkozási cím
jelenik meg, hanem azon a memória területre vonatkozó SFR elnevezés.

Az utasítássoron kívül egy segítségsor is láthatóvá válik, mely azokat az alparancsokat tartalmazza,
amelyeket az Unassembler parancson belül használhatunk. Ezek a parancsok a következők:

· ENTER vagy N billentyű – következő utasítás megjelenítése


· A billentyű – új kezdőcím megadása
· ESC vagy Q billentyű – kilépés az Unassebler-ből, visszatérés a főmenübe.

107.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

D – Display memory – Memóriaterület listáztatás

„Display memory” parancs segítségével a mikrokontroller memóriaterületeinek (DATA, XDATA,


CODE és SFR) aktuális tartalmát jeleníthetjük meg.

· A „D” billentyű lenyomása után a képernyőn a következő felirat olvasható: „552>DISPLAY


MEMORY ([D]-Data, [X]-Xdata, [C]-Code, [S]-SFRs)” .
· Ezt követően a D, X, C vagy az S billentyű lenyomásával választhatjuk ki memóriaterületet.
· A memória terület kiválasztása után a program bekéri a „MEMORY FROM ADDRESS:”
felirattal a listázandó memória kezdőcímét.
· A kiválasztott memóriaterület fél-laponként, azaz 128 byte-ként jelenik meg.
A megjelenő táblázat három részre bontható: Baloldalon a memória címek olvashatók, középen a
memóriacímeken található byte-ok értékei és végül jobb oldalon a bájtok értékéhez rendelt ASCII
karakterkészlet betűjele.

Ebben az esetben is egy segítségsor áll a rendelkezésünkre, mely azokat az alparancsokat tartalmazza,
melyeket a memórialistázás közben használhatunk. Ezek a parancsok a következők:

· ENTER vagy N billentyű – következő fél-lap megjelenítése


· A billentyű – új kezdőcím megadása
· ESC vagy Q billentyű – kilépés a memórialistázásból, visszatérés a főmenübe.
Ha az SFR memóriaterületet kilistáztatását választjuk akkor a kezdő memóriacím bekérése nélkül
egyszerre jelenik meg a 80C552 mikrokontroller által használt összes, 56 SFR. Az SFR-ek listáztatása
után a program automatikusan visszatér a monitorprogram főmenüjébe.

M – Modify memory – Memóriatartalom megváltoztatása

A „Modify memory” parancs segítségével lehetőségünk nyílik adott memóriacímtől kezdődően a


memóriaterület megváltoztatására.

· Az „M” billentyű lenyomása után a képernyőn a következő felirat olvasható: „552>MODIFY


MEMORY ([D]-Data, [X]-Xdata, [S]-SFRs):”.
· Ezt követően a D, X vagy az S billentyű lenyomásával választhatjuk ki, hogy melyik
memóriaterületet szeretnénk módosítani.
· A memória terület kiválasztása után a program bekéri módosítandó memória kezdőcímét.
· Kivételt jelent, ha az SFR memóriaterületet szeretnénk módosítani. Ebben az esetben a
következő felirat jelenik meg: „SFR (NAME or ADDRESS):”. Igy az SFR nevével, vagy a

108.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

címével választhatunk. (Nem létező SFR név berásakor, a program „!Error: Invalid SFR
name.” üzenet kiírása után visszalép a főmenübe. Abban az esetben, ha Nem létező SFR
memóriacímet adunk meg, akkor a címhez felülről legközelebb álló SFR jelenik meg.)
· Ezek után byte-okként van lehetőségünk a memória tartalmának megváltoztatására. Képernyőn
megjelenik a módosításra kerülő byte memóriacíme, (SFR esetén a megnevezése is), a
jelenlegi értéke, és a „New value:” szövegrészahova írhatjuk az új értéket.
· A modosítás végrehajtása két módon nyugtázható:
· Az ENTER billentyű leütésével beíródik az új érték, és a program felkínálja a
következő című memóriahely módosítását. Ezt akkor használhatjuk, ha pl egy
táblázatot töltünk ki. Amikor új érték megadása nélkül nyomjuk le az ENTER
billentyűt, akkor a jelenlegi memóriacím tartalmának módosítás nélkül a következő
memóriacímre ugrik a program.
· A SPACE billentyű leütésével beíródik az új érték, de a program ugyanazon című
memóriahely további módosítását kínálja fel. Ezt pl. egy adott memóriába ágyazott
perifériára történő különböző értékrk kiiratásakor használjuk.
· Az ESC billentyű segítségével térhetünk vissza a főmenübe.

C – Copy memory – Memóriaterület másolása

„Copy memory” parancs segítségével a mikrogép egy adott memóriaterületét másolhatjuk át egy
másik memóriaterületre vagy terminálprogramon keresztül egy külső állományba.

· A „C” billentyű lenyomása után a képernyőn a következő felirat olvasható: „552>COPY


MEMORY FROM ([D]-Data, [X]-Xdata, [C]-Code):”.
· Ezt követően a D, X vagy a C billentyű lenyomásával választhatjuk ki, melyik
memóriaterületről szeretnénk másolni.
· A memória terület kiválasztása után a program bekéri „forrásterület” kezdőcímét, majd a
végcímét (A végcímként megadott byte is átmásolásra kerül.).
· A „COPY MEMORY TO ([D]-Data, [X]-Xdata, [F]-File):” szöveg megjelenése után D, X
vagy a F billentyű lenyomásával választhatjuk ki, azt a memóriaterületet vagy állományt ahova
másolni szeretnénk.
· Ha memóriaterületre másolunk, akkor a program bekéri a „célterület” kezdőcímét.
· Ha célterületként állományt választunk ki, akkor a program először a célállomány nevét
kéri be, mely maximálisan 8+3 karakter hosszúságú lehet, majd a monitorprogram

109.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

átadja a vezérlést a terminálprogramnak. Sikeres másolás esetén a monitorprogram


„OK.” felirattal tér vissza a főmenübe.

Hibalehetőségek:
Ha forrásterület megadása esetén nagyobb kezdőcímet adunk meg mind végcímet, akkor a moni-
torprogram a következő hibaüzenettel tér vissza: „!Error : Start address is greater then stop address.”

Ha kiválasztott forrásterület nagyobb, mint a fennmaradó célterület nagysága akkor a program a


következő hibaüzenettel tér vissza: „!Error : Source is bigger then target space.”

Abban az esetben, ha célterületnek állományt választunk, és a megjelenő terminálprogram


dialógusablakában a CANCEL gombra kattintva leállítjuk a másolást, akkor „Canceled.” felirattal tér
vissza a monitorprogram a főmenübe.

F – Fill memory – Memóriaterület kitöltése

A „Fill memory” parancs segítségével lehetőségünk nyílik adott memóriacímtől kezdődően a


memóriaterületet egy adattal feltölteni.

· Az „F” billentyű lenyomása után a képernyőn a következő felirat olvasható: „552>FILL


MEMORY ([D]-Data, [X]-Xdata):”.
· Ezt követően a D vagy az X billentyű lenyomásával választhatjuk ki, memóriaterületet.
· A memória terület kiválasztása után a program bekéri „forrásterület” kezdőcímét, majd a
végcímét (A végcímként megadott byte is módosításra kerül.).
· A „FILL MEMORY WITH CHAR:” szövegrész megjelenése után kell feltöltő adat értékét
megadni
Sikeres feltöltés befejeztével a monitorprogram „OK.” felirattal tér vissza a főmenübe. Ha
memóriaterület megadása esetén nagyobb kezdőcímet adtunk meg mind végcímet, akkor a
monitorprogram a következő hibaüzenettel tér vissza: „!Error : Start address is greater then stop
address.”

I – Inputs monitoring – Bemenetek folyamatos figyelése

„Inputs monitoring” parancs a mikrokontroller egy kiválasztott port-jára, vagy analóg bemenetére,
illetve egy memóriába ágyazott bemeneti perifériára jutó jel folyamatos megfigyelésére alkalmas.

· Az „I” billentyű lenyomása után a képernyőn a következő felirat jelenik meg:


„552>MONITOR ([P]-Ports, [A]-Analog inputs, [X]-Xdata peripheras):”.

110.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· Ezt követően a P, A vagy az X billentyű lenyomásával választhatjuk ki, a folyamatosan


figyelni kívánt bemenet-tipust.
· Port kiválasztásakor a program a következő szöveggel: „DISPLAY PORT WITH NUMBER
(0-5):” kéri a port számát.
· Ezt követően megjelenik a bemeneti érték bináris és hexadecimális formában.
· analóg bemenet választásakor, akkor a következő sorban megjelenek az analóg bemenetek
nevei, és alattuk pedig az aktuális 10 bites értékének hexadecimális (0h – 3FFh tartomány)
formában.
· Memóriába ágyazott periféria választásakor a „DISPLAY BYTE IN XDATA MEMORY ON
ADDRESS:” szöveggel kéri a periféria címét.
· Ezt követően megjelenik a bemeneti érték bináris és hexadecimális formában.
· A kiválasztott bemenet értékének folyamatos kijelzése ESC vagy a Q billentyű lenyomásáig
tart. Ennek hatására a program visszalép a főmenübe.
H – Help – Segítség, felhasználói parancsok rövid összefoglalója

Az „H” billentyű lenyomása után a képernyőn egy táblázat jelenik meg, mely két fő részből tevődik
össze. A táblázat bal oldalán a mikrokontrolleres gyakorló memória kiosztása találhatjuk meg, míg a
táblázat jobb oldalán a főmenüben használható parancsok rövid összefoglalását olvashatjuk.

S – Step form address – Adott címtő történő lépésenkénti felhasználói programfuttatás

„Step form address” menü segítségével felhasználói programot futtathatunk lépésenként egy általunk
megadott programmemória kezdőcíméről. Lépésenkénti programfuttatás esetén lehetőségünk van a
memória teljes áttekintésére, megváltoztatására, végrehajtásra kerülő utasítások böngészésére,
töréspont elhelyezésére.

· A „S” billentyű lenyomása után a képernyőn a következő felirat olvasható: „552>STEP FROM
ADDRESS:”.
· A kettőspont után be kell írnunk a felhasználói program ellenörzésének kezdő címét.
· A kezdőcím begépelése után a monitorprogram az általunk előbb meghatározott címre ugrik,
és egy teljes képernyős felületet biztosít a felhasználó számára a a lépésenkénti, illetve
töréspontos futtatáshoz közbeni memória, periféria ellenör-zésekhez.
Felhasználói felület alkotóelemei (40.ábra):

· A képernyő tetején egy segítségsor látható, mely a főbb parancsokat foglalja össze.
· Következő sorban az akkumlátor, B, DPTR regiszter, és a PSW regiszter bitekre lebontva
látható.
111.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· Alatta lévő képernyőrész bal oldalán a futtatandó program utasításai láthatók, míg jobb oldalon
R0 – R7 regiszterek, és a PC értéke.
· A képernyő alsó felét egy multifunkcionális ablak foglalja el, mely bejelentkezéskor a
lépésenkénti futtatásnál használható parancsok összefoglalását tartalmazza. Ezen a
képernyőterületen van lehetőségünk megjelenítetni a mikrokontrolleres gyakorló
memóriaterületeit.
· Legalsó sorban található a parancsbeviteli mező. Ebben a sorban lehet megadni az egyes
parancsok paramétereit.

40. ábra

8.5.1. Lépésenkénti futtatás parancsai:


BILLENTYŰ ANGOL MEGNEVEZÉS PARANCS LEÍRÁS
ENTER vagy N Next step Következő utasítás
ESC vagy Q Quit Vissza a főmenübe
G Goto to address Memóriacímig történő futtatás
S display SFRs SFR regiszterek megjelenítése
D display DATA memory DATA memória megjelenítése
X display XDATA memory XDATA memória megjelenítése
C display CODE memory CODE memória megjelenítése
M Modify memory Memóriaterület értékének megváltoztatása
A „display memory” Address aktuális memóriaterület kezdőcímének megadás
U page Up memory aktuális memóriaterület felfelé lapozása
O page dOwn memory aktuális memóriaterület lefelé lapozása
W page doWn dissasembly futtatandó program utasításainak felfelé lapozása
R Reset dissasembly address futtatandó program utasításlistájának alaphelyzetbe állítása
H this Help segítségablak megjelenítése

112.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Lépésenként (utasításokként) történő programvégrehajtás

ENTER vagy N billentyű lenyomását követően a monitorprogram visszaadja a vezérlést a felhasználói


programnak. Az éppen soron következő utasítás végrehajtása után ismét a monitorprogramhoz kerül a
vezérlés. A képernyőn lévő adatok minden egyes lépés után frissítésre kerülnek.

Vissza a főmenübe

ESC vagy Q (Quit) billentyű lenyomásával a felhasználói programfuttatás megszakad. A


monitorprogram visszatér a főmenübe.

Memóriacímig – töréspontig - történő futtatás

A lépésenkénti futtatás közben mód van egy megadott című utasításig (töréspont) folytonosan futtatni a
felhasználói programot, majd innen folytatni az utasításonkénti működtetést. Ezt a G – Goto to
address – parancs valósítja meg.

· G billentyű lenyomása után a parancsbeviteli mezőben a „GO TO ADDRESS:” szöveg jelenik


meg.

· majd be kell írnunk, hogy melyik memóriacímig szeretnénk a felhasználói programunkat


egyfolytában futtatni. Ezt követően a megadott memóriacímig fog a felhasználói programunk
folyamatosan futni, majd a törésponti cím elérésénél újból visszaveszi a vezérlést a
monitorprogram.

Ha töréspont előtt meg szeretnénk szakítani a programunk futását, akkor ESC gomb megnyomásával
bármikor visszakerülhetünk a monitorprogramba.

Memóriaterületek aktuális értékeinek megtekintése

Minden lépés végrehajtása után megtekinthetőka a különböző memóriaterületekeken tárolt aktuális


értékek. Igy ellenőrizhetőek, hogy a programunk valóban végrehajtja-e az esetleges módosításokat. Ezt
szolgálják

· az S, D, X, C – display SFRs or DATA, XDATA, CODE memory – parancsok.

A programellenörzés közben bármelyik memóriaértéket megváltoztathatjuk az M – Modify memory –


paranccsal

· M billentyű lenyomását követően a parancsbeviteli mezőben a következő szöveg válik


olvashatóvá: „MODIFY ([D]-Data, [X]-Xdata, [S]-SFR, [R]-Rx, [P]-PC):”.

113.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· Ezt követően a D, X, S, R vagy a P billentyű segítségével adhatjuk meg, hogy a DATA vagy
XDATA memóriaterületen lévő byte-t, SFR regisztert, R0-R7 regiszter valamelyikét vagy a
PROGRAM COUNTER értékét szeretnénk megváltoztatni.

§ Ha a DATA vagy az XDATA memóriaterületet választjuk, akkor meg kell adnunk a


módosítani kívánt byte memóriacímét, és azt követően az új értékét.

§ Ha SFR-t szeretnénk módosítani, akkor meg kell adnunk a módosítani kívánt SFR
nevét vagy memóriacímét, és ezt követően az új értékét.

§ Ha Rx regisztercsaládból szeretnénk egy regisztert módosítani, akkor meg kell


adnunk a módosítani kívánt regiszter számát és az új értékét.

§ A PC módosítása esetében meg kell adnunk a programszámláló négyjegyű új értékét.

A képernyőn csak kisebb terület jeleníthető meg a vizsgált memóriából. A lapozást segítik a következő
parancsok, amelyek csak kilistázott memóriaértékeknél hatásosak:

A – „display memory” Address – aktuális memóriaterület kezdőcímének megadás


A „display memory” Address parancs segítségével megadhatjuk egy újabb kezdőcím,től történő
listázást.

U, O – page Up or dOwn memory - aktuális memóriaterület felfelé vagy lefelé lapozása


Az U, O billentyűvel felfelé vagy lefelé lapozhatunk az éppen a kilistázott memóriába.

W – page doWn dissasembly - futtatandó program utasításainak felfelé lapozása


A W billentyű segítségével a képernyő bal-felső részén található programlistában lapozhatunk előre.

R – Reset dissasembly address - futtatandó program utasításlistájának alaphelyzetbe állítása


Az R billentyű segítségével a képernyő bal-felső részén található programlistát állíthatjuk
alaphelyzetbe.

H – this Help – Segítő-ablak megjelenítése

Lépésenkénti futtatás feltételei.


A monitorprogram software-s lépésenkénti futtatást alkalmaz, mivel a 80C552 mikrokontroller nem
rendelkezik hardware-s töréspont funkcióval. A program a mikrokontroller soros megszakítását
használja a lépésenkénti futtatás lebonyolítására. Ebből adódóan a felhasználó által írt programot csak
bizonyos megkötések mellet képes a monitorprogram lépésenként futtatni.

114.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Mielőtt a monitorprogram elindítaná a felhasználó által írt programot, 1-be állítja a soros port TI bit-
jét, a soros port megszakításának prioritás bit-jét (PS0 = 1), a soros megszakítás engedélyező bit-jét
(ES0 = 1), és végül a globális megszakítás engedélyező bit-et (EA = 1).

Ha ezeket bit-eket a felhasználói program megváltoztatja, abban az esetben a monitorprogram


elvesztheti a felügyeletet a futtatott program felett. Ilyen esetben csak a futatott program utasításai
fognak végrehajtódni, így nincs lehetőségünk visszatérni a monitorprogramba csak reset feltétel
kiadásával.

A tesztelésre szánt program nem használhatja a hármas számú registerbank-ot, illetve az XDATA
memória 3E00 – 3FFF területét, mert ellenkező esetben instabil futás történhet. Amennyiben az
általunk futtatott program hármas registerbank-ra vált, akkor a monitorprogram egy villogó
felkiáltójellel jelzi ezt a felhasználó számára az aktuális registerbank érték mellet.

Ügyelni kell arra, hogy a futatott program és a monitorprogram ugyanazt a vermet használja. A
relokálható szegmens-megadásoknál biztosítani kell, hogy a verem (stack) a bank regiszterek és a
használt belső memória feletti címen kezdődjék. Ennek egyik módja, hogy a verem részére legalább
20h memóriaterületet figlaltaunk le.

Töréspontos futatás esetén a monitorprogram minden egyes utasítás végrehajtása után visszatér a
monitorprogramba, és ellenőrzi hogy a futatott program el ért-e a töréspontot vagy nem. Ez program
futásának a lassulását okozza. Fontos tudni, hogy töréspontos programfuttatás alatt nem valós idejű a
program végrehajtása. Ilyenkor a program futása nagyságrendekkel hosszabb időt vesz igénybe, mint
tiszta hardware-s futás esetén.

Mivel a lépésenkénti ellenőrzés megszakításos működtetéssel dolgozik, ezért megszakításokat is


használó programok valós idejű tesztelése ily módon nem ajánlott. Az ellenőrzés különböző
beállításokkal lehetséges, de az oktatásban erre nem térünk ki, s ezért itt sem adunk használati utasítás
erre.

Memóriatartalom letöltése a mikrokontrollerbe


Memóriarész letöltése a mikrokontrollerbe a monitorprogram és a terminálprogram együttműködésével
történik. Letöltéshez használt protokoll INTEL HEXA adatformátumon alapul. A letöltés
„handshaking”, azaz kézfogásos kommunikációval történik. A terminálprogram leküld a
monitorprogramnak egy teljes INTEL HEXA sort (kezdő „:” karakterrel együtt). A monitorprogram
értelmezi a beérkezett sor, majd visszaválaszol a terminálprogramnak. Három féle válasz lehetséges:

· „O” karakter: minden rendben, a monitorprogram késszen áll a következő sor vételére
(OK.).
115.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· „E” karakter: LRC (longitudinal redundancy check – hosszirányú-redundancia


ellenőrzés) hiba.
· „T” karakter: Ismeretlen rekord típus.
Mind a három válaszkarakter után a monitorprogram készen áll a következő sor vételére. Kivételt
jelenet ez alól az „állomány vége” típusú rekordot, mely után a monitorprogram „OK.” kiírással
visszalép a főmenübe.

Fontos még megjegyezni, hogy a főmenüben történő „:” karakter lenyomását a monitorprogram
letöltési procedúra kezdetének értelmezi. Ebben az esetbe a felhasználó számára, visszajelzés
hiányában, úgy tűnhet, hogy megállt reagálni a monitorprogram.

Az Intel hexa formátum (3.táblázat)


Az Intel hexa formátumnál az adatok rekordokba szerveződnek. Egy rekord változó hosszúságú lehet.

1. 2. 3. 4. 5. 6.
Rekord Record Load Record
Record Checksum
megneve- Mark Address Type Data Field
Length Field Field
zése Field Field Field
függ a 2. mező
Hosszúság 1 byte 2 byte 4 byte 2 byte 2 byte
tartalmától
455A542045544454D45
Példa : 10 2000 00 53
5320564F4C54

3.táblázat

A rekordban az első mező a rekordjelző mező (Record Mark Field). Ez a mező jelzi a rekord
kezdetét. A rekordjelző mező egy ASCII kettőspont karakterből áll.

Második mező a rekordhossz mező (Record Length Field). Ez a mező két ASCII karaktert tartalmaz,
melyek jelzik a rekordban lévő adatbájtok számát. Az adatbájtok számát két ASCII karakterré
konvertálva adódik ki a mező két karaktere, mely egy hexadecimális szám. A magasabb helyértékű
számjegy szerepel előbb. Ebből adódik, hogy egy rekord maximálisan 255 adatbájt hosszúságú lehet.

Harmadik mező a betöltési cím mező (Load Address Field). Ez a mező négy ASCII karaktert
tartalmaz. A négy karakter hexadecimális szám formájában tartalmazza az adott rekord betöltési
kezdőcímét. A állomány vége rekord esetén a címrekord vagy csak nullákat tartalmaz, vagy a program
kezdőcímét.

Negyedik mező a rekord típus mező (Record Type Field). A mező két karakterből áll, mely egy
hexadecimális számot határoz meg. Az Intel hexa alapformátum, csak két rekordtípust különböztet
meg:
116.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· 00 – Adat rekord (Data record)


· 01 – Állomány vége rekord (End Of File record)
Ötödik mező az adat mező (Data Field). Ez a mező tartalmazza a betöltendő adatokat két-két ASCII
karakteré konvertálva, melyek hexadecimális szám formájában mutatják a betöltendő byte-ok értékeit.
Állomány vége rekord esetén nincs adat mező.

Az utolsó mező az ellenőrző összeg mező (Checksum Field). Az ellenőrző összeg a második,
harmadik, negyedik és az ötödik mező hexadecimális byte-jainak nyolc bit-re csonkított összegének
kettes komplemense (LRC). Az így kapott hexadecimális összeget két ASCII karakterré konvertálva
tartalmazza a mező.

A leírásból is látható, hogy egy Intel hexa formátumú állomány egy szöveges ASCII állomány, így
például egy szövegszerkesztő vagy listázó program segítségével megvizsgálhatjuk a tartalmát.
Következő táblázat egy Intel hexa formátumú sort értelmez.

Memóriatartalom küldése a terminálprogramnak


A monitorprogram adat küldési protokoll segítésével teszi lehetővé, hogy egy memóriaterületet le
lehessen menteni számítógépen keresztül háttértárolóra. Ezt a lehetőséget a „Copy memory” parancs
biztosítja a felhasználó számára. Az adatküldési protokoll egyoldalú, az-az nincs visszajelzés a
terminálprogram oldaláról, hogy sikeres volt az adatfogadás vagy nem. Az adatküldési protokoll
kimondottan oktatási célra lett kifejlesztve. A protokoll egyszerűsége végett könnyű a protokollt
lekezelő program elkészítése, de pont a protokoll könnyűsége miatt zajérzékeny. Feltételezve, hogy a
monitorprogram oktatási intézményben kerül felhasználásra, ezért a zajból keletkezett hibák szinte
kizárhatók. Sebesség problémák fellépésétől is nyugodtan el tekinthetünk, hisz a fogadó oldalon lévő
PC sebessége többszöröse a küldő oldalon szereplő mikrokontroller sebességének.

A protokollt két részre bontható. Az első rész definiálja az adtafolyam típusát, majd a második rész a
küldeni kívánt adatokat tartalmazza.

Az protokoll egy ESC (¬), azaz 1Bh sorszámú ASCII karakterrel kezdődik, majd egy nagy „S”
betűvel folytatódik. E két karakter jelzi, a terminálprogramnak, hogy adat letöltés fog következni.

Második rész az állománynév megadására szolgál. Idézőjelek (22h ASCII számú karakter) közé
beszúrva áll módunkban megadni a terminálprogramnak, hogy milyen állománynévvel történjen az
adatfolyamunk mentése. Az állománynév megadása nem kötelező, csak választható opció.

Következő mező az adatfolyam típusát tartalmazza. Két adatfolyam típust definiál a protokoll:

117.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

· „B” – Byte – Az adatfolyam bármilyen karaktert tartalmazhat, nincs kiemelt stop karakter. Az
adatfolyam hosszúságát közvetlenül a „B” karakter után kell megadni, melyet „H” karakterrel
lezárt ASCII karakterből álló hexadecimális számsor határozza meg.
· „T” – Text – Az adatfolyamnak nincs előre definiált hossza. Az adatok végét egy EOT (End Of
Text), azaz 04h karakter jelzi.
Példák:
· Előre nem definiált adathossz mentése proba.txt állományba: •S”proba.txt”T
· 32 byte hosszúságú adattömb fejléce. Mentés proba2.txt állományba.: •S”proba2.txt”B20H
· Előre nem definiált adathossz. Állománynév nincs megadva.: •ST
· 128 byte hosszúságú adattömb fejléce. Állománynév nincs megadva.: ¬SB80H
A fejléc elküldése után a terminálprogram visszaválaszol a kérésre. Két válaszlehetőség lehetséges:

· „O” – Minden rendben, jöhetnek az adatok.


· „C” – A felhasználó visszautasította a kérést. Nem lehet adatokat menteni.
Pozitív válaszadás esetén a terminálprogram készen áll az adatsor fogadására, a mikrokontroller által
küldött adatok mentésre kerülnek a háttértárolóra.

118.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Az ANSI képernyő formázó kódok használata

A terminálprogram az ANSI kódokat értelmezi, és ennek megfelelően vezérli a képernyőt.

ANSI terminálutasítások leírása


UTASÍTÁS
UTASÍTÁS
SZINTAK- UTASÍTÁS LEÍRÁS
MEGNEVEZÉSE
TIKA
ESC[PL;PcH Kurzor helyének beállítása koordináták alapján.
Kurzor pozíció
Ha nincs paraméter megadva, kurzor a jobb felső
beállítás
sarokba kerül
ESC[PL;Pcf Kurzor pozíció Teljes mértékben hasonlóképpen működik mint
beállítás az előző parancs.
ESC[PnA Felfelé mozgatja a kurzort, a paraméterben
megadott sorok számával, úgy hogy a kurzor
Kurzor fel koordinátájának oszlopszámát nem változtatja
meg. Ha a kurzor a legfelső sorban van, a
terminál figyelmen kívül hagyja parancsot.
ESC[PnB Lefelé mozgatja a kurzort, a paraméterben
megadott sorok számával, úgy hogy a kurzor
Kurzor le koordinátájának oszlopszámát nem változtatja
meg. Ha a kurzor a legalsó sorban van, a terminál
figyelmen kívül hagyja parancsot.
ESC[PnC Jobbra mozgatja a kurzort, a paraméterben
megadott oszlopok számával, úgy hogy a kurzor
Kurzor előre koordinátájának sor számát nem változtatja meg.
Ha a kurzor a képernyő jobb oldalán van, a
terminál figyelmen kívül hagyja parancsot.
ESC[PnD Balra mozgatja a kurzort, a paraméterben
megadott oszlopok számával, úgy hogy a kurzor
Kurzor hátra koordinátájának sor számát nem változtatja meg.
Ha a kurzor a képernyő bal oldalán van, a
terminál figyelmen kívül hagyja parancsot.
ESC[s Elmentik a kurzor jelenlegi állását. A "Kurzor
Kurzor pozíció
pozíció visszaállítása" paranccsal lehet a kurzort
mentése
az elmentett pozícióra mozgatni.
ESC[u Kurzor pozíció A kurzor a "Kurzor pozíció mentése" parancs
visszaállítása által elmentett kurzorpozícióra ugrik.
ESC[2J Törli a képernyőt, és a kurzort a jobb felső
Képernyőtörlés
pozícióba (sor=0; oszlop=0) mozgatja.
ESC[K Törli az összes karaktereket a kurzor pozíciótól
Sortörlés számítva a sor végéig, beleértve a kurzor
pozícióján lévő karaktert is.
ESC[Ps;...;P Beállítja a szöveg megjelenésének típusát, színét,
sm és háttérszínét. Beállítás a következő grafikai
Grafikai üzemmód
üzemmód beállításáig változatlan marad. A
beállítása
paraméterek értelmezését a következő három
táblázat tartalmazza

119.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II

Minden ANSI parancs ESC (1Bh) karakterrel kezdődik.

ANSI Paraméterek

MEGNE-
LEÍRÁS
VEZÉS
Pn Numerikus paraméter tízes számrendszerben értelmezve.
Ps Funkcióválasztó számparaméter, mely tízes számrendszerben van értelmezve.
Több funkcióválasztó paraméter is megadható egymás után, melyeket
pontosvesszővel (;) kell elválasztani egymástól.
PL Sor paraméter. Kurzor sor paramétere, mely tízes számrendszerben van
értelmezve.
Pc Oszlop paraméter. Kurzor oszlop paramétere, mely tízes számrendszerben van
értelmezve.

Szöveg tulajdonságok

PS LEÍRÁS
0 Minden tulajdonság kikapcsolása
1 Magas intenzitás be
4 Aláhúzás be (csak fekete-fehér képernyő esetén)*
5 Villogás be
6 Inverz szín be
7 Rejtett be*

* A terminál program nem támogatja

A színkódok

PS szöveg szín PS háttér színn


30 Fekete 40 Fekete
31 Vörös 41 Vörös
32 Zöld 42 Zöld
33 Sárga 43 Sárga
34 Kék 44 Kék
35 Bíbor 45 Bíbor
36 Kékeszöld 46 Kékeszöld
37 Fehér 47 Fehér

120.oldal

You might also like