Ievads 8051 programmēšanā asamblejas valodā

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Asamblejas valoda ir zema līmeņa programmēšanas valoda, ko izmanto, lai ierakstītu programmas kodu mnemotikas ziņā. Lai gan šobrīd ir daudz augsta līmeņa valodu, kas pašlaik ir pieprasīti, daudzās lietojumprogrammās populāri tiek izmantota montāžas programmēšanas valoda. To var izmantot tiešām aparatūras manipulācijām. To lieto arī, lai rakstītu 8051 programmēšanas kods efektīvāk ar mazāku pulksteņa ciklu skaitu, patērējot mazāk atmiņas, salīdzinot ar citām augsta līmeņa valodām.

8051 Programmēšana asamblejas valodā

8051 programmēšana



8051 Programmēšana asamblejas valodā

Montāžas valoda ir pilnībā ar aparatūru saistīta programmēšanas valoda. Iegultajiem dizaineriem pirms programmas rakstīšanas ir jābūt pietiekamām zināšanām par konkrēta procesora vai kontrolieru aparatūru. Montāžas valodu izstrādā mnemotehnika, tāpēc lietotāji to nevar viegli saprast, lai modificētu programmu.


8051 Programmēšana asamblejas valodā

8051 Programmēšana asamblejas valodā



Asamblejas programmēšanas valodu izstrādā dažādi kompilatori un boulinga zāle' ir vispiemērotākais mikrokontrollerisprogrammēšana attīstību. Mledus kontrolierivai procesori var saprast tikai bināro valodu “0s vai 1s” veidā. Asambleja konvertē montāžas valodu binārā valodā un pēc tam to saglabāmikrokontrollerisatmiņu konkrētā uzdevuma veikšanai.

8051 mikrokontrolleru arhitektūra

8051. gadsmikrokontrollerisir CISC balstīta Hārvardas arhitektūra , un tam ir tādas perifērijas ierīces kā 32 I / O, taimeri / skaitītāji, sērijveida sakari un atmiņas. Themikrokontrollerisnepieciešama programma, lai veiktu darbības, kuru saglabāšanai nepieciešama atmiņa, un lai lasītu funkcijas. 8051. gadsmikrokontrollerissastāv no RAM un ROM atmiņām instrukciju glabāšanai.

8051 Mikrokontrolleru arktitūra

8051 mikrokontrolleru arhitektūra

Reģistrs ir galvenā programmas pārstrādātāji unmikrokontrolleri kas atrodas atmiņā, kas nodrošina ātrāku datu vākšanas un uzglabāšanas veidu. 8051 montāžas valodas programmēšana ir balstīta uz atmiņas reģistriem. Ja mēs vēlamies manipulēt ar datiem ar procesoru vai kontrolieri, veicot atņemšanu, saskaitīšanu utt., Mēs to nevaram izdarīt tieši atmiņā, bet datu apstrādei un glabāšanai tam ir nepieciešami reģistri.Mikrokontrollerisatur vairāku veidu reģistrus, kurus var klasificēt pēc to instrukcijām vai saturā, kas tajos darbojas.

8051 mikrokontrolleru programmas montāžas valodā

Asamblejas valodu veido elementi, ar kuriem visi tiek izmantoti programmas rakstīšanaisecīgā veidā. Ievērojiet dotos noteikumus, lai rakstītu programmēšanu montāžas valodā.


Asamblejas valodas noteikumi

  • Montāžas kods jāraksta ar lielajiem burtiem
  • Pēc etiķetēm jābūt ar kolu (etiķete :)
  • Visiem simboliem un etiķetēm jāsākas ar burtu
  • Visi komentāri ir rakstīti ar mazajiem burtiem
  • Programmas pēdējai rindai jābūt END direktīvai

Asamblejas valodas mnemotika ir op-koda formā, piemēram, MOV, ADD, JMP un tā tālāk, ko izmanto darbību veikšanai.

Op kods: Op-kods ir viena instrukcija, kuru var izpildīt centrālais procesors. Šeit op-kods ir MOV instrukcija.

