Wprowadzenie do programowania 8051 w języku asemblera

Wypróbuj Nasz Instrument Do Eliminowania Problemów





Język asemblera jest językiem programowania niskiego poziomu używanym do pisania kodu programu w zakresie mnemoniki. Chociaż istnieje obecnie zapotrzebowanie na wiele języków wysokopoziomowych, język programowania asemblerowego jest powszechnie używany w wielu aplikacjach i może być używany do bezpośredniej manipulacji sprzętem. Służy również do pisania Kod programowania 8051 wydajnie z mniejszą liczbą cykli zegara, zużywając mniej pamięci w porównaniu z innymi językami wysokiego poziomu.

8051 Programowanie w języku asemblera

8051 Programowanie



8051 Programowanie w języku asemblera

Język asemblera jest językiem programowania w pełni powiązanym ze sprzętem. Projektanci oprogramowania wbudowanego muszą mieć wystarczającą wiedzę na temat sprzętu danego procesora lub kontrolerów przed napisaniem programu. Język asemblera jest rozwijany przez mnemoniki, dlatego użytkownicy nie mogą go łatwo zrozumieć, modyfikując program.


8051 Programowanie w języku asemblera

8051 Programowanie w języku asemblera



Asembler jest rozwijany przez różne kompilatory i kręgielnia' najlepiej nadaje się do mikrokontrolerprogramowanie rozwój. Microcontrollerslub procesory mogą rozumieć tylko język binarny w postaci „0 lub 1” Asembler konwertuje język asemblera na język binarny, a następnie przechowuje go wmikrokontrolerpamięć do wykonania określonego zadania.

8051 Microcontroller Architecuture

8051mikrokontrolerjest Architektura Harvard oparta na CISC i ma urządzenia peryferyjne, takie jak 32 we / wy, timery / liczniki, komunikację szeregową i pamięć. Plikmikrokontrolerwymaga programu do wykonywania operacji wymagających pamięci do zapisywania i odczytywania funkcji. 8051mikrokontrolerskłada się z pamięci RAM i ROM do przechowywania instrukcji.

8051 Mikrokontroler Arctitecuture

8051 Microcontroller Architecuture

Rejestr jest główną częścią programu procesory imikrokontrolery który znajduje się w pamięci, co zapewnia szybszy sposób gromadzenia i przechowywania danych. Programowanie w języku asemblera 8051 jest oparte na rejestrach pamięci. Jeśli chcemy manipulować danymi do procesora lub kontrolera, wykonując odejmowanie, dodawanie itp., Nie możemy tego zrobić bezpośrednio w pamięci, ale potrzebuje on rejestrów do przetwarzania i przechowywania danych.Mikrokontroleryzawierają kilka rodzajów rejestrów, które można klasyfikować według instrukcji lub treści, które w nich działają.

8051 Programy mikrokontrolera w języku asemblera

Język asemblera składa się z elementów, w których wszystkie są używane do pisania programusposób sekwencyjny. Postępuj zgodnie z podanymi zasadami, aby pisać programowanie w języku asemblera.


Zasady języka asemblera

  • Kod zespołu musi być zapisany wielkimi literami
  • Po etykietach należy umieścić dwukropek (etykieta :)
  • Wszystkie symbole i etykiety muszą zaczynać się od litery
  • Wszystkie komentarze są wpisywane małymi literami
  • Ostatnim wierszem programu musi być dyrektywa END

Mnemoniki języka asemblera mają postać kodu operacyjnego, takiego jak MOV, ADD, JMP i tak dalej, które są używane do wykonywania operacji.

Kod operacji: Kod operacyjny to pojedyncza instrukcja, która może zostać wykonana przez procesor. Tutaj kod operacyjny to instrukcja MOV.

Operandy: Operandy to pojedynczy fragment danych, który może być obsługiwany przez kod operacyjny. Na przykład operacja mnożenia jest wykonywana przez operandy, które są mnożone przez operand.

Składnia: MUL a,b

Elementy programowania w asemblerze:

  • Wytyczne dotyczące montażu
  • Zestaw instrukcji
  • Tryby adresowania

Instrukcje montażu:

Dyrektywy asemblacji podają wskazówki dla CPU. 8051mikrokontrolerskłada się z różnych rodzajów dyrektyw montażowych, które określają kierunek działania jednostki sterującej. Najbardziej przydatne dyrektywy to programowanie 8051, takie jak:

  • ORG
  • DB
  • EQU
  • KONIEC

ORG(pochodzenie): Ta dyrektywa wskazuje początek programu. Służy do ustawienia adresu rejestru podczas asemblacji. Na przykład ORG 0000h informuje kompilator o całym kolejnym kodzie zaczynającym się od adresu 0000h.

Składnia: ORG 0000h

DB(zdefiniuj bajt): Bajt definiujący służy do zezwalania na ciąg bajtów. Na przykład wypisz „EDGEFX”, w którym każdy znak jest pobierany przez adres, a na końcu drukuje „ciąg” przez DB bezpośrednio w podwójnych cudzysłowach.

Składnia:

ORG 0000h

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

EQU (odpowiednik): Odpowiednia dyrektywa służy do zrównania adresu zmiennej.

Składnia:

rej equ,09h
—————–
—————–
MOVrej,# 2h

KONIEC: Dyrektywa END służy do wskazania końca programu.

Składnia:

rej equ,09h

—————–
—————–
MOVrej,# 2h
KONIEC

Tryby adresowania:

Sposób dostępu do danych nazywany jest trybem adresowania. CPU może uzyskać dostęp do danych na różne sposoby, korzystając z trybów adresowania. 8051mikrokontrolerskłada się z pięciu trybów adresowania, takich jak:

  • Tryb natychmiastowego adresowania
  • Zarejestruj tryb adresowania
  • Tryb adresowania bezpośredniego
  • Tryb adresowania pośredniego
  • Tryb adresowania indeksu podstawowego

Tryb natychmiastowego adresowania:

W tym trybie adresowania źródłem musi być wartość, po której może następować znak „#”, a miejscem docelowym musi być Rejestry SFR, rejestry ogólnego przeznaczenia i adres. Służy do natychmiastowego zapamiętania wartości w rejestrach pamięci.

Składnia:

MOV A, # 20h // A jestnaRejestr akumulatorów, 20 jest przechowywanych w A //
MOV R0,# 15 // R0 jest rejestrem ogólnego przeznaczenia 15 jest przechowywany w rejestrze R0 //
MOV P0, # 07h // P0 to rejestr SFR07 jest przechowywany w P0 //
MOV 20h,# 05h // 20h to adres rejestru 05 przechowywanego w 20h //

Były:

MOV R0, nr 1
MOV R0, # 20 // R0<—R0[15] +20, ostateczna wartość jest przechowywana w R0 //

Zarejestruj tryb adresowania:

W tym trybie adresowania źródło i cel muszą być rejestrami, ale nie rejestrami ogólnego przeznaczenia. Więc dane nie są przenoszone w ramach rejestry bankowe ogólnego przeznaczenia .

Składnia:

MOV A, B // A to rejestr SFR, B to rejestr ogólnego przeznaczenia //
MOV R0, R1 // Błędna instrukcja, GPR do GPR niemożliwy //

BYŁY:

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

Tryb adresowania bezpośredniego

W tym trybie adresowania źródło lub miejsce docelowe (lub zarówno źródło, jak i miejsce docelowe) musi być adresem, ale nie wartością.

Składnia:

MOV A,20h // 20h to adres A to rejestr //
MOV 00h, 07h // oba są adresowane z rejestrów GPS //

Były:

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

Tryb adresowania pośredniego:

W tym trybie adresowania źródło lub cel (lub miejsce docelowe lub źródło) musi byćdoadres pośredni, ale nie wartość. Ten tryb adresowania obsługuje koncepcję wskaźnika. Wskaźnik jest zmienną używaną do przechowywania adresu innej zmiennej. Ta koncepcja wskaźnika jest używana tylko dla rejestrów R0 i R1.

Składnia:

Wartość MOVR0, # 01h // 01 jest przechowywana w rejestrze R0, adres R0 to 08h //
MOV R1, # 08h // R1 to zmienna wskaźnikowasklepyadres (08h) R0 //
MOV 20h,@ R1 // 01 wartość jest przechowywana w adresie 20h rejestru GP //

Tryb adresowania pośredniego

Tryb adresowania pośredniego

Tryb adresowania indeksu podstawowego:

Ten tryb adresowania służy do odczytywania danych z pliku pamięć zewnętrzna lub pamięć ROM . Żadne tryby adresowania nie mogą odczytać danych z pamięci kodów. Kod musi czytać przez rejestr DPTR. DPTR służy do wskazywania danych w kodzie lub pamięci zewnętrznej.

Składnia:

MOVC A, @ A + DPTR // C wskazuje pamięć kodu //
MOCX A, @ A + DPTR // X wskazują pamięć zewnętrzną //
EX: MOV A, # 00H // 00H jest przechowywany w rejestrze A //
MOV DPTR, # 0500H // DPTR wskazuje na adres 0500h w pamięci //
MOVC A, @ A + DPTR // wyślij wartośćdorejestr A //
MOV P0, A // data wysłania A do rejestratora PO //

Zestaw instrukcji:

Zbiór instrukcji to struktura kontrolera lub procesora, która dostarcza administratorowi poleceń prowadzących do przetwarzania danych. Zestaw instrukcji składa się z instrukcji, rodzimych typów danych, trybów adresowania, rejestrów przerwań, wyjątkowej obsługi i architektury pamięci. Plik 8051mikrokontroler może postępować zgodnie z instrukcjami CISC w architekturze Harvard. W przypadku programowania 8051 różne typy instrukcji CISC obejmują:

  • Zestaw instrukcji przesyłania danych
  • Zestaw instrukcji sekwencyjnych
  • Zestaw instrukcji arytmetycznych
  • Rozgałęzienie Ibudowazestaw
  • Zestaw instrukcji pętli
  • Zestaw instrukcji warunkowych
  • Zestaw instrukcji bezwarunkowych
  • Logiczny zestaw instrukcji
  • Boolowski zestaw instrukcji

Zestaw instrukcji arytmetycznych:

Instrukcje arytmetyczne wykonują podstawowe operacje, takie jak:

  • Dodanie
  • Mnożenie
  • Odejmowanie
  • Podział

Dodanie:

ORG 0000h
MOV R0, # 03H // przenieś wartość 3 do rejestru R0 //
MOV A, # 05H // przenieś wartość 5 na akumulator A //
Dodaj A, 00H //dodaćwartość z wartością R0 i zapisuje wynikw//
KONIEC

Mnożenie:

ORG 0000h
MOV R0, # 03H // przenieś wartość 3 do rejestru R0 //
MOV A, # 05H // przenieś wartość 5 na akumulator A //
MUL A, 03H //Pomnożonawynik jest przechowywany w akumulatorze A //
KONIEC

Odejmowanie:

ORG 0000h
MOV R0, # 03H // przenieś wartość 3 do rejestru R0 //
MOV A, # 05H // przenieś wartość 5 na akumulator A //
SUBB A, 03H // Wartość wyniku jest przechowywana w akumulatorze A //
KONIEC

Podział:

ORG 0000h
MOV R0, # 03H // przenieś wartość 3 do rejestru R0 //
MOV A, # 15H // przenieś wartość 5 na akumulator A //
DIV A, 03H // końcowa wartość jest przechowywana w akumulatorze A //
KONIEC

Instrukcje warunkowe

CPU wykonuje instrukcje w oparciu o warunek, sprawdzając status pojedynczego bitu lub status bajtu. 8051mikrokontrolerskłada się z różnych instrukcji warunkowych, takich jak:

  • JB -> Skocz poniżej
  • JNB -> Skocz, jeśli nie poniżej
  • JC -> Jump if Carry
  • JNC -> Skocz, jeślinieNieść
  • JZ -> Jump if Zero
  • JNZ -> Skocz, jeślinieZero
Instrukcje warunkowe

Instrukcje warunkowe

1. Składnia:

JB P1.0, etykieta
- - - - - - - -
- - - - - - - -
Etykieta: - - - - - - - -
- - - - - - - -
KONIEC

2. Składnia:

JNB P1.0, etykieta
- - - - - - - -
- - - - - - - -
Etykieta: - - - - - - - -
- - - - - - - -
KONIEC

3. Składnia:

JC, etykieta
- - - - - - - -
- - - - - - - -
Etykieta: - - - - - - - -
- - - - - - - -
KONIEC

4. Składnia:

JNC, etykieta
- - - - - - - -
- - - - - - - -
Etykieta: - - - - - - - -
- - - - - - - -
KONIEC
5. Składnia:

JZ, etykieta
- - - - - - - -
- - - - - - - -
Etykieta: - - - - - - - -
- - - - - - - -
KONIEC

6. Składnia:

JNZ, etykieta
- - - - - - - -
- - - - - - - -
Etykieta: - - - - - - - -
- - - - - - - -
KONIEC

Instrukcje dotyczące wezwania i skoku:

Instrukcje wywołania i skoku służą do uniknięcia replikacji kodu programu. Gdy jakiś konkretny kod został użyty więcej niż raz w różnych miejscach programu, jeśli o tym wspomnimykonkretna nazwadokodmoglibyśmy użyć tej nazwy w dowolnym miejscu programu bez wprowadzania kodu za każdym razem. Zmniejsza to złożoność programu. Programowanie 8051 składa się z instrukcji wywołania i skoku, takich jak LCALL, SJMP.

  • LCALL
  • ACALL
  • SJMP
  • LJMP

1. Składnia:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, etykieta
- - - - - - - -
- - - - - - - -
SJMP STOP
Etykieta: - - - - - - - -
- - - - - - - -
- - - - - - - -
dobrze
ZATRZYMAĆ:NOP

2. Składnia:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, etykieta
- - - - - - - -
- - - - - - - -
SJMP STOP
Etykieta: - - - - - - - -
- - - - - - - -
- - - - - - - -
dobrze
ZATRZYMAĆ:NOP

Instrukcje wywołania i skoku

Instrukcje wywołania i skoku

Instrukcje pętli:

Instrukcje pętli są używane do każdorazowego powtarzania bloku podczas wykonywania operacji zwiększania i zmniejszania. 8051mikrokontrolerskładają się z dwóch rodzajów instrukcji pętli:

  • CJNE -> porównuj i skacz, jeśli nie są równe
  • DJNZ -> zmniejsz i przeskocz, jeśli nie zero

1. Składnia:

zCJNE
MOV A, # 00H
MOV B, # 10H
Etykieta: INC A
- - - - - -
- - - - - -
CJNE A, etykieta

2. Składnia:

zDJNE

MOV R0, # 10H
Etykieta: - - - - - -
- - - - - -
DJNE R0, wytwórnia
- - - - - -
- - - - - -
KONIEC

Logiczny zestaw instrukcji:

Zestaw instrukcji mikrokontrolera 8051 zapewnia instrukcje logiczne AND, OR, XOR, TEST, NOT i Boolean dla ustawiania i czyści bity w zależności od potrzeb w programie.

Logiczny zestaw instrukcji

Logiczny zestaw instrukcji

1. Składnia:

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

2. Składnia:

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

3. Składnia:

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

Zmienni operatorzy

Operatorzy zmianowi służą do wydajnego wysyłania i odbierania danych. 8051mikrokontrolerskłada się z czterech operatorów zmianowych:

  • RR -> Obróć w prawo
  • RRC -> Rotate Right through carry
  • RL -> Obróć w lewo
  • RLC -> Obróć w lewo przez przeniesienie

Obróć w prawo (RR):

W tej operacji przesuwania MSB staje się LSB i wszystkie bity przesuwają się w prawo, bit po bicie, szeregowo.

Składnia:

MOV A, nr 25 godz
RR A

Obróć w lewo (RL):

W tej operacji przesuwania MSB staje się LSB i wszystkie bity przesuwają się kolejno w kierunku lewej strony.

Składnia:

MOV A, nr 25 godz
RL A

RRC Rotate Right through Carry:

W tej operacji przesuwania LSB przesuwa się do przenoszenia, a przeniesienie staje się MSB, a wszystkie bity są przesuwane w prawą stronę bit po bicie.

Składnia:

MOV A, nr 27
RRC A

RLC Rotate Left through Carry:

W tej operacji przesuwania MSB przesuwa się do przenoszenia, a przeniesienie staje się LSB, a wszystkie bity przesuwają się w lewo w pozycji bit po bicie.

Składnia:

MOV A, nr 27
RLC A

Podstawowe programy Embedded C:

Plikmikrokontrolerprogramowanie różni się dla każdego typu systemu operacyjnego. Tam są wiele systemów operacyjnych takie jak Linux, Windows, RTOS i tak dalej. Jednak RTOS ma kilka zalet przy tworzeniu systemów wbudowanych. Poniżej podano niektóre przykłady programowania na poziomie Assembly.

Dioda LED miga za pomocą 8051mikrokontroler:

  • Wyświetlanie liczby na 7-segmentowym wyświetlaczu za pomocą mikrokontrolera 8051
  • Obliczenia timera / licznika i programowanie przy użyciu 8051mikrokontroler
  • Obliczenia komunikacji szeregowej i programowanie przy użyciu 8051mikrokontroler

Programy LED z 8051 Microcontrller

1. WAP do przełączania diod LED PORT1

ORG 0000H
TOGLE: MOV P1, # 01 //ruszaj się00000001 do rejestru p1 //
CALL DELAY // wykonaj opóźnienie //
MOV A, P1 // ruchwartość p1do akumulatora //
CPL A // uzupełnienie wartości A //
MOV P1, A // przenieś 11111110 do rejestru portu1 //
CALL DELAY // wykonaj opóźnienie //
PRZEŁĄCZENIE SJMP
OPÓŹNIENIE: MOV R5, # 10H // załaduj rejestr R5 z 10 //
DWA: MOV R6, # 200 // załaduj rejestr R6 z 200 //
ONE: MOV R7, # 200 // załaduj rejestr R7 z 200 //
DJNZ R7, $ // zmniejsz R7 aż do zera //
DJNZ R6, ONE // zmniejsz R7 aż do zera //
DJNZ R5, TWO // zmniejsz R7 do zera //
RET // wróć do głównego programu //
KONIEC

Obliczenia timera / licznika i programowanie przy użyciu 8051 Microcontroller:

Opóźnienie jest jednym z ważnych czynników w tworzeniu oprogramowania użytkowego. Plik timery i liczniki są komponentami sprzętowymimikrokontroler, które są używane w wielu aplikacjach w celu zapewnienia dokładnego opóźnienia czasowego przy zliczaniu impulsów. binne zadania realizowane są techniką programową.

1. WAP do obliczenia opóźnienia 500us.

MOV TMOD, # 10H // wybierz tryb timera przez rejestry //
MOV TH1, # 0FEH // zapisz czas opóźnienia w wyższym bicie //
MOV TL1, # 32H // zapisz czas opóźnienia w niskim bicie //
JNB TF1, $ // zmniejsz wartość licznika czasu do zera //
CLR TF1 // wyczyść flagę timerakawałek//
CLR TR1 // WYŁĄCZ timer //

2. WAP do przełączania diod LEDz5sekopóźnienie

ORG 0000H
RETURN: MOV PO, # 00H
OPÓŹNIENIE POŁĄCZENIA
MOV P0, # 0FFH
OPÓŹNIENIE POŁĄCZENIA
POWRÓT SJUMP
OPÓŹNIENIE: MOV R5, # 50H // załaduj rejestr R5 z 50 //
DELAY1: MOV R6, # 200 // załaduj rejestr R6 z 200 //
DELAY2: MOV R7, # 229 // załaduj rejestr R7 z 200 //
DJNZ R7, $ // zmniejsz R7 aż do zera //
DJNZ R6, DELAY2 // zmniejsz R6 aż do zera //
DJNZ R5, DELAY1 // zmniejsz R5 aż do zera //
RET // wróć do głównego programu //
KONIEC

3. WAP zlicza 250 impulsów przy użyciu mode0 count0

Składnia:

ORG 0000H
MOV TMOD, # 50H // wybierz licznik //
MOV TH0, # 15 // przesuń zliczanie impulsów na wyższy bit //
MOV TH1, # 9FH //ruszaj sięzliczanie impulsów, dolny bit //
SET TR0 // ON timer //
JNB $ // zmniejsz wartość licznika do zera //
CLR TF0 // wyczyść licznik, flagakawałek//
CLR TR0 // zatrzymaj timer //
KONIEC

Programowanie komunikacji szeregowej za pomocą 8051 Microcontroller:

Komunikacja szeregowa jest powszechnie używany do przesyłania i odbierania danych. 8051mikrokontrolerskładają się z komunikacji szeregowej UART / USART, a sygnały są przesyłane i odbierane przezTxi kołki Rx. Komunikacja UART przesyła dane szeregowo bit po bicie. UART jest protokołem półdupleksowym, który przesyła i odbiera dane, ale nie w tym samym czasie.

1. WAP do przesyłania znaków do Hyper Terminal

MOV SCON, # 50H // ustaw komunikację szeregową //
MOV TMOD, # 20H // wybierz tryb timera //
MOV TH1, # -3 // ustaw prędkość transmisji //
SET TR1 // ON timer //
MOV SBUF, # 'S' // przesyła S do okna szeregowego //
JNB TI, $ // zmniejszanie wartości licznika czasu do zera //
CLR RI // wyczyść przerwanie odbioru //
CLR TR1 // wyczyść timer //

2. WAP do przesłania Odbierz znak przez Hyper Terminal

MOV SCON, # 50H // ustaw komunikację szeregową //
MOV TMOD, # 20H // wybierz tryb timera //
MOV TH1, # -6 // ustaw prędkość transmisji //
SET TR1 // na timer //
MOV SBUF, # 'S' // przesyła S do okna szeregowego //
JNB RI, $ // zmniejszanie wartości licznika czasu do zera //
CLR RI // wyczyść przerwanie odbioru //
MOV P0, SBUF // wyślij wartość rejestru SBUF do portu0 //
CLR TR1 // wyczyść timer //

Chodzi o programowanie 8051 w języku asemblera w skrócie z programami opartymi na przykładach. Mamy nadzieję, że te adekwatne informacje o języku asemblera z pewnością będą pomocne dla czytelników i czekamy na ich cenne komentarze w sekcji komentarzy poniżej.