Įvadas į 8051 programavimą asamblėjos kalba

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Asamblėjos kalba yra žemo lygio programavimo kalba, naudojama rašyti programos kodą mnemonikos požiūriu. Nepaisant to, kad šiuo metu yra daug aukšto lygio kalbų, surinkimo programavimo kalba yra populiariai naudojama daugelyje programų. Ji gali būti naudojama tiesioginėms manipuliacijoms aparatūra. Jis taip pat naudojamas rašant 8051 programavimo kodas efektyviau, naudojant mažiau laikrodžio ciklų, sunaudojant mažiau atminties, palyginti su kitomis aukšto lygio kalbomis.

8051 Programavimas asamblėjos kalba

8051 programavimas



8051 Programavimas asamblėjos kalba

Asamblėjos kalba yra visiškai su aparatūra susijusi programavimo kalba. Įterptieji dizaineriai, prieš rašydami programą, turi turėti pakankamai žinių apie tam tikro procesoriaus ar valdiklių aparatinę įrangą. Asamblėjos kalbą kuria mnemonika, todėl vartotojai negali jos lengvai suprasti, kad modifikuotų programą.


8051 Programavimas asamblėjos kalba

8051 Programavimas asamblėjos kalba



Asamblėjos programavimo kalbą kuria įvairūs kompiliatoriai ir Baulingo takas' geriausiai tinka mikrovaldiklisprogramavimas plėtrą. Mledo valdikliaiarba procesoriai gali suprasti tik dvejetainę kalbą „0s arba 1s“ pavidalu. Asamblėjas konvertuoja surinkimo kalbą į dvejetainę kalbą ir tada ją saugomikrovaldiklisatminties konkrečiai užduočiai atlikti.

8051 mikrovaldiklio architektūros procedūra

8051mikrovaldiklisyra CISC pagrįsta Harvardo architektūra ir turi periferinius įrenginius, tokius kaip 32 įvesties / išvesties, laikmačiai / skaitikliai, nuoseklusis ryšys ir atmintinės. Themikrovaldiklisreikalinga programa operacijoms, kurioms išsaugoti reikia atminties, ir funkcijoms perskaityti. 8051mikrovaldiklissusideda iš RAM ir ROM atminties instrukcijoms laikyti.

8051 Mikrovaldiklio arktitekūra

8051 mikrovaldiklio architektūros procedūra

Registras yra pagrindinė dalis perdirbėjai irmikrovaldikliai kuris yra atmintyje, kuris suteikia greitesnį duomenų rinkimo ir saugojimo būdą. 8051 surinkimo kalbos programavimas yra pagrįstas atminties registrais. Jei norime manipuliuoti duomenimis procesoriuje ar valdiklyje, atlikdami atimtis, pridėjimą ir pan., Negalime to padaryti tiesiogiai atmintyje, tačiau norint apdoroti ir išsaugoti duomenis, reikia registrų.Mikrovaldikliaiyra kelių tipų registrai, kuriuos galima klasifikuoti pagal jų nurodymus arba juose veikiantį turinį.

8051 mikrovaldiklio programos surinkimo kalba

Asamblėjos kalbą sudaro elementai, kurie visi naudojami programai rašytinuosekliai. Laikykitės pateiktų taisyklių, norėdami rašyti programavimą surinkimo kalba.


Susirinkimo kalbos taisyklės

  • Surinkimo kodas turi būti parašytas didžiosiomis raidėmis
  • Po etikečių turi būti dvitaškis (etiketė :)
  • Visi simboliai ir etiketės turi prasidėti raide
  • Visi komentarai rašomi mažosiomis raidėmis
  • Paskutinė programos eilutė turi būti END direktyva

Asamblėjos kalbos mnemonika yra op-kodo pavidalu, pavyzdžiui, MOV, ADD, JMP ir kt., Kurie naudojami operacijoms atlikti.

Op kodas: Op kodas yra viena instrukcija, kurią gali atlikti centrinis procesorius. Čia op kodas yra MOV instrukcija.

Operandai: Operandai yra vienas duomenų elementas, kurį galima valdyti naudojant op-kodą. Pvz., Daugybos operaciją atlieka operandai, kurie padauginami iš operando.

Sintaksė: MUL a,b

Asamblėjos kalbos programavimo elementai:

  • Surinkite gaires
  • Instrukcijų rinkinys
  • Kreipimosi režimai

Surinkimo instrukcijos:

Surinkimo nurodymai nurodo procesoriaus nurodymus. 8051mikrovaldiklissusideda iš įvairių surinkimo nurodymų, nurodančių valdymo bloką. Naudingiausios direktyvos yra 8051 programavimas, pvz .:

  • ORG
  • DB
  • EQU
  • GALAS

ORG(kilmė): Ši direktyva nurodo programos pradžią. Tai naudojama norint nustatyti registro adresą surinkimo metu. Pavyzdžiui, ORG 0000h nurodo kompiliatoriui visą tolesnį kodą, prasidedantį adresu 0000h.

Sintaksė: ORG 0000h

DB(apibrėžti baitą): Apibrėžiantis baitas naudojamas leisti baitų eilutę. Pvz., Atspausdinkite „EDGEFX“, kur kiekvienas simbolis paimamas pagal adresą, o galiausiai tiesioginėmis dvigubomis kabutėmis atspausdina DB „eilutę“.

Sintaksė:

ORG 0000h

MOV a, # 00h
————-
————-
DB „EDGEFX“

EQU (ekvivalentas): Kintamojo adresui sulyginti naudojama lygiavertė direktyva.

Sintaksė:

reg lygus,09h
—————–
—————–
MOVreg,# 2h

GALAS: END direktyva naudojama nurodyti programos pabaigą.

Sintaksė:

reg lygus,09h

—————–
—————–
MOVreg,# 2h
GALAS

Kreipimosi režimai:

Prieigos prie duomenų būdas vadinamas adresavimo režimu. CPU gali pasiekti duomenis įvairiais būdais, naudodamas adresavimo režimus. 8051mikrovaldiklissusideda iš penkių adresavimo režimų, tokių kaip:

  • Skubus adresavimo režimas
  • Registruoti adresavimo režimą
  • Tiesioginio adresavimo režimas
  • Netiesioginio adresavimo režimas
  • Bazinio indekso adresavimo režimas

Skubus adresavimo režimas:

Šiuo adresavimo režimu šaltinis turi būti vertė, po kurios gali būti nurodomas „#“, ir paskirties vieta SFR registrai, bendrosios paskirties registrai ir adresas. Jis naudojamas nedelsiant įrašyti vertę į atminties registrus.

Sintaksė:

MOV A, # 20h // A yraanakumuliatorių registras, 20 yra saugomas A //
MOV R0,# 15 // R0 yra bendrosios paskirties registras, 15 yra saugomas R0 registre //
MOV P0, # 07h // P0 yra SFR registras .07 saugomas P0 //
MOV 20h,# 05h // 20h yra registro 05, saugomo 20h //, adresas //

Buvęs:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, galutinė vertė išsaugoma R0 //

Registruoti adresavimo režimą:

Šiuo adresavimo režimu šaltinis ir paskirties vieta turi būti registras, bet ne bendrosios paskirties registrai. Taigi duomenys nėra perkeliami į bendrosios paskirties banko registrai .

Sintaksė:

MOV A, B // A yra SFR registras, B yra bendrosios paskirties registras //
MOV R0, R1 // Neteisinga instrukcija, GPR - GPR neįmanoma //

BUVęs:

MOV R0, # 02h
MOV A, # 30h
PRIDĖTI R0, A // R0<—R0+A, the final value is stored in the R0 register//

Tiesioginio adresavimo režimas

Šiuo adresavimo režimu šaltinis arba paskirtis (arba tiek šaltinis, tiek paskirties vieta) turi būti adresas, bet ne vertė.

Sintaksė:

MOV A,20h // 20h yra adresas A yra registras //
MOV 00h, 07h // abu adresai adresuojami GPS registruose //

Buvęs:

MOV 07h,# 01h
MOV A, # 08h
PRIDĖTI,07h // A<—A+07h the final value is stored in A//

Netiesioginio adresavimo režimas:

Šiuo adresavimo režimu šaltinis arba paskirties vieta (arba paskirties vieta ar šaltinis) turi būtiįnetiesioginis adresas, bet ne vertė. Šis adresavimo režimas palaiko rodyklės koncepciją. Rodyklė yra kintamasis, naudojamas kito kintamojo adresui išsaugoti. Ši rodyklės koncepcija naudojama tik R0 ir R1 registrams.

Sintaksė:

MOVR0, # 01h // 01 reikšmė saugoma R0 registre, R0 adresas yra 08h //
MOV R1, # 08h // R1 yra rodiklio kintamasisparduotuvėseR0 adresas (08h) //
MOV 20h,@ R1 // 01 vertė saugoma 20 valandų GP registro adrese //

Netiesioginio adresavimo režimas

Netiesioginio adresavimo režimas

Pagrindinio indekso adresavimo režimas:

Šis adresavimo režimas naudojamas duomenims nuskaityti iš išorinė atmintis arba ROM atmintis . Visi adresavimo režimai negali nuskaityti duomenų iš kodų atminties. Kodas turi būti perskaitytas per DPTR registrą. DPTR naudojamas duomenims nukreipti į kodą arba išorinę atmintį.

Sintaksė:

MOVC A, @ A + DPTR // C nurodo kodų atmintį //
MOCX A, @ A + DPTR // X rodo išorinę atmintį //
Pvz .: MOV A, # 00H // 00H saugomas A registre //
MOV DPTR, # 0500H // DPTR nurodo atminties 0500h adresą //
MOVC A, @ A + DPTR // nusiųskite vertęįA registras //
MOV P0, A // A siuntimo PO registratoriui data //

Instrukcijų rinkinys:

Instrukcijų rinkinys yra valdiklio arba procesoriaus struktūra, suteikianti valdikliui komandas, kuriomis valdiklis valdomas tvarkant duomenis. Instrukcijų rinkinį sudaro instrukcijos, vietiniai duomenų tipai, adresavimo režimai, pertraukimų registrai, išskirtinis valdymas ir atminties architektūra. The 8051mikrovaldiklis gali vykdyti CISC instrukcijas su Harvardo architektūra. 8051 programavimo atveju įvairių tipų CISC instrukcijos apima:

  • Duomenų perdavimo instrukcijų rinkinys
  • Nuoseklus instrukcijų rinkinys
  • Aritmetikos instrukcijų rinkinys
  • Filialas Iinstrukcijarinkinys
  • Loop Instrucution rinkinys
  • Sąlyginių nurodymų rinkinys
  • Besąlygiškas instrukcijų rinkinys
  • Loginių instrukcijų rinkinys
  • Būlo instrukcijų rinkinys

Aritmetikos instrukcijų rinkinys:

Aritmetinės instrukcijos atlieka pagrindines operacijas, tokias kaip:

  • Papildymas
  • Dauginimas
  • Atimtis
  • Skyrius

Papildymas:

ORG 0000h
MOV R0, # 03H // 3 reikšmę perkelkite į registrą R0 //
MOV A, # 05H // perkelkite 5 reikšmę į akumuliatorių A //
Pridėti A, 00H //Pridėtireikšmė su R0 verte ir išsaugo rezultatąinA//
GALAS

Padauginimas:

ORG 0000h
MOV R0, # 03H // 3 reikšmę perkelkite į registrą R0 //
MOV A, # 05H // perkelkite 5 reikšmę į akumuliatorių A //
MUL A, 03H //Padaugintarezultatas saugomas akumuliatoriuje A //
GALAS

Atimtis:

ORG 0000h
MOV R0, # 03H // perkelkite 3 reikšmę į registrą R0 //
MOV A, # 05H // perkelkite 5 reikšmę į akumuliatorių A //
A PUBLIKIS, 03H // Rezultato vertė saugoma A akumuliatoriuje //
GALAS

Skyrius:

ORG 0000h
MOV R0, # 03H // perkelkite 3 reikšmę į registrą R0 //
MOV A, # 15H // 5 reikšmę perkelkite į akumuliatorių A //
DIV A, 03H // galutinė vertė saugoma akumuliatoriuje A //
GALAS

Sąlyginės instrukcijos

Centrinis procesorius vykdo instrukcijas pagal sąlygą, patikrindamas vieno bito būseną arba baito būseną. 8051mikrovaldiklissusideda iš įvairių sąlyginių instrukcijų, tokių kaip:

  • JB -> Peršok žemiau
  • JNB -> Peršokti, jei ne žemiau
  • JC -> Peršok, jei neši
  • JNC -> Peršokti, jeineNešiotis
  • JZ -> Pereiti, jei nulis
  • JNZ -> Peršokti, jeineNulis
Sąlyginės instrukcijos

Sąlyginės instrukcijos

1. Sintaksė:

JB P1.0, etiketė
- - - - - - - -
- - - - - - - -
Etiketė: - - - - - - - -
- - - - - - - -
GALAS

2. Sintaksė:

JNB P1.0, etiketė
- - - - - - - -
- - - - - - - -
Etiketė: - - - - - - - -
- - - - - - - -
GALAS

3. Sintaksė:

JC, etiketė
- - - - - - - -
- - - - - - - -
Etiketė: - - - - - - - -
- - - - - - - -
GALAS

4. Sintaksė:

JNC, etiketė
- - - - - - - -
- - - - - - - -
Etiketė: - - - - - - - -
- - - - - - - -
GALAS
5. Sintaksė:

JZ, etiketė
- - - - - - - -
- - - - - - - -
Etiketė: - - - - - - - -
- - - - - - - -
GALAS

6. Sintaksė:

JNZ, etiketė
- - - - - - - -
- - - - - - - -
Etiketė: - - - - - - - -
- - - - - - - -
GALAS

Skambinimo ir peršokimo instrukcijos:

Skambinimo ir peršokimo instrukcijos naudojamos norint išvengti programos kodo atkartojimo. Kai kuris nors konkretus kodas buvo naudojamas daugiau nei vieną kartą skirtingose ​​programos vietose, jei paminėsimekonkretus pavadinimasįkodą tadames galėtume naudoti šį pavadinimą bet kurioje programos vietoje, neįvedę kodo kiekvienam kartui. Tai sumažina programos sudėtingumą. 8051 programavimas susideda iš skambinimo ir peršokimo instrukcijų, tokių kaip LCALL, SJMP.

  • LCALL
  • SKAMBUTIS
  • SJMP
  • LJMP

1. Sintaksė:

ORG 0000h
- - - - - - - -
- - - - - - - -
KVIETIMAS, etiketė
- - - - - - - -
- - - - - - - -
SJMP STABDYTI
Etiketė: - - - - - - - -
- - - - - - - -
- - - - - - - -
teisingai
SUSTABDYTI:BE PROBLEMŲ

2. Sintaksė:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, etiketė
- - - - - - - -
- - - - - - - -
SJMP STABDYTI
Etiketė: - - - - - - - -
- - - - - - - -
- - - - - - - -
teisingai
SUSTABDYTI:BE PROBLEMŲ

Skambinimo ir šuolio instrukcijos

Skambinimo ir šuolio instrukcijos

Ciklo instrukcijos:

Kilpos instrukcijos naudojamos kartojant bloką kiekvieną kartą atliekant prieaugio ir mažinimo operacijas. 8051mikrovaldiklissusideda iš dviejų tipų ciklo instrukcijų:

  • CJNE -> palyginkite ir šokinėkite, jei ne lygu
  • DJNZ -> mažinimas ir šuolis, jei ne nulis

1. Sintaksė:

apieCJNE
MOV A, # 00H
MOV B, # 10H
Etiketė: INC
- - - - - -
- - - - - -
CJNE A, etiketė

2. Sintaksė:

apieDJNE

MOV R0, # 10H
Etiketė: - - - - - -
- - - - - -
„DJNE R0“, etiketė
- - - - - -
- - - - - -
GALAS

Loginių instrukcijų rinkinys:

8051 mikrovaldiklio instrukcijų rinkinys pateikia AND, OR, XOR, TEST, NOT ir Boolean logines instrukcijas rinkiniui ir išvalo bitus, atsižvelgdamas į programos poreikį.

Loginių instrukcijų rinkinys

Loginių instrukcijų rinkinys

1. Sintaksė:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ORL A, R0 // 00100000/00000101 = 00000000 //

2. Sintaksė:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ANL A, R0

3. Sintaksė:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
XRL A, R0

Perjungimo operatoriai

Pamainos operatoriai naudojami efektyviai duomenims siųsti ir priimti. 8051mikrovaldiklissusideda iš keturių pamainų operatorių:

  • RR -> pasukti į dešinę
  • RRC -> Pasukite į dešinę per nešiojimą
  • RL -> pasukti į kairę
  • RLC -> pasukti į kairę per nešiojimą

Pasukti į dešinę (RR):

Atliekant šią perkėlimo operaciją, MSB tampa LSB ir visi bitai nuosekliai perkeliami dešinės pusės link.

Sintaksė:

MOV A, # 25h
RR A

Pasukti į kairę (RL):

Atliekant šią perkėlimo operaciją, MSB tampa LSB ir visi bitai nuosekliai keičiasi kairės pusės link.

Sintaksė:

MOV A, # 25h
RL A

RRC pasukti į dešinę per nešiojimą:

Atliekant šią perkėlimo operaciją, LSB juda nešti, o nešiojimas tampa MSB, o visi bitai po truputį pasislenka dešinės pusės link.

Sintaksė:

MOV A, # 27h
RRC A

RLC pasukti į kairę per nešiojimą:

Atliekant šią perkėlimo operaciją, MSB juda nešti, o nešiojimas tampa LSB, o visi bitai po truputį pasislenka kairiosios pusės link.

Sintaksė:

MOV A, # 27h
RLC A

Pagrindinės įterptosios C programos:

Themikrovaldikliskiekvienam operacinės sistemos tipui programavimas skiriasi. Yra daug operacinių sistemų pvz., „Linux“, „Windows“, RTOS ir pan. Tačiau RTOS turi keletą įterptųjų sistemų kūrimo pranašumų. Kai kurie asamblėjos lygio programavimo pavyzdžiai pateikti žemiau.

Šviesos diodas mirksi naudodamas 8051mikrovaldiklis:

  • Skaičius Rodomas 7 segmentų ekrane naudojant 8051 mikrovaldiklį
  • Laikmačio / skaitiklio skaičiavimai ir programa naudojant 8051mikrovaldiklis
  • Serijinio ryšio skaičiavimai ir programa naudojant 8051mikrovaldiklis

LED programos su 8051 Microcontrller

1. WAP perjungti PORT1 šviesos diodus

ORG 0000H
TOGLE: MOV P1, # 01 //judėti00000001 į p1 registrą //
CALL DELAY // įvykdyti vėlavimą //
MOV A, P1 // judėtip1 reikšmėprie akumuliatoriaus //
CPL A // A vertės papildymas //
MOV P1, A // perkelkite 11111110 į „port1“ registrą //
CALL DELAY // įvykdyti vėlavimą //
SJMP TOGLE
VĖLAVIMAS: MOV R5, # 10H // įkelkite registrą R5 su 10 //
DVIEJI: MOV R6, # 200 // apkrovos registras R6 su 200 //
VIENAS: MOV R7, # 200 // apkrovos registras R7 su 200 //
DJNZ R7, $ // mažina R7, kol jis bus nulis //
DJNZ R6, ONE // mažina R7, kol jis bus nulis //
DJNZ R5, TWO // mažinti R7, kol jis bus nulis //
RET // grįžti į pagrindinę programą //
GALAS

Laikmačio / skaitiklio skaičiavimai ir programavimas naudojant 8051 Mledo valdiklis:

Vėlavimas yra vienas iš svarbiausių veiksnių kuriant programinę įrangą. The laikmačiai ir skaitikliai yra aparatūros komponentaimikrovaldiklis, kurie naudojami daugelyje programų, kad būtų užtikrintas tikslus laiko atidėjimas skaičiuojant impulsus. Bkitos užduotys įgyvendinamos programinės įrangos technika.

1. WAP apskaičiuoti laiko 500 vėlavimą.

MOV TMOD, # 10H // pasirinkite laikmačio režimą pagal registrus //
MOV TH1, # 0FEH // uždelsimo laikas saugomas didesniame bite //
MOV TL1, # 32H // uždelsimo laikas saugomas mažame bite //
JNB TF1, $ // sumažina laikmačio vertę, kol ji bus lygi nuliui //
CLR TF1 // išvalykite laikmačio vėliavąšiek tiek//
CLR TR1 // laikmatis išjungtas //

2. WAP perjungti šviesos diodussu5seklaiko atidėjimas

ORG 0000H
GRĮŽTI: MOV PO, # 00H
KVIETIMAS DELIA
MOV P0, # 0FFH
KVIETIMAS DELIA
GRĮŽTI GRĮŽTI
VĖLAVIMAS: MOV R5, # 50H // įkelkite registrą R5 su 50 //
1 DELĖJIMAS: MOV R6, # 200 // įkelkite registrą R6 su 200 //
2 DELĖJIMAS: MOV R7, # 229 // įkelkite registrą R7 su 200 //
DJNZ R7, $ // mažina R7, kol jis bus nulis //
DJNZ R6, DELAY2 // mažina R6, kol jis bus nulis //
DJNZ R5, DELAY1 // mažina R5, kol jis bus nulis //
RET // grįžti į pagrindinę programą //
GALAS

3. WAP suskaičiuos 250 impulsų naudodamasis mode0 count0

Sintaksė:

ORG 0000H
MOV TMOD, # 50H // pasirinkite skaitiklį //
MOV TH0, # 15 // perkelkite skaičiavimo impulsus į didesnį bitą //
MOV TH1, # 9FH //judėtiskaičiavimo impulsai, apatinis bitas //
Nustatyti TR0 // Į laikmatį
JNB $ // sumažina skaičiaus vertę iki nulio //
CLR TF0 // išvalykite skaitiklį, vėliavėlęšiek tiek//
CLR TR0 // laikmačio sustabdymas //
GALAS

Serijinio ryšio programavimas naudojant 8051 Mledo valdiklis:

Serijinis bendravimas paprastai naudojamas duomenims perduoti ir priimti. 8051mikrovaldiklissusideda iš UART / USART nuosekliojo ryšio, o signalus perduoda ir priimaTxir Rx kaiščiai. UART ryšys duomenis perduoda nuosekliai. UART yra pusiau dupleksinis protokolas, kuris perduoda ir priima duomenis, bet ne tuo pačiu metu.

1. WAP persiųsti simbolius į „Hyper Terminal“

MOV SCON, # 50H // nustatyti nuoseklųjį ryšį //
MOV TMOD, # 20H // pasirinkite laikmačio režimą //
MOV TH1, # -3 // nustatykite perdavimo greitį //
NUSTATYKITE TR1 // Į laikmatį //
MOV SBUF, # ’S’ // perduoti S į nuoseklųjį langą //
JNB TI, $ // laikmačio mažinimo vertė iki nulio //
CLR RI // išvalyti gavimo pertraukimą //
CLR TR1 // išvalyti laikmatį //

2. WAP persiųsti simbolį Gauti per Hyper Terminal

MOV SCON, # 50H // nustatyti nuoseklųjį ryšį //
MOV TMOD, # 20H // pasirinkite laikmačio režimą //
MOV TH1, # -6 // nustatykite perdavimo greitį //
SET TR1 // laikmačiu //
MOV SBUF, # ’S’ // perduoti S į nuoseklųjį langą //
JNB RI, $ // laikmačio mažinimo vertė iki nulio //
CLR RI // išvalyti gavimo pertraukimą //
MOV P0, SBUF // siųsti SBUF registro vertę į prievadą0 //
CLR TR1 // išvalyti laikmatį //

Trumpai apie 8051 programavimą asamblėjos kalba su pavyzdinėmis programomis. Tikimės, kad ši tinkama informacija apie surinkimo kalbą tikrai bus naudinga skaitytojams, ir laukiame jų vertingų komentarų toliau pateiktame komentarų skyriuje.