Úvod do programování 8051 v assembleru

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





Montážní jazyk je nízkoúrovňový programovací jazyk používaný k psaní programového kódu z hlediska mnemotechniky. I když v současné době existuje mnoho jazyků na vysoké úrovni, v mnoha aplikacích se populárně používá programovací jazyk assembleru, který lze použít k přímé manipulaci s hardwarem. Používá se také k psaní souboru 8051 programovací kód efektivně s menším počtem hodinových cyklů tím, že spotřebuje méně paměti ve srovnání s ostatními jazyky na vysoké úrovni.

8051 Programování v montážním jazyce

8051 Programování



8051 Programování v montážním jazyce

Montážní jazyk je plně programovací jazyk související s hardwarem. Integrovaní návrháři musí mít před napsáním programu dostatečné znalosti o hardwaru konkrétního procesoru nebo řadičů. Jazyk sestavení je vyvíjen mnemotechnickými pomůckami, takže uživatelé mu nemohou snadno rozumět při úpravách programu.


8051 Programování v montážním jazyce

8051 Programování v montážním jazyce



Sestavovací programovací jazyk je vyvíjen různými překladači a bowling' je nejvhodnější pro mikrokontrolérprogramování rozvoj. Mmikrokontrolérynebo procesory mohou rozumět pouze binárnímu jazyku ve formě „0s nebo 1s“. Assembler převede montážní jazyk na binární jazyk a poté jej uloží domikrokontrolérpaměť k provedení konkrétního úkolu.

8051 Mikrokontrolér Architecuture

8051mikrokontrolérje Harvardská architektura založená na CISC a má periferní zařízení jako 32 I / O, časovače / čítače, sériovou komunikaci a paměti. Themikrokontrolérvyžaduje program pro provádění operací, které vyžadují paměť pro uložení a pro čtení funkcí. 8051mikrokontrolérskládá se z paměti RAM a ROM pro uložení pokynů.

8051 Mikrokontrolér Arctitecuture

8051 Mikrokontrolér Architecuture

Registr je hlavní součástí zpracovatelé amikrokontroléry který je obsažen v paměti, která poskytuje rychlejší způsob sběru a ukládání dat. Programování montážního jazyka 8051 je založeno na paměťových registrech. Pokud chceme manipulovat s daty do procesoru nebo řadiče odečtením, sčítáním atd., Nemůžeme to udělat přímo v paměti, ale ke zpracování a uložení dat potřebuje registry.Mikrokontroléryobsahují několik typů registrů, které lze klasifikovat podle jejich pokynů nebo obsahu, který v nich funguje.

Programy mikrokontroléru 8051 v montážním jazyce

Sestavovací jazyk je tvořen prvky, které se všechny používají k zápisu programupostupným způsobem. Při psaní programování v montážním jazyce postupujte podle daných pravidel.


Pravidla jazyka shromáždění

  • Kód sestavy musí být napsán velkými písmeny
  • Za štítky musí následovat dvojtečka (štítek :)
  • Všechny symboly a štítky musí začínat písmenem
  • Všechny komentáře jsou psány malými písmeny
  • Posledním řádkem programu musí být směrnice END

Mnemotechnické pomůcky montážního jazyka jsou ve formě op-kódu, jako je MOV, ADD, JMP atd., Které se používají k provádění operací.

Operační kód: Operační kód je jediná instrukce, kterou může vykonat CPU. Zde je operační kód instrukcí MOV.

Operandy: Operandy jsou jeden údaj, který lze obsluhovat operačním kódem. Příklad operace násobení se provádí operandy, které se vynásobí operandem.

Syntaxe: MUL a,b

Prvky programování montážního jazyka:

  • Shromážděte pokyny
  • Sada instrukcí
  • Režimy adresování

Pokyny pro sestavení:

Směrnice pro sestavení udávají pokyny pro CPU. 8051mikrokontrolérsestává z různých druhů montážních směrnic, které dávají směr řídicí jednotce. Nejužitečnější směrnice jsou programování 8051, například:

  • ORG
  • DB
  • EQU
  • KONEC

ORG(původ): Tato směrnice označuje začátek programu. Slouží k nastavení adresy registru během sestavování. Například ORG 0000h řekne kompilátoru veškerý následující kód počínaje adresou 0000h.

Syntax: ORG 0000h

DB(definovat byte): Definovaný bajt se používá k povolení řetězce bajtů. Například vytiskněte „EDGEFX“, přičemž každý znak je převzat z adresy a nakonec vytiskne „řetězec“ DB přímo s uvozovkami.

Syntax:

ORG 0000h

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

EQU (ekvivalent): Ekvivalentní směrnice se používá k vyrovnání adresy proměnné.

Syntax:

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

KONEC: Směrnice END se používá k označení konce programu.

Syntax:

reg ekv,09h

—————–
—————–
MOVreg,# 2h
KONEC

Režimy adresování:

Způsob přístupu k datům se nazývá režim adresování. CPU může přistupovat k datům různými způsoby pomocí režimů adresování. 8051mikrokontrolérskládá se z pěti režimů adresování, jako jsou:

  • Režim okamžitého adresování
  • Zaregistrujte režim adresování
  • Režim přímého adresování
  • Režim nepřímého adresování
  • Režim adresování základního indexu

Režim okamžitého adresování:

V tomto režimu adresování musí být zdrojem hodnota, za kterou může následovat znak „#“ a cíl musí být Registry SFR, registry pro všeobecné účely a adresa. Slouží k okamžitému uložení hodnoty do paměťových registrů.

Syntax:

MOV A, # 20h // A jeanregistr akumulátoru, 20 je uloženo v A //
MOV R0,# 15 // R0 je registr pro obecné účely 15 je uložen v registru R0 //
MOV P0, # 07h // P0 je registr SFR 07 je uložen v P0 //
MOV 20h,# 05h // 20h je adresa registru 05 uloženého ve 20h //

Bývalý:

co je nic?

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, konečná hodnota je uložena v R0 //

Registrovat režim adresování:

V tomto režimu adresování musí být zdrojem a cílem registr, ale nikoli registry pro obecné účely. Data se tedy v rámci bankovní registry pro všeobecné účely .

Syntax:

MOV A, B // A je registr SFR, B je registr pro obecné účely //
MOV R0, R1 // Neplatná instrukce, GPR na GPR není možné //

BÝVALÝ:

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

Režim přímého adresování

V tomto režimu adresování musí být zdroj nebo cíl (nebo zdroj i cíl) adresa, ale ne hodnota.

Syntax:

MOV A,20h // 20h je adresa A je registr //
MOV 00h, 07h // oba jsou adresovány z registrů GPS //

Bývalý:

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

Režim nepřímého adresování:

V tomto režimu adresování musí být zdroj nebo cíl (nebo cíl nebo zdroj)nanepřímá adresa, ale ne hodnota. Tento režim adresování podporuje koncept ukazatele. Ukazatel je proměnná, která se používá k uložení adresy druhé proměnné. Tento koncept ukazatele se používá pouze pro registry R0 a R1.

Syntax:

Hodnota MOVR0, # 01h // 01 je uložena v registru R0, adresa R0 je 08h //
MOV R1, # 08h // R1 je proměnná ukazateleobchodyadresa (08h) z R0 //
MOV 20h,@ R1 // 01 hodnota je uložena na 20h adrese registru GP //

Režim nepřímého adresování

Režim nepřímého adresování

Režim adresování základního indexu:

Tento režim adresování se používá ke čtení dat z externí paměť nebo paměť ROM . Všechny režimy adresování nemohou číst data z paměti kódu. Kód musí číst registrem DPTR. DPTR se používá k nasměrování dat v kódu nebo externí paměti.

Syntax:

MOVC A, @ A + DPTR // C označuje paměť kódu //
MOCX A, @ A + DPTR // X označuje externí paměť //
EX: MOV A, # 00H // 00H je uložen v registru A //
MOV DPTR, # 0500H // DPTR body adresa 0500h v paměti //
MOVC A, @ A + DPTR // odeslat hodnotunaregistr A //
MOV P0, A // datum odeslání A registrátorovi PO //

Sada instrukcí:

Sada instrukcí je struktura řadiče nebo procesoru, který poskytuje řadiči příkazy, které mají řadiči pomoci při zpracování dat. Sada instrukcí se skládá z instrukcí, nativních datových typů, režimů adresování, registrů přerušení, výjimečné manipulace a architektury paměti. The 8051mikrokontrolér může postupovat podle pokynů CISC s architekturou Harvard. V případě programování 8051 zahrnují různé typy instrukcí CISC:

  • Sada pokynů pro přenos dat
  • Sekvenční instrukční sada
  • Sada aritmetických instrukcí
  • Větvení Iinstrukcesoubor
  • Smyčka Instrcution Set
  • Sada podmíněných pokynů
  • Sada bezpodmínečných pokynů
  • Sada logických instrukcí
  • Booleovská instrukční sada

Sada aritmetických instrukcí:

Aritmetické instrukce provádějí základní operace, jako například:

  • Přidání
  • Násobení
  • Odčítání
  • Divize

Přidání:

ORG 0000h
MOV R0, # 03H // přesunout hodnotu 3 do registru R0 //
MOV A, # 05H // přesunout hodnotu 5 do akumulátoru A //
Přidat A, 00H //přidathodnotu s hodnotou R0 a uloží výsledekv//
KONEC

Násobení:

ORG 0000h
MOV R0, # 03H // přesunout hodnotu 3 do registru R0 //
MOV A, # 05H // přesunout hodnotu 5 do akumulátoru A //
MUL A, 03H //Znásobenovýsledek je uložen v akumulátoru A //
KONEC

Odčítání:

ORG 0000h
MOV R0, # 03H // přesuňte hodnotu 3 k registraci R0 //
MOV A, # 05H // přesunout hodnotu 5 do akumulátoru A //
SUBB A, 03H // Výsledná hodnota je uložena v akumulátoru A //
KONEC

Divize:

ORG 0000h
MOV R0, # 03H // přesuňte hodnotu 3 k registraci R0 //
MOV A, # 15H // přesunout hodnotu 5 do akumulátoru A //
DIV A, 03H // konečná hodnota je uložena v akumulátoru A //
KONEC

Podmíněné pokyny

CPU provádí instrukce na základě podmínky kontrolou stavu jednoho bitu nebo stavu bajtu. 8051mikrokontrolérsestává z různých podmíněných pokynů, jako například:

  • JB -> Skočte níže
  • JNB -> Skočit, pokud ne níže
  • JC -> Skok, pokud Carry
  • JNC -> Přejít, pokudneNést
  • JZ -> Přejít, pokud je nula
  • JNZ -> Přejít, pokudneNula
Podmíněné pokyny

Podmíněné pokyny

1. Syntaxe:

JB P1.0, štítek
- - - - - - -
- - - - - - -
Štítek: - - - - - - - -
- - - - - - -
KONEC

2. Syntaxe:

JNB P1.0, štítek
- - - - - - -
- - - - - - -
Štítek: - - - - - - - -
- - - - - - -
KONEC

3. Syntaxe:

JC, štítek
- - - - - - -
- - - - - - -
Štítek: - - - - - - - -
- - - - - - -
KONEC

4. Syntaxe:

JNC, štítek
- - - - - - -
- - - - - - -
Štítek: - - - - - - - -
- - - - - - -
KONEC
5. Syntaxe:

JZ, štítek
- - - - - - -
- - - - - - -
Štítek: - - - - - - - -
- - - - - - -
KONEC

6. Syntaxe:

JNZ, štítek
- - - - - - -
- - - - - - -
Štítek: - - - - - - - -
- - - - - - -
KONEC

Pokyny pro volání a skok:

Pokyny pro volání a skok se používají k zabránění replikace kódu programu. Když se nějaký konkrétní kód použil vícekrát na různých místech v programu, pokud to zmínímekonkrétní názevnapoté kódtento název bychom mohli použít kdekoli v programu, aniž bychom pokaždé zadávali kód. To snižuje složitost programu. Programování 8051 se skládá z pokynů pro volání a skok, jako jsou LCALL, SJMP.

  • LCALL
  • HOVOR
  • SJMP
  • LJMP

1. Syntaxe:

ORG 0000h
- - - - - - -
- - - - - - -
ACALL, štítek
- - - - - - -
- - - - - - -
SJMP STOP
Štítek: - - - - - - - -
- - - - - - -
- - - - - - -
že jo
STOP:NOP

2. Syntaxe:

ORG 0000h
- - - - - - -
- - - - - - -
LCALL, štítek
- - - - - - -
- - - - - - -
SJMP STOP
Štítek: - - - - - - - -
- - - - - - -
- - - - - - -
že jo
STOP:NOP

Pokyny pro volání a skok

Pokyny pro volání a skok

Pokyny smyčky:

Pokyny smyčky se používají k opakování bloku pokaždé, když se provádí operace přírůstku a snížení. 8051mikrokontrolérskládat se ze dvou typů instrukcí smyčky:

  • CJNE -> porovnat a skočit, pokud není stejné
  • DJNZ -> snížení a skok, pokud ne nula

1. Syntaxe:

zCJNE
MOV A, # 00H
MOV B, # 10H
Označení: INC A
- - - - - -
- - - - - -
CJNE A, štítek

2. Syntaxe:

zDJNE

MOV R0, # 10H
Označení: - - - - - -
- - - - - -
DJNE R0, štítek
- - - - - -
- - - - - -
KONEC

Sada logických instrukcí:

Sada instrukcí mikrokontroléru 8051 poskytuje logické instrukce AND, OR, XOR, TEST, NOT a Boolean pro sadu a vymaže bity na základě potřeby v programu.

Sada logických instrukcí

Sada logických instrukcí

1. Syntaxe:

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

2. Syntaxe:

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

3. Syntaxe:

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

Řazení operátorů

Operátoři směny se používají k efektivnímu odesílání a přijímání dat. 8051mikrokontrolérskládat se ze čtyř směnných operátorů:

  • RR -> Otočit doprava
  • RRC -> Otočit doprava skrz nošení
  • RL -> Otočit doleva
  • RLC -> Otočit doleva přes přenášení

Otočit doprava (RR):

V této operaci řazení se MSB stane LSB a všechny bity se posune po pravé straně bit-by-bit, sériově.

Syntax:

MOV A, # 25h
RR A

Otočit doleva (RL):

V této operaci řazení se MSB stane LSB a všechny bity se posune směrem k levé straně bit-by-bit, sériově.

Syntax:

MOV A, # 25h
RL A

RRC otáčení doprava skrz Carry:

V této operaci řazení se LSB přesune do carry a z carry se stane MSB a všechny bity se posunou směrem k pravé straně bit po bitové pozici.

Syntax:

MOV A, # 27h
RRC A

RLC Rotate Left through Carry:

V této operaci řazení se MSB přesune do carry a z carry se stane LSB a všechny bity se posunou směrem k levé straně v bit-by-bit pozici.

Syntax:

MOV A, # 27h
RLC A

Základní vestavěné programy C:

Themikrokontrolérprogramování se liší pro každý typ operačního systému. Existují mnoho operačních systémů jako Linux, Windows, RTOS a tak dále. RTOS má však pro vývoj vestavěného systému několik výhod. Některé příklady programování na úrovni shromáždění jsou uvedeny níže.

LED bliká při použití s ​​8051mikrokontrolér:

  • Zobrazení čísla na 7segmentovém displeji pomocí mikrokontroléru 8051
  • Výpočty časovače / čítače a programování pomocí 8051mikrokontrolér
  • Výpočty sériové komunikace a program využívající 8051mikrokontrolér

LED programy s 8051 Mmikrokontrolér

1. WAP přepíná LED diody PORT1

ORG 0000H
TOGLE: MOV P1, # 01 //přestěhovat se00000001 do registru p1 //
CALL DELAY // provést zpoždění //
MOV A, P1 // pohybhodnota p1do akumulátoru //
CPL A // doplnit hodnotu //
MOV P1, A // přesun 11111110 do registru port1 //
CALL DELAY // provést zpoždění //
SJMP TOGLE
ZPOŽDĚNÍ: MOV R5, # 10H // načíst registr R5 s 10 //
DVA: MOV R6, # 200 // načíst registr R6 s 200 //
JEDEN: MOV R7, # 200 // načíst registr R7 s 200 //
DJNZ R7, $ // snižovat R7, dokud nebude nula //
DJNZ R6, JEDEN // snížení R7, dokud není nula //
DJNZ R5, DVA // snižovat R7, dokud nebude nula //
RET // návrat k hlavnímu programu //
KONEC

Výpočty časovače / počítadla a program s využitím 8051 M.mikrokontrolér:

Zpoždění je jedním z důležitých faktorů při vývoji aplikačního softwaru. The časovače a čítače jsou hardwarové komponentymikrokontrolér, které se používají v mnoha aplikacích k zajištění přesného časového zpoždění s počtem impulzů. BÚkoly jsou realizovány softwarovou technikou.

1. WAP pro výpočet časového zpoždění 500us.

MOV TMOD, # 10H // výběr režimu časovače pomocí registrů //
MOV TH1, # 0FEH // uloží dobu zpoždění do vyššího bitu //
MOV TL1, # 32H // uloží dobu zpoždění do nízkého bitu //
JNB TF1, $ // zmenší hodnotu časovače, dokud nebude nula //
CLR TF1 // vymazat příznak časovačebit//
CLR TR1 // VYPNUTÝ časovač //

2. WAP pro přepínání LEDs tím5sekčasová prodleva

ORG 0000H
NÁVRATNOST: MOV PO, # 00H
ACALL DELAY
MOV P0, # 0FFH
ACALL DELAY
NÁVRATNOST SJUMPU
ZPOŽDĚNÍ: MOV R5, # 50H // načíst registr R5 s 50 //
ZPOŽDĚNÍ 1: MOV R6, # 200 // načíst registr R6 s 200 //
ZPOŽDĚNÍ 2: MOV R7, # 229 // načíst registr R7 s 200 //
DJNZ R7, $ // snižovat R7, dokud nebude nula //
DJNZ R6, DELAY2 // snižovat R6, dokud není nula //
DJNZ R5, DELAY1 // snížení R5, dokud není nula //
RET // návrat k hlavnímu programu //
KONEC

3. WAP pro počítání 250 pulzů pomocí mode0 count0

Syntax:

ORG 0000H
MOV TMOD, # 50H // výběr počitadla //
MOV TH0, # 15 // posunout čítací impulsy o vyšší bit //
MOV TH1, # 9FH //přestěhovat sepočet impulzů, spodní bit //
NASTAVTE TR0 // ZAPNUTÍ časovače //
JNB $ // zmenší počet na nulu //
CLR TF0 // vymazat počítadlo, příznakbit//
CLR TR0 // zastavit časovač //
KONEC

Programování sériové komunikace pomocí 8051 M.mikrokontrolér:

Sériová komunikace se běžně používá pro přenos a příjem dat. 8051mikrokontrolérse skládají ze sériové komunikace UART / USART a signály jsou přenášeny a přijímányTxa Rx kolíky. Komunikace UART přenáší data bit-by-bit sériově. UART je poloduplexní protokol, který přenáší a přijímá data, ale ne současně.

1. WAP pro přenos znaků do Hyper Terminalu

MOV SCON, # 50H // nastavení sériové komunikace //
MOV TMOD, # 20H // výběr režimu časovače //
MOV TH1, # -3 // nastavení přenosové rychlosti //
NASTAVTE TR1 // ZAPNUTÍ časovače //
MOV SBUF, # ‘S’ // přenášet S do sériového okna //
JNB TI, $ // snižte hodnotu časovače, dokud nebude nula //
CLR RI // vymazat přerušení příjmu //
CLR TR1 // časovač vymazání //

2. WAP pro přenos Příjmu postavy Hyper Terminálem

MOV SCON, # 50H // nastavení sériové komunikace //
MOV TMOD, # 20H // výběr režimu časovače //
MOV TH1, # -6 // nastavení přenosové rychlosti //
NASTAVTE TR1 // na časovači //
MOV SBUF, # ‘S’ // přenášet S do sériového okna //
JNB RI, $ // snižte hodnotu časovače, dokud není nula //
CLR RI // vymazat přerušení příjmu //
MOV P0, SBUF // odeslání hodnoty registru SBUF na port0 //
CLR TR1 // časovač vymazání //

Jedná se o programování 8051 v jazyce Assembly ve zkratce s ukázkovými programy. Doufáme, že tyto adekvátní informace o montážním jazyce budou pro čtenáře určitě užitečné a těšíme se na jejich cenné komentáře v sekci komentářů níže.