jelfeldolgozás a közlekedésben · 2018.02.14. bevezetés az assembly nyelvbe 4 memóriacímzési...

26
Jelfeldolgozás a közlekedésben 2017/2018 II. félév Bevezetés az assembly nyelvbe

Upload: others

Post on 17-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

Jelfeldolgozás a közlekedésben

2017/2018 II. félév

Bevezetés az assembly nyelvbe

Page 2: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 2

Makro utasítások felépítése - emlékeztető

• Általános forma: operation code operands

• (Általános forma: instruction destination, source)

• 3 című utasítás:

• 1. operandus, 2. operandus, eredmény címe

• 2 című utasítás :

• 1. operandus, 2. operandus, eredmény az első operandus helyén

• 1 című utasítás:

• 1. operandus, eredmény az operandusban

Page 3: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 3

Memóriacímzési módok

Addressing Modes Címzési mód Instruction /Utasítás

Register Regiszter MOV A, B

Direct Direkt – pl. SFR regiszterek MOV 30H,A

IndirectIndirekt – pl. felső 128 B

RAM, pointerADD A,@R0

Immediate Constant Konstans/Literál ADD A,#0x80

Relative Relatív SJMP AHEAD

Absolute Abszolút AJMP BACK

Long Távoli LJMP FAR_AHEAD

Indexed Indexelt MOVC A,@A+DPTR

Page 4: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 4

Memóriacímzési módok

Regiszter címzés

Pl. MOV P5, A F5 85 Legyen <A> = 2CH, ez lesz áttöltve a P5 portra.

Direkt címzés

Pl. MOV A, 20H E5 20 Legyen <20H> = B7H, ez lesz áttöltve az akkumulátorba.

Indirekt címzés - pointer

Pl. MOV @R0,A F6Legyen <R0> = 82H; <A> = A9H;Eredmény : 82H című rekesz tartalma A9H lesz.Fontos : indirekt címzéshez csak az R0, R1 és DPTR használható.

Page 5: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 5

Memóriacímzési módok

Külső memória (64 k) elérése:

Pl. MOVX A,@DPTR E0

Legyen <DPTR> = 1200H; <1200H> = C5H;

Eredmény : A = C5H lesz.

Indexelt címzés

Pl. MOVC A,@A+DPTR 02 80 02A kód szegmensnek (ROM) az <A> + DPTR című memória értéke

lesz áttöltve az akkumulátorba.Az akkumulátor index regiszterként használatosCiklus szervezéséhez (vagy táblázat kezeléséhez) használjuk

Page 6: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 6

Memóriacímzési módok

Konstans/Literál címzés

Pl. ADD A,#25 24 19Legyen <A> = 20H; Az eredmény A = 39H lesz.Legyen <A> = F0H; Az eredmény A = 09H és CY=1 lesz.

Relatív címzés

Pl. SJMP #25 80 17 és nem 19 !Előre ugrik 23-at a jelen utasítás (2 byte) végétől!

Pl. SJMP #-20 80 EA -16H és nem -14H !Visszafelé ugrik 22-őt a jelen utasítás (2 byte) végétől!

Az ugrás -128 .. 127 címtartományban lehet (8 bit komplemens)Ugró és feltételes ugró utasítások használják (CJNE, DJNZ, JZ stb.)

Page 7: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 7

Memóriacímzési módok

Abszolút címzés

Pl. AJMP #200H 02 00Előre ugrik a 200H címre

Az ugrás 0..2047 (0..=7FFH) címtartományban lehet (11 bit)Az AJMP és ACALL utasítások használják

Távoli címzés

Pl. LJMP #8002H 02 80 02Előre ugrik a 8002H címre

A cím 16 bit, ugrás 0..=FFFFH címtartományban lehet (16 bit)Az LJMP és LCALL utasítások használják

Page 8: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 8

Utasítás csoportok - emlékezetető

• Arithmetic Operations - Aritmetikai

• Logical Operations - Logikai

• Data Transfer Operations - Adatmozgatás

• Boolean Variable Op. - Bit szintű logika

• Program Branching Op. - Elágazások

• Általános forma: instruction destination, source

Page 9: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 9

Aritmetikai utasítások

Mnemonic Description Mnemonic Description

ADD A, Rn A = A + [Rn] INC A A = A + 1