Operandi: Operandi ir viens datu gabals, ko var vadīt ar op-kodu. Piemērs: reizināšanas darbību veic operandi, kas tiek reizināti ar operandu.

Sintakse: MUL a,b

Asamblejas valodas programmēšanas elementi:

  • Salikt vadlīnijas
  • Instrukciju komplekts
  • Adresēšanas režīmi

Montāžas instrukcijas:

Montāžas instrukcijas dod norādījumus CPU. 8051. gadsmikrokontrollerissastāv no dažāda veida montāžas direktīvām, lai dotu norādījumus vadības blokam. Visnoderīgākās ir 8051 programmēšana, piemēram:

  • ORG
  • DB
  • EQU
  • BEIGT

ORG(izcelsme): Šī direktīva norāda programmas sākumu. To izmanto, lai uzstādīšanas laikā iestatītu reģistra adresi. Piemēram, ORG 0000h kompilatoram norāda visu nākamo kodu, sākot no adreses 0000h.

Sintakse: ORG 0000h

DB(definēt baitu): Definēšanas baits tiek izmantots, lai atļautu baitu virkni. Piemēram, izdrukājiet “EDGEFX”, kurā katru rakstzīmi uzņem adrese un visbeidzot tieši ar dubultpēdiņām izdrukā DB “virkni”.

Sintakse:

ORG 0000h

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

EQU (ekvivalents): Mainīgā adreses pielīdzināšanai tiek izmantota līdzvērtīga direktīva.

Sintakse:

reģ ekv,09h
—————–
—————–
MOVreģ,# 2h

BEIGT: END direktīvu izmanto, lai norādītu programmas beigas.

Sintakse:

reģ ekv,09h

—————–
—————–
MOVreģ,# 2h
BEIGT

Adresēšanas režīmi:

Datu piekļuves veidu sauc par adresēšanas režīmu. Centrālais procesors var piekļūt datiem dažādos veidos, izmantojot adresēšanas režīmus. 8051. gadsmikrokontrollerissastāv no pieciem adresēšanas režīmiem, piemēram:

  • Tūlītējs adresēšanas režīms
  • Reģistrēt adresēšanas režīmu
  • Tiešās adresēšanas režīms
  • Netiešās adresēšanas režīms
  • Bāzes indeksa adresēšanas režīms

Tūlītējs adresēšanas režīms:

Šajā adresēšanas režīmā avotam ir jābūt vērtībai, kurai var sekot “#”, un mērķim jābūt SFR reģistri, vispārējas nozīmes reģistri un adresi. To izmanto, lai nekavējoties saglabātu vērtību atmiņas reģistros.

Sintakse:

MOV A, # 20h // A iranakumulatoru reģistrs, 20 tiek glabāti A //
MOV R0,# 15 // R0 ir vispārējas nozīmes reģistrs 15, kas tiek glabāts R0 reģistrā //
MOV P0, # 07h // P0 ir SFR reģistrs, 07 ir saglabāts P0 //
MOV 20h,# 05h // 20h ir 05. reģistrā glabātā reģistra 05 adrese //

Bijušais:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, galīgā vērtība tiek saglabāta R0 //

Reģistrēt adresēšanas režīmu:

Šajā adresēšanas režīmā avotam un mērķim jābūt reģistram, bet ne vispārējas nozīmes reģistriem. Tātad dati netiek pārvietoti vispārējas nozīmes banku reģistri .

Sintakse:

MOV A, B // A ir SFR reģistrs, B ir vispārējas nozīmes reģistrs //
MOV R0, R1 // nederīga instrukcija, GPR līdz GPR nav iespējams //

Bijušais:

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

Tiešās adresēšanas režīms

Šajā adresēšanas režīmā avotam vai mērķim (vai gan avotam, gan galamērķim) jābūt adresei, bet ne vērtībai.

Sintakse:

MOV A,20h // 20h ir adrese A ir reģistrs //
MOV 00h, 07h // abus adresē GPS reģistri //

Bijušais:

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

Netiešās adresēšanas režīms:

