Professional Documents
Culture Documents
Előadás Anyag
Előadás Anyag
Zalotay Péter
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
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
6.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
7.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
1.5. A tápegység ( TE )
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
2. ábra
· 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
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.
10.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
· 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).
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).
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.
· á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.
12.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
5. ábra
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 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!
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.
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
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
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.
A teljes dekódolás hiánya miatt a RAM-ok minden bájtja két címen is hozzáférhető!!
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.
· 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ő.
· 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!
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é.
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
14. ábra
21.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
22.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
15. ábra
· 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
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á).
CY AC F0 RS1 RS0 OV - P
23.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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 ),
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.
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ó.
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
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.
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.
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 ).
· 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.
TMOD T1 T0
2.1.4.1.1.1. M1 C/T M1 M0
TCON
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.
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!)
28.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
18. ábra
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.
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.
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ó.
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.
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.
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 :
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.
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.
· Power Dawn ,
· És az Idle.
24. ábra
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.
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.
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 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.
37.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
38.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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.
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ő:
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 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.
40.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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
RET
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.
Kezdet: 2.sor:
_1sor: Ugrás.1:
foprog_2: Első sor:
42.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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:
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.
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 )
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.
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.
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
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.
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:
· 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
47.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
48.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
91 END
49.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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).
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.
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.
· ·63 egy-ciklusú,
· 46 két-ciklusú és
50.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
· 2 négy-ciklusú.
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.
· regiszter-,
· direkt-,
· indirekt-,
· közvetlen-,
· indirekt regiszter-
címzés.
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
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ő.
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.
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.
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.
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.
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.
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.
egy bitet, vagy bájtot visz át a belső memóriában lévő forrás-helyről a cél-helyre.
PUSH reg
POP reg
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
XCH A , mem
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.
ADD A , op2
ADDC A , op2
DA A
INC bájt
DEC bájt
SUBB A , op2
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.
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.
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
CLR bit
56.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
RLC A
RR A
RRC A
SWAP A
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.
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
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
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
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.
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.
JZ rel
ha az akkumulátor tartalma 0.
JNZ rel
JC rel
JNC rel
ha a Carry - Flag 0.
JB bit, rel
59.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
ö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.
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.
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.
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.
61.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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 szimulátorok (a program-szimulációhoz),
62.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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
· Műveleti blokk,
63.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
· Feltételes programugrás
· Összehasonlítás
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:
64.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
Miután minden szoftver ciklikus szervezésű, ezért ezt részletezzük. Minden programciklus alapvetően
a következő elemeket tartalmazza:
; 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
.
65.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
· majd-amíg...( do-while)
66.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
· alprogramok (szubrutinok)
67.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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)
25. ábra
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
27. ábra
69.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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
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.
6.4. A Linker
almenü megnyitása újabb választási lehetőségeket kínál, amelyeket a 32. ábra mutatja.
32. ábra
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!
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
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
36. ábra
37. ábra
· 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
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
;*************************************************** **
;* 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 *
;******************************************************
$NOMOD51
$NOLIST
$INCLUDE(C:\XE251\SEGEDLET\GYAK552.INC)
$LIST
XSEG AT 0C000H
RSEG VALTB
76.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
RSEG PROG
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
77.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
78.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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:
79.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
· A folyamatábra
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
;****************************************************
;* 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 *
;****************************************************
RSEG VALTB
81.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
RSEG PROG
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
82.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
; 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
83.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
7. A programtesztelés
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:
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.
84.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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
· 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:
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
39. ábra
87.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
88.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
8. Függelék
8.1. Assembler direktívák
89.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
90.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
91.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
A lista minden oldalán a fejlécbe dátum írása. A dátum maximálisan 9 betűs lehet.
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.
92.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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)
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 )
Alapértelmezés: SYMBOLS
pl.:
$ SYMBOLS
$ NOSB
93.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
Alapértelmezés: MOD51
pl.:
$ NOMOD51
COND/NOCOND (rövidítés: nincs)
Alapértelmezés: COND
pl.:
$COND
$ NOCOND
MACRO/NOMACRO (rövidítés :nincs)
Alapértelmezés: MACRO
pl.:
$MACRO
$ NOMACRO
Alapértelmezés: REGISTERBANK(0)
pl.:
$ REGISTERBANK (0,1)
$ NORB
XREF/NOXREF (rövidítve: XR/NOXR )
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 )
pl.:
$ EJ
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)
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 )
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
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
97.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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
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
89.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
101.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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
102.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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
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 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.
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
· 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.
· 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:
107.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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:
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.
„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.
109.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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.”
„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.
110.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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.
„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
112.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
Vissza a főmenübe
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.
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.
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 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.
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:
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).
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.
· „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
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.
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
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.
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:
118.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
119.oldal
Zalotay Péter: DIGITÁLIS TECHNIKA II
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 színkódok
120.oldal