ADD A, direct A = A + [direct memory] INC Rn [Rn] = [Rn] + 1

ADD A,@Ri A = A + [memory pointed to by Ri] INC direct [direct] = [direct] + 1

ADD A,#data A = A + immediate data INC @Ri [@Ri] = [@Ri] + 1

ADDC A,Rn A = A + [Rn] + CY DEC A A = A - 1

ADDC A, direct A = A + [direct memory] + CY DEC Rn [Rn] = [Rn] - 1

ADDC A,@Ri A = A + [memory pointed to by Ri] + CY DEC direct [direct] = [direct] - 1

ADDC A,#data A = A + immediate data + CY DEC @Ri [@Ri] = [@Ri] - 1

SUBB A,Rn A = A - [Rn] - CY MUL AB Multiply A & B

SUBB A, direct A = A - [direct memory] - CY DIV AB Divide A by B

SUBB A,@Ri A = A - [@Ri] - CY DA A Decimal adjust A

SUBB A,#data A = A - immediate data - CY

Page 10: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 10

Logikai utasítások

Mnemonic Description Mnemonic Description

ANL A, Rn A = A & [Rn] XRL A, Rn A = A XOR [Rn]

ANL A, direct A = A & [direct memory] XRL A, direct A = A XOR [direct memory]

ANL A,@Ri A = A & [memory pointed to by Ri] XRL A,@Ri A = A XOR [@Ri]

ANL A,#data A= A & immediate data XRL A,#data A = A XOR immediate da ta

ANL direct,A [direct] = [direct] & A XRL direct,A [direct] = [direct] XOR A

ANL direct,#data [direct] = [direct] & immediate data XRL direct,#data [direct] = [direct] XOR immediate data

ORL A, Rn A = A OR [Rn] CLR A Clear A

ORL A, direct A = A OR [direct] CPL A Complement A

ORL A,@Ri A = A OR [@Ri] RL A Rotate A left

ORL A,#data A = A OR immediate data RLC A Rotate A left (through C)

ORL direct,A [direct] = [direct] OR A RR A Rotate A right

ORL direct,#data [direct] = [direct] OR immediate data RRC A Rotate A right (through C)

SWAP A Swap nibbles

Page 11: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 11

Adat mozgató utasítások

Mnemonic Description

MOV @Ri, direct [@Ri] = [direct]

MOV @Ri, #data [@Ri] = immediate data

MOV DPTR, #data 16 [DPTR] = immediate data

MOVC A,@A+DPTR A = Code byte from [@A+DPTR]

MOVC A,@A+PC A = Code byte from [@A+PC]

MOVX A,@Ri A = Data byte from external ram [@Ri]

MOVX A,@DPTR A = Data byte from external ram [@DPTR]

MOVX @Ri, A External[@Ri] = A

MOVX @DPTR,A External[@DPTR] = A

PUSH direct Push into stack

POP direct Pop from stack

XCH A,Rn A = [Rn], [Rn] = A

XCH A, direct A = [direct], [direct] = A

XCH A, @Ri A = [@ Rn], [@Rn] = A

XCHD A,@Ri Exchange low order digits

Page 12: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 12

Bit vezérelt utasítások

Mnemonic Description

CLR C Clear CY

CLR bit Clear direct bit

SETB C Set CY

SETB bit Set direct bit

CPL C Complement CY

CPL bit Complement direct bit

ANL C,bit AND bit with CY

ANL C,/bit AND NOT bit with CY

ORL C,bit OR bit with CY

ORL C,/bit OR NOT bit with CY

MOV C,bit MOV bit to CY

MOV bit,C MOV CY to bit

JC rel Jump if CY set

JNC rel Jump if CY not set

JB bit,rel Jump if specified bit set

JNB bit,rel Jump if specified bit not set

JBC bit,rel if specified bit set then clear it and jump

Page 13: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 13

Elágazások

Mnemonic Description

ACALL addr11 Absolute subroutine call

LCALL addr16 Long subroutine call

RET Return from subroutine

RETI Return from interrupt

AJMP addr11 Absolute jump

LJMP addr16 Long jump

SJMP rel Short jump

JMP @A+DPTR Jump indirect

JZ rel Jump if A=0

JNZ rel Jump if A NOT=0

CJNE A,direct,rel

Compare and Jump if Not Equal CJNE A,#data,rel

CJNE Rn,#data,rel

CJNE @Ri,#data,rel

DJNZ Rn,relDecrement and Jump if Not Zero

DJNZ direct,rel

NOP No Operation

Page 14: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 14

8051 ASM alapstruktúrák 1.

Egyszerű elágazás (If-Then-Else)

If a=2 then

p5:=255

elsep5:=31;

cjne a,#2,else ; ha a<>2 ugrás az else-remov P5,#0xFF ; then ágsjmp forward

else:mov P5,#31 ; else ág

forward:

If r1>=r2 then

r2:=r2+1

elser2:=r2-1;

clr cmov a,r1subb a,r2 jc else ; Carry=0, ha r1>=r2

inc r2 ; then ágsjmp forward

else:dec r2 ; else ág

forward:

Page 15: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 15

8051 ASM alapstruktúrák 2.

Értékvizsgálat (Case)

Case r1 of1 : P5:=$1F;

2 : P5:=$2F;

4 : P5:=$3F;

8 : P5:=$4F

elseP5:=$5F;

end;

case_1:cjne r1,#1,case_2orl P5,#0x1Fsjmp forward

case_2:cjne r1,#2,case_4orl P5,#0x2Fsjmp forward

case_4:cjne r1,#4,case_8orl P5,#0x3Fsjmp forward

case_8:cjne r1,#8,case_elseorl P5,#0x4Fsjmp forward

case_else:orl P5,#0x5F

forward:

Page 16: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 16

8051 ASM alapstruktúrák 3.

Feltételes Ciklusok

while r2<>[0xA8] do[0xA8]:=[0xA8]+1;

whileloop:mov a,r2cjne a,0xA8,loopkernelsjmp forwardloopkernel:

inc 0xA8sjmp whileloop

forward:

r0:=$80repeat

r0:=r0/2;

until r0=$10

mov r0,#0x80repeat_loop:

mov a,r0mov b,#2div abmov r0,a

cjne r0,#0x10,repeat_loop

Page 17: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 17

GPIO Konfigurálása

Port Addr GPIO mode Addr Info

P0 (bit add) 0x80 P0MDOUT.[7:0] 0xA4 bitenként 0:Open-Drain 1:PushPull

P1 (bit add) 0x90 P1MDOUT.[7:0] 0xA5 bitenként 0:Open-Drain 1:PushPull

P1MDIN.[7:0] 0xBD bitenként 0:Analog in 1:GPIO

P2 (bit add) 0xA0 P2MDOUT.[7:0] 0xA6 bitenként 0:Open-Drain 1:PushPull

P3 (bit add) 0xB0 P3MDOUT.[7:0] 0xA7 bitenként 0:Open-Drain 1:PushPull

P3IF 0xAD Port 3 interrupt flag register

P4 (byte ) 0x84 P74OUT 0xB5 P74OUT.1 -> P4[7:4]; P74OUT.0->P4[3:0]

P5 (byte ) 0x85 P74OUT 0xB5 P74OUT.3 -> P5[7:4]; P74OUT.2->P5[3:0]

P6 (byte ) 0x86 P74OUT 0xB5 P74OUT.5 -> P6[7:4]; P74OUT.4->P6[3:0]

P7 (byte ) 0x96 P74OUT 0xB5 P74OUT.7 -> P7[7:4]; P74OUT.6->P7[3:0]

XBR2.6 XBARE Crossbar Enable Bit. 0: Crossbar disabled. All pins on Ports 0, 1, 2, 3, are forced to Input mode. 1: Crossbar enabled.

Page 18: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 18

Portok vezérlésének beállítása

• P74OUT (Port 7 – 4 output mode) regiszter

• Alapéretelmezett értéke: 0x00 (reset után ide áll vissza)

• Px (Ports x data) regiszter

• x: 7 – 4 (P4, P5, P6, P7)

Page 19: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 19

Watchdog timer

• Watchdog Timer Control Register (WDTCN) 0xFF

• Engedélyezés, újraindítás:

• mov WDTCN,#0xA5

• Letiltás:

• mov WDTCN,#0xDE

• mov WDTCN,#0xAD

• Letiltás letiltása:

• mov WDTCN,#0xFF

• Tankönyv 89. oldaltól…..

Page 20: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 20

Első ASM program

• Első ASM program:

• LED villogtatás (mindegyik/csak 1) 1 sec időközzel

• A mai óra lépései:

• Ismerkedés a fejlesztői környezettel

• Általános programváz kialakítása – valamennyi programot ez alapján írjuk majd meg

• RAM SFR memóriaterületek definiálása

• Kódszegmens megadása

• Inicializáló szubrutin megírása

• Programtörzs (végtelen ciklus!!!!!!!) megírása

• Nagyon egyszerű időzítés megírása (ZH-n nem elfogadható)

• A megírt program működtetése

Page 21: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 21

Új project – Silabs IDE

1. Eszköz összeállítása, majd csatlakoztatása USB kábelen keresztül a számítógépre

2. Fejlesztői környezet elindítása

3. Option/Connection Options – USB adapter – ellenőrzése• Ugyanitt Debug Interface-almenüben C2 helyett JTAG kiválasztása.

4. Project/Tool Chain Integration - SDCC – ellenőrzése• Assembler: Program Files(x86)/SDCC/bin/asx8051.exe

• Compiler és Linker: Program Files(x86)/SDCC/bin/sdcc.exe

5. Project/New Project:• C80510F2x és Blank Project (név és hely megadásával)

6. File/New File:• ASM Source File és Add to Project (név és hely megadásával)

7. Program megírása, Rebuild All, Connect, DL, Zöld gomb

8. Mentés, végén kimentés wordpad (.txt) formátumba, így elegendő egy projekt az egész ASM félévre

Page 22: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 22

1 másodperces villogtatás

• eszköz elindítása

• órajel, portok, gombok, kapcsolók stb...kezdeti értékeinek definiálása

• 1 másodpercig várunk – ez alatt „nemcsinálunk semmit sem” - számolás

• ha lejárt az 1 másodperc, a LED -ekenállapotot váltunk

• addig fut a program, amíg le nem állítjuk (∞ciklus)

Page 23: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 23

1 másodperces időzítő működése

• „egymásba ágyazott ‚for’ ciklusok”

• djnz: csökkentsd eggyel a regiszter tartalmát, és ugorj, ha az eredmény nem zérus! Egydjnz parancs 3 órajel alatt fut le.

• A keso0 be van ágyazva a keso1 alá, ami a keso2 alá.

• A keso0 ciklus (benne a djnz parancs) ezért lefut összesen 256*256*10=655 360alkalommal (=R0*R1*R2), ez összesen 1 966 080 órajel (=R0*R1*R2*3)

• Ha az órajel 2 MHz, akkor 1 másodperc alatt 2 000 000 órajel fut le, a különbség 33 920órajel, azaz kb. 0,017 másodperc

Page 24: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 24

1 másodperces időzítő szubrutin működése

3 órajel ciklus

djnz R0,keso0

djnz R1,keso1

djnz R2,keso2

Page 25: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

2018.02.14. Bevezetés az assembly nyelvbe 25

A következő órára

• Otthoni – EGYÉNI - feladat:• Módosítsuk a mai órán megírt programot úgy, hogy a LED-ek egy saját - ciklikus sorrendben villogjanak

(mindenki saját maga találjon ki egy ciklust, amit megpróbál megvalósítani, lehet bármi!!!!! ezt a hf-ben afejlécben írjuk is le!!!)• A programot a lehető legegyszerűbben írjuk meg, egy időzítéssel!

• Egy másodpercig világít, majd jön a következő, amely szintén egy másodpercig világít, stb.

• Most még használjuk az órán megírt időzítést!

• Az utasításkészlet teljes egésze használható!

• Ha időnk engedi, írjuk meg a programot (az órait is) többféleképpen is! (Többféle, egymástól alig különbözőmegoldás is lehetséges.)

• Lehet játszani különböző ciklikus LED kiírásokkal, álmodjátok meg

• Beküldés: .txt formátumban: gyakot megelőző este 8 óra!

• Tankönyv 3. fejezete (kb. 30 oldal).

• Következő alkalom:• Gombkezelés

• Szekvenciák

Page 26: Jelfeldolgozás a közlekedésben · 2018.02.14. Bevezetés az assembly nyelvbe 4 Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen  = 2H, ez lesz áttöltve

Vége a második labornak.

Bevezetés az assembly nyelvbe

26