Šajā adresēšanas režīmā avotam vai galamērķim (vai galamērķim vai avotam) jābūtuznetiešā adrese, bet ne vērtība. Šis adresēšanas režīms atbalsta rādītāja koncepciju. Rādītājs ir mainīgais, ko izmanto, lai saglabātu otra mainīgā adresi. Šis rādītāja jēdziens tiek izmantots tikai R0 un R1 reģistriem.

Sintakse:

MOVR0, # 01h // 01 vērtība tiek saglabāta R0 reģistrā, R0 adrese ir 08h //
MOV R1, # 08h // R1 ir rādītāja mainīgaisveikalosR0 adrese (08h) //
MOV 20h,@ R1 // 01 vērtība tiek saglabāta ģimenes ārstu reģistra 20 stundu adresē //

Netiešās adresēšanas režīms

Netiešās adresēšanas režīms

Bāzes indeksa adresēšanas režīms:

Šis adresēšanas režīms tiek izmantots, lai nolasītu datus no ārējā atmiņa vai ROM atmiņa . Visi adresēšanas režīmi nevar nolasīt datus no kodu atmiņas. Kodam ir jālasa caur DPTR reģistru. DPTR tiek izmantots, lai norādītu datus kodā vai ārējā atmiņā.

Sintakse:

MOVC A, @ A + DPTR // C norāda koda atmiņu //
MOCX A, @ A + DPTR // X norāda ārējo atmiņu //
EX: MOV A, # 00H // 00H tiek saglabāts A reģistrā //
MOV DPTR, # 0500H // DPTR norāda 0500h adresi atmiņā //
MOVC A, @ A + DPTR // nosūta vērtībuuzA reģistrs //
MOV P0, A // datuma A nosūtīšana PO reģistratoram //

Instrukciju komplekts:

Instrukciju kopa ir kontroliera vai procesora struktūra, kas kontrolierim sniedz komandas, lai vadītu kontrolieri datu apstrādē. Instrukciju kopa sastāv no instrukcijām, vietējiem datu tipiem, adresēšanas režīmiem, pārtraukumu reģistriem, ārkārtas apstrādes un atmiņas arhitektūras. The 8051mikrokontrolleris var izpildīt CISC norādījumus ar Hārvardas arhitektūru. 8051 programmēšanas gadījumā dažāda veida CISC instrukcijas ietver:

  • Datu pārsūtīšanas instrukciju kopa
  • Secīgo instrukciju komplekts
  • Aritmētisko instrukciju komplekts
  • Atzarošana Iinstrukcijakomplekts
  • Cilpas ievadīšanas komplekts
  • Nosacījuma instrukciju komplekts
  • Beznosacījumu instrukciju kopa
  • Loģisko instrukciju komplekts
  • Būla instrukciju kopa

Aritmētisko instrukciju komplekts:

Aritmētiskās instrukcijas veic tādas pamata darbības kā:

  • Papildinājums
  • Reizināšana
  • Atņemšana
  • Nodaļa

Papildinājums:

ORG 0000h
MOV R0, # 03H // pārvietojiet vērtību 3 uz reģistru R0 //
MOV A, # 05H // pārvietojiet vērtību 5 uz akumulatoru A //
Pievienot A, 00H //pievienotAvērtību ar R0 vērtību un saglabā rezultātuiekšā//
BEIGT

Reizināšana:

ORG 0000h
MOV R0, # 03H // pārvietojiet vērtību 3 uz reģistru R0 //
MOV A, # 05H // pārvietojiet vērtību 5 uz akumulatoru A //
MUL A, 03H //Pavairotsrezultāts tiek glabāts akumulatorā A //
BEIGT

Atņemšana:

ORG 0000h
MOV R0, # 03H // pārvietojiet vērtību 3, lai reģistrētu R0 //
MOV A, # 05H // pārvietojiet vērtību 5 uz akumulatoru A //
A SUBB, 03H // Rezultāta vērtība tiek saglabāta akumulatorā A //
BEIGT

Nodaļa:

ORG 0000h
MOV R0, # 03H // pārvietojiet vērtību 3, lai reģistrētu R0 //
MOV A, # 15H // pārvietojiet vērtību 5 uz akumulatoru A //
DIV A, 03H // galīgā vērtība tiek glabāta akumulatorā A //
BEIGT

Nosacījuma instrukcijas

Centrālais procesors izpilda instrukcijas, pamatojoties uz nosacījumu, pārbaudot viena bita statusu vai baitu statusu. 8051. gadsmikrokontrollerissastāv no dažādām nosacītām instrukcijām, piemēram:

  • JB -> Pārlēkt zemāk
  • JNB -> Pārlēkt, ja ne zemāk
  • JC -> Pārlēkt, ja nēsā
  • JNC -> Pārlēkt, jaNēsāt
  • JZ -> Pārlēkt, ja nulle
  • JNZ -> Pārlēkt, jaNulle
Nosacījuma instrukcijas

Nosacījuma instrukcijas

1. Sintakse:

JB P1.0, etiķete
- - - - - - - -
- - - - - - - -
Etiķete: - - - - - - - -
- - - - - - - -
BEIGT

2. Sintakse:

JNB P1.0, etiķete
- - - - - - - -
- - - - - - - -
Etiķete: - - - - - - - -
- - - - - - - -
BEIGT

3. Sintakse:

JC, etiķete
- - - - - - - -
- - - - - - - -
Etiķete: - - - - - - - -
- - - - - - - -
BEIGT

4. Sintakse:

JNC, etiķete
- - - - - - - -
- - - - - - - -
Etiķete: - - - - - - - -
- - - - - - - -
BEIGT
5. Sintakse:

JZ, etiķete
- - - - - - - -
- - - - - - - -
Etiķete: - - - - - - - -
- - - - - - - -
BEIGT

6. Sintakse:

JNZ, etiķete
- - - - - - - -
- - - - - - - -
Etiķete: - - - - - - - -
- - - - - - - -
BEIGT

Zvana un lēciena instrukcijas:

Zvana un lēciena instrukcijas tiek izmantotas, lai izvairītos no programmas koda atkārtošanas. Kad kāds īpašs kods vairāk nekā vienu reizi tika izmantots dažādās programmas vietās, ja mēs to pieminamkonkrēts nosaukumsuzkodumēs varētu izmantot šo vārdu jebkurā programmas vietā, neievadot kodu katrai reizei. Tas samazina programmas sarežģītību. 8051 programmēšana sastāv no izsaukuma un lēciena instrukcijām, piemēram, LCALL, SJMP.

  • LCALL
  • ZVANS
  • SJMP
  • LJMP

1. Sintakse:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, etiķete
- - - - - - - -
- - - - - - - -
SJMP STOP
Etiķete: - - - - - - - -
- - - - - - - -
- - - - - - - -
pa labi
Apturēt:NOP

2. Sintakse:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, etiķete
- - - - - - - -
- - - - - - - -
SJMP STOP
Etiķete: - - - - - - - -
- - - - - - - -
- - - - - - - -
pa labi
Apturēt:NOP

Zvana un lēciena instrukcijas

Zvana un lēciena instrukcijas

Loop instrukcijas:

Cilpas instrukcijas tiek izmantotas, lai katru reizi atkārtotu bloku, veicot pieauguma un samazināšanas darbības. 8051. gadsmikrokontrollerissastāv no divu veidu cilpas instrukcijām:

  • CJNE -> salīdzini un lec, ja nav vienāds
  • DJNZ -> dekrēts un lec, ja ne nulle

1. Sintakse:

gadaCJNE
MOV A, # 00H
MOV B, # 10H
Etiķete: INC A
- - - - - -
- - - - - -
CJNE A, etiķete

2. Sintakse:

gadaDJNE

MOV R0, # 10H
Etiķete: - - - - - -
- - - - - -
DJNE R0, etiķete
- - - - - -
- - - - - -
BEIGT

Loģisko instrukciju komplekts:

8051 mikrokontrolleru instrukciju kopa nodrošina AND, OR, XOR, TEST, NOT un Būla loģiskās instrukcijas kopai un notīra bitus, pamatojoties uz nepieciešamību programmā.

Loģisko instrukciju komplekts

Loģisko instrukciju komplekts

1. Sintakse:

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

2. Sintakse:

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

3. Sintakse:

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

Pārmaiņu operatori

Maiņu operatori tiek izmantoti efektīvai datu nosūtīšanai un saņemšanai. 8051. gadsmikrokontrollerissastāv no četriem maiņu operatoriem:

  • RR -> Pagriezt pa labi
  • RRC -> Pagrieziet pa labi caur pārvadāšanu
  • RL -> Pagriezt pa kreisi
  • RLC -> Pagriezt pa kreisi caur pārvadāšanu

Pagriezt pa labi (RR):

Šajā pārslēgšanas operācijā MSB kļūst par LSB un visi biti sērijveidā pāriet labās puses virzienā.

Sintakse:

MOV A, # 25h
RR A

Pagriezt pa kreisi (RL):

Šajā pārslēgšanas operācijā MSB kļūst par LSB un visi biti sērijveidā pāriet uz kreiso pusi.

Sintakse:

MOV A, # 25h
RL A

RRC pagrieziet pa labi caur Carry:

Šajā novirzīšanas operācijā LSB pārvietojas, lai veiktu pārnesi, un pārnešana kļūst par MSB, un visi biti tiek pārvietoti pa labi pa labi pa labi.

Sintakse:

MOV A, # 27h
RRC A

RLC pagriezt pa kreisi caur pārvadāšanu:

Šajā pārvietošanas operācijā MSB pārvietojas, lai veiktu pārnēsāšanu, un pārnēsāšana kļūst par LSB, un visi biti pāriet pa kreiso pusi bitu pa bitiem.

Sintakse:

MOV A, # 27h
RLC A

Iegultās C pamata programmas:

Themikrokontrollerisprogrammēšana katram operētājsistēmas tipam ir atšķirīga. Tur ir daudzas operētājsistēmas piemēram, Linux, Windows, RTOS un tā tālāk. Tomēr RTOS ir vairākas priekšrocības iegulto sistēmu izstrādē. Daži no Asamblejas līmeņa programmēšanas piemēri ir sniegti zemāk.

LED mirgo, izmantojot 8051mikrokontrolleris:

  • Skaits Parādīts 7 segmentu displejā, izmantojot 8051 mikrokontrolleru
  • Taimera / skaitītāja aprēķini un programma, izmantojot 8051mikrokontrolleris
  • Sērijas komunikācijas aprēķini un programma, izmantojot 8051mikrokontrolleris

LED programmas ar 8051 Microcontrller

1. WAP, lai pārslēgtu PORT1 gaismas diodes

ORG 0000H
TAGLE: MOV P1, # 01 //pārvietot00000001 uz p1 reģistru //
CALL DELAY // izpildīt kavēšanos //
MOV A, P1 // pārvietotiesp1 vērtībauz akumulatoru //
CPL A // papildina A vērtību //
MOV P1, A // pārvietojiet 11111110 uz port1 reģistru //
CALL DELAY // izpildīt kavēšanos //
SJMP TAGLE
KAVĒJUMS: MOV R5, # 10H // slodzes reģistrs R5 ar 10 //
DIVI: MOV R6, # 200 // slodzes reģistrs R6 ar 200 //
VIENS: MOV R7, # 200 // slodzes reģistrs R7 ar 200 //
DJNZ R7, $ // samazinās R7, līdz tas būs nulle //
DJNZ R6, ONE // samazinājums R7, līdz tas ir nulle //
DJNZ R5, TWO // samazinājums R7, līdz tas ir nulle //
RET // atgriezieties pie galvenās programmas //
BEIGT

Taimera / skaitītāja aprēķini un programma, izmantojot 8051 Mledus kontrolieris:

Kavēšanās ir viens no svarīgiem faktoriem lietojumprogrammu izstrādē. The taimeri un skaitītāji ir datora aparatūras komponentimikrokontrolleris, kas tiek izmantoti daudzās lietojumprogrammās, lai nodrošinātu precīzu laika aizturi ar skaitīšanas impulsiem. Bcitus uzdevumus realizē programmatūras tehnika.

1. WAP, lai aprēķinātu 500us laika aizkavi.

MOV TMOD, # 10H // izvēlieties taimera režīmu pēc reģistriem //
MOV TH1, # 0FEH // aiztures laiks tiek saglabāts augstākā bitā //
MOV TL1, # 32H // aiztures laiks tiek saglabāts mazbītā //
JNB TF1, $ // samazina taimera vērtību līdz nullei //
CLR TF1 // notīriet taimera karodziņumazliet//
CLR TR1 // taimera izslēgšana //

2. WAP, lai pārslēgtu gaismas diodesAr5seklaika aizture

ORG 0000H
ATGRIEZTIES: MOV PO, # 00H
AICINĀT KAVĒŠANOS
MOV P0, # 0FFH
AICINĀT KAVĒŠANOS
ATGRIEZTIES ATGRIEZTIES
KAVĒJUMS: MOV R5, # 50H // slodzes reģistrs R5 ar 50 //
KAVĒJUMS1: MOV R6, # 200 // slodzes reģistrs R6 ar 200 //
2. kavēšanās: MOV R7, # 229 // slodzes reģistrs R7 ar 200 //
DJNZ R7, $ // samazinās R7, līdz tas būs nulle //
DJNZ R6, DELAY2 // samazina R6, līdz tas ir nulle //
DJNZ R5, DELAY1 // samazina R5 līdz nullei //
RET // atgriezieties pie galvenās programmas //
BEIGT

3. WAP, lai saskaitītu 250 impulsus, izmantojot režīmu0 skaits0

Sintakse:

ORG 0000H
MOV TMOD, # 50H // atlasiet skaitītāju //
MOV TH0, # 15 // pārvietot skaitīšanas impulsus uz augstāku bitu //
MOV TH1, # 9FH //pārvietotskaitīšanas impulsi, apakšējais bits //
IESTATĪT TR0 // taimeri //
JNB $ // samazina skaitīšanas vērtību līdz nullei //
CLR TF0 // notīriet skaitītāju, karodziņumazliet//
CLR TR0 // taimera apturēšana //
BEIGT

Sērijas komunikācijas programmēšana, izmantojot 8051 Mledus kontrolieris:

Seriālā komunikācija parasti izmanto datu pārsūtīšanai un saņemšanai. 8051. gadsmikrokontrollerissastāv no UART / USART sērijveida sakariem, un signālus pārraida un saņemTxun Rx tapas. UART komunikācija datus pārsūta pa bitiem pēc kārtas. UART ir pusduplekss protokols, kas pārsūta un saņem datus, bet ne vienlaikus.

1. WAP, lai pārsūtītu rakstzīmes uz Hyper Terminal

MOV SCON, # 50H // iestatiet sērijveida sakarus //
MOV TMOD, # 20H // izvēlieties taimera režīmu //
MOV TH1, # -3 // iestatiet pārraides ātrumu //
IESTATĪT TR1 // taimeri //
MOV SBUF, # ’S’ // nosūta S uz seriālo logu //
JNB TI, $ // taimera samazināšanas vērtība, līdz tā ir nulle //
CLR RI // notīrīt saņemšanas pārtraukumu //
CLR TR1 // nodzēst taimeri //

2. WAP, lai pārsūtītu rakstzīmi Saņemt, izmantojot Hyper Terminal

MOV SCON, # 50H // iestatiet sērijveida sakarus //
MOV TMOD, # 20H // izvēlieties taimera režīmu //
MOV TH1, # -6 // iestatiet pārraides ātrumu //
IESTATĪT TR1 // uz taimera //
MOV SBUF, # ’S’ // nosūta S uz seriālo logu //
JNB RI, $ // taimera samazināšanas vērtība, līdz tā ir nulle //
CLR RI // notīrīt saņemšanas pārtraukumu //
MOV P0, SBUF // nosūtīt SBUF reģistra vērtību portam0 //
CLR TR1 // nodzēst taimeri //

Īsumā tas attiecas uz 8051 programmēšanu asamblejas valodā ar programmām, kuru pamatā ir piemērs. Mēs ceram, ka šī atbilstošā informācija par montāžas valodu noteikti būs noderīga lasītājiem, un mēs ceram uz viņu vērtīgajiem komentāriem zemāk esošajā komentāru sadaļā.