View
1
Download
0
Category
Preview:
Citation preview
Mechatronika és mikroszámítógépek
2017/2018 I. félév
Bevezetés az assembly nyelvbe
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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ó.
2017.09.13. 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
2017.09.13. 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.)
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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:
2017.09.13. 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:
2017.09.13. 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
2017.09.13. 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.
2017.09.13. 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)
2017.09.13. 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…..
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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)
2017.09.13. 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
2017.09.13. 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
2017.09.13. 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
Vége a második labornak.
Bevezetés az assembly nyelvbe
26
Recommended