Konfiguracja sprzętu i oprogramowania

Zegar z programu wagowego mcs 51. Mikrokontrolery MCS-51

Podstawą mikrokontrolera (patrz rys. 1) jest 8-bitowa jednostka arytmetyczno-logiczna (ALU). Pamięć MK ma architekturę Harvarda, tj. podzielona logicznie: na pamięć programową - PP (wewnętrzną lub zewnętrzną), adresowaną przez 16-bitowy licznik poleceń (SC) i pamięć danych - wewnętrzną (pamięć danych rezydentnych - RPD) 128 (lub 256) bajtów, a także zewnętrzną (zewnętrzną) pamięć danych – VPD) do 64 KB. Fizycznie pamięć programu jest zaimplementowana w pamięci ROM (tylko do odczytu), a pamięć danych jest zaimplementowana w pamięci RAM (dane mogą być zapisywane i odczytywane).

Odbiór i dostarczanie sygnałów zewnętrznych odbywa się za pośrednictwem 4 ośmiobitowych portów Р0..Р3. Odnosząc się do pamięć zewnętrzna Programy (VPP) lub porty pamięci danych (VPD) P0 i P2 są wykorzystywane jako multipleksowana magistrala zewnętrzna Adres/Dane. Linie portu P3 mogą również pełnić funkcje alternatywne (patrz Tabela 1).

16-bitowy rejestr DPTR tworzy adres VPD lub adres bazowy pamięci programowej w instrukcji konwersji akumulatora. Rejestr DPTR może być również używany jako dwa niezależne rejestry 8-bitowe (DPL i DPH) do przechowywania operandów.

8-bitowy rejestr poleceń wewnętrznych (RK) odbiera kod wykonywanego polecenia; kod ten jest dekodowany przez obwód sterujący, który generuje sygnały sterujące (patrz rys. 1).

Dostęp do rejestrów funkcji specjalnych - RSF (SFR - na rys. 1 są one zakreślone linią przerywaną) jest możliwy tylko przy użyciu bezpośredniego adresowania bajtowego w zakresie adresów od 128 (80h) i więcej.


Pamięć danych rezydentnych (RDD) w pierwszych modelach mikrokontrolerów z rodziny MCS-51 miała pojemność 128 bajtów. Dolne 32 bajty RPD są również rejestrami ogólnego przeznaczenia - RON (4 banki po 8 RON każdy). Program może dotyczyć jednego z 8 RON aktywnego banku. Wybór aktywnego banku RON odbywa się poprzez zaprogramowanie dwóch bitów w rejestrze stanu procesora - PSW.


Tabela 1 - Przypisanie pinów MCS-51

Nr pinu Przeznaczenie Zamiar
1..8 P1 8-bitowy quasi-dwukierunkowy port we/wy
9 RST

Sygnał resetowania (aktywny poziom - wysoki);

Sygnał RST resetuje: komputer i większość rejestrów funkcji specjalnych (SFR), wyłączając wszystkie przerwania i zegary; wybiera RON Bank 0; zapisuje "wszystkie jedynki" na portach P0_P3, przygotowując je do wejścia; zapisuje kod 07H do wskaźnika stosu (SP);

10..17

8-bitowy quasi-dwukierunkowy port we/wy; po wpisaniu do odpowiedniego bitu "1" - wykonuje dodatkowe (alternatywne) funkcje:

Wejście portu szeregowego - RxD;

Wyjście portu szeregowego - TxD;

Wejście przerwania zewnętrznego 0 - ~INT0;

Wejście przerwania zewnętrznego 1 - ~INT1;

Wejście timera/licznika 0 - T0;

Wejście timera/licznika 1 - T1;

Wyjście stroboskopowe. sygnał podczas zapisu do VPD - ~ WR;

Wyjście stroboskopowe. sygnał podczas odczytu z VPD - ~ RD;

18, 19 X1, X2 Wyprowadzenia do podłączenia rezonatora kwarcowego lub obwodu LC;
20 GND Ogólny wniosek;
21..28 P2 8-bitowy quasi-dwukierunkowy port we/wy; lub adres wyjściowy A w trybie pamięci zewnętrznej (VPP lub VPD);
29 PME Strob odczytu zewnętrznej pamięci programu, emitowany tylko podczas uzyskiwania dostępu do zewnętrznej pamięci ROM;
30 ALE Strobowanie adresu pamięci zewnętrznej (VPP lub VPD);
31 EA Wyłączenie RPP, poziom „0” na tym wejściu przełącza MK na wybór poleceń tylko z pasa startowego ;
39..32 P0 8-bitowy dwukierunkowy port we/wy; przy dostępie do pamięci zewnętrznej wydaje adresy A (które są zapisywane w rejestrze zewnętrznym przez sygnał ALE), a następnie wymienia bajt synchronicznie z sygnałem ~PME (dla poleceń) lub ~WR,~RD (dla danych w VPD) , podczas dostępu do pamięci zewnętrznej wszystkie jednostki są zapisywane w rejestrze portu P0, niszcząc informacje tam przechowywane;
40 Ucc Wyjście napięcia zasilania

Przełączanie banków RON upraszcza wykonywanie podprogramów i obsługę przerwań, ponieważ. nie jest konieczne przesyłanie zawartości RON programu głównego na stos podczas wywoływania podprogramu (wystarczy przejść do innego aktywnego banku RON w podprogramie).

Dostęp do RPD jest możliwy przy użyciu pośredniego lub bezpośredniego adresowania bajtowego (bezpośrednie adresowanie bajtowe umożliwia dostęp tylko do pierwszych 128 bajtów RPD).

Rozszerzony obszar RPD (dla mikrokontrolerów z rodziny MCS-52 i kolejnych rodzin) od adresu 128 (80h) do 255 (FFh) może być adresowany tylko metodą adresowania pośredniego.

Tabela 2 - Rejestry blokowe funkcji specjalnych (s f r)

Kod Mnemo Nazwa
0E0h *ACC Bateria
0F0h *B Zarejestruj ekspander baterii
0D0h *PSW Słowo statusu procesora
0B0h *P3 Port 3
0A0h *P2 Port 2
90h * P1 Port 1
80h *P0 Port 0
0B8h * IP Rejestr priorytetów przerwań
0A8h *TJ Rejestr masek przerwań
99h SBUF Szeregowy bufor nadawczo-odbiorczy
98h * SCON Kontrola portu szeregowego/rejestr stanu
89h TMOD Rejestr trybu timera/licznika
88h * TKON Kontrola timera/licznika/rejestr stanu
8Dh TH1 Zegar 1 (starszy bajt)
8bh TL1 Zegar 1 (młodszy bajt)
8ch TH0 Zegar 0 (starszy bajt)
8ah TL0 Zegar 0 (młodszy bajt)
83h DPH Rejestr wskaźnika danych (DPTR) (starszy bajt)
82h DPL Rejestr wskaźnika danych (DPTR) (młodszy bajt)
81h SP Rejestr wskaźnika stosu
87h PCON Rejestr sterowania mocą na żądanie

2. MODEL OPROGRAMOWANIA MCS–51


TYPY POLECEŃ MCS–51

Prawie połowa poleceń jest wykonywana w 1 cyklu maszyny (MC). Przy częstotliwości oscylatora kwarcowego 12 MHz czas wykonania takiego polecenia wynosi 1 μs. Pozostałe polecenia wykonywane są w 2 cyklach maszynowych, tj. przez 2 ms. Tylko instrukcje mnożenia (MUL) i dzielenia (DIV) są wykonywane w 4 cyklach maszynowych.

Podczas jednego cyklu maszyny są dwa dostępy do pamięci programu (wewnętrznej lub zewnętrznej) w celu odczytania dwóch bajtów instrukcji lub jeden dostęp do zewnętrznej pamięci danych (EDM).

3. METODY (METODY) ADRESOWANIA MCS–51

1. ADRESOWANIE REJESTRÓW - 8-bitowy operand znajduje się w RON wybranego (aktywnego) banku rejestrów;

2 ADRESOWANIE BEZPOŚREDNIE (oznaczone znakiem - #) - operand znajduje się w drugim (a dla operandu 16-bitowego i trzecim) bajcie polecenia;

3 ADRESOWANIE POŚREDNIE (oznaczone znakiem - @) - operand znajduje się w pamięci danych (RPD lub VPD), a adres komórki pamięci jest zawarty w jednym z RON adresowania pośredniego (R0 lub R1); w poleceniach PUSH i POP adres jest zawarty we wskaźniku stosu SP; rejestr DPTR może zawierać adres VPD do 64K;

4 DIRECT BYTE ADDRESSING – (dir) – służy do dostępu do komórek RPD (adresy 00h…7Fh) i rejestrów funkcji specjalnych SFR (adresy 80h…0FFh);

5 DIRECT BIT ADDRESSING - (bit) - służy do adresowania oddzielnie adresowalnych 128 bitów znajdujących się w komórkach RPD pod adresami 20H ... 2FH oraz do oddzielnie adresowalnych bitów rejestrów funkcji specjalnych (patrz Tabela 3 i model programu);

6 ADRESOWANIE INDEKSU POŚREDNIE (oznaczone znakiem @) - ułatwia przeglądanie tabel w Pamięci Programu, adres PP jest określony przez sumę rejestru bazowego (PC lub DPTR) i rejestru indeksowego (Bateria);

7 IMPLICIT (WBUDOWANE) ADRESOWANIE - kod instrukcji zawiera niejawne (domyślnie) odniesienie do jednego z operandów (najczęściej do Akumulatora).

4. FORMAT SŁOWA STATUSU PROCESORA (PSW)

C - Carry (CARY) lub flaga pożyczania, działa również jako „akumulator logiczny” w instrukcjach obsługiwanych bitami;

AC – pomocnicza (dodatkowa) flaga przeniesienia – ustawiana na „1”, jeśli komenda dodawania (ADD, ADDC) miała przeniesienie z tetrady niskiego rzędu do wyższego rzędu (tzn. z 3 bitu na 4 bit);

F0 - flaga użytkownika - ustawiana, resetowana i sprawdzana przez oprogramowanie;

RS1 RS0 Bank Adres (reż.)
0 0 0 00h..07h
0 1 1 08h..0Fh
1 0 2 10h..17h
1 1 3 18h..1Fh

RS1,RS0 – Wybór banku rejestru:

OV - flaga przepełnienia arytmetycznego; jego wartość jest określana przez operację XOR sygnałów wejściowych i wyjściowych przenoszenia najbardziej znaczącego bitu jednostki ALU; pojedyncza wartość tej flagi wskazuje, że wynik operacji arytmetycznej w kodzie uzupełnienia do dwóch jest poza zakresem: –128…+127; podczas wykonywania operacji dzielenia flaga OV jest resetowana, a w przypadku dzielenia przez zero jest ustawiana; podczas mnożenia flaga OV jest ustawiana, jeśli wynik jest większy niż 255 (0FFH);

Bit PSW - Zarezerwowany, zawiera wyzwalacz, dostępny do zapisu lub odczytu;

P - flaga parzystości - to dodanie liczby pojedynczych bitów w akumulatorze do liczby parzystej; jest tworzony przez układ kombinacyjny (dostępny programowo tylko do odczytu).

Mikrokontrolery MCS-51 nie posiadają flagi „Z”. Ale w instrukcjach skoku warunkowego (JZ, JNZ) układ kombinacyjny sprawdza aktualną (zerową lub niezerową) zawartość akumulatora.

Wszystkie polecenia transferów i wymiany argumentów mogą być wykonywane przez Akumulator (patrz rys. 3). Co więcej, transfery z / do pamięci zewnętrznej (pamięci programu lub pamięci danych) mogą być wykonywane tylko przez baterię.

Większość transferów można również wykonać za pomocą bajtu do przodu (dir). Istnieją nawet transfery dir-to-dir (patrz rysunek 3).

Brakujące transfery z RON do RON mogą być zaimplementowane jako transfery z RON do forward byte dir (biorąc pod uwagę, że RON znajdują się w początkowym obszarze Resident Data Memory, której komórki mogą być adresowane jako dir).

Polecenia wymiany XCH umożliwiają wysyłanie bajtów bez niszczenia obu operandów.

Polecenia arytmetyczne są wykonywane tylko w akumulatorze. Dlatego pierwszy operand musi najpierw zostać umieszczony w akumulatorze, a następnie dodać lub odjąć drugi operand. Wynik jest umieszczany w akumulatorze.


Polecenie odejmowania SUBB jest wykonywane tylko z pożyczeniem (tj. flaga Cary jest również odejmowana od wyniku). Dlatego, aby wykonać instrukcję odejmowania bez pożyczania, należy najpierw wykonać instrukcję Clear Flag C (CLRC).

Instrukcja mnożenia operandów jednobajtowych - MULAB - umieszcza wynik dwubajtowy (16 bitowy): niski bajt znajduje się w akumulatorze, wysoki bajt znajduje się w rejestrze B.

Wynik wykonania instrukcji dzielenia operandów jednobajtowych - DIVAB - umieszczany jest: iloraz - Akumulator, reszta - w rejestrze B.

Instrukcja arytmetyczna INC dodaje jeden do wybranego argumentu. Instrukcja arytmetyczna DEC odejmuje jeden od wybranego argumentu. Instrukcja Accumulator Decimal Correction (DAA) pomaga w dodawaniu liczb dziesiętnych zakodowanych binarnie (BCD) bez konwertowania ich na format szesnastkowy (szesnastkowy). Operandy źródłowe muszą być w formacie BCD, tj. w każdej tetradzie jednego bajta są tylko liczby od 0 do 9 (nie może być liczb szesnastkowych: A, B, C, D, E, F). Dlatego jeden bajt może zawierać liczby od 00 do 99 dla spakowanych numerów BCD lub liczby od 0 do 9 dla niepakowanych numerów BCD.

Polecenie DA A - korekcja dziesiętna wykonuje działania na zawartości Akumulatora po dodaniu liczb BCD w procesorze (liczby zostały dodane zgodnie z prawami arytmetyki szesnastkowej) w następujący sposób (patrz przykład):

· jeżeli zawartość tetrady niższego rzędu Akumulatora jest większa niż 9 lub ustawiona jest pomocnicza flaga przeniesienia (AC = 1), to do zawartości Akumulatora dodaje się 6 (czyli brakujące sześć cyfr w hex format);

· jeżeli po tym zawartość wyższego rzędu Akumulatora jest większa niż 9 lub ustawiona jest flaga C, to do wyższego rzędu dodawana jest cyfra 6.

Instrukcja korekcji dziesiętnej DA A nie jest używana po instrukcji inkrementacji (INC), ponieważ instrukcja inkrementacji nie wpływa (zmienia) na flagi C i AC.

Polecenia logiczne:

Logiczne "AND" - ANL,

Logiczne "LUB" - ORL,

Polecenie logiczne XOR - XRL - jest wykonywane w Akumulatorze (podobnie jak arytmetyczne), ale możliwe jest wykonywanie poleceń logicznych również w bajcie adresu bezpośredniego (dir). W takim przypadku drugim argumentem może być:

w akumulatorze lub

Argument natychmiastowy w instrukcji.

Instrukcje rotacji (RR A, RL A) i instrukcje rotacji poprzez flagę CARY (RRC A, RLC A) obracają zawartość akumulatora o bit 1. Operandy bitowe są przesyłane tylko przez flagę C.

Architektura rodziny MCS-51 jest w dużej mierze zdeterminowana przez jej przeznaczenie – budowanie kompaktowy oraz tani urządzenia cyfrowe. Wszystkie funkcje mikrokomputera są realizowane za pomocą jednego mikroukładu. Rodzina MCS-51 obejmuje całą gamę mikroukładów od najprostszych mikrokontrolerów po dość złożone. Mikrokontrolery z rodziny MCS-51 pozwalają na wykonywanie zarówno zadań sterowania różnymi urządzeniami, jak i realizacji poszczególnych węzłów obwodu analogowego. Wszystkie mikroukłady tej rodziny działają z tym samym systemem dowodzenia, większość z nich wykonywana jest w tych samych przypadkach z pasujący pinout(numeracja nóg do walizki). Pozwala to na użycie chipów różnych producentów (takich jak Intel, Dallas, Atmel, Philips itp.) Do opracowanego urządzenia. bez zmiany schematu urządzenia i programu.

Rysunek 1. Schemat konstrukcyjny sterownika K1830BE751

Schemat blokowy sterownika pokazano na rysunku 1 i składa się z następujących głównych jednostek funkcjonalnych: jednostka sterująca, jednostka arytmetyczno-logiczna, jednostka zegar/licznik, interfejs szeregowy i jednostka przerwań, licznik programu, pamięć danych i pamięć programu. Wymiana dwustronna odbywa się za pomocą wewnętrznej 8-bitowej autostrady danych. Przyjrzyjmy się bliżej celowi każdego bloku. Prawie wszyscy przedstawiciele rodziny MCS-51 są konstruowani zgodnie z tym schematem.. Różne mikroukłady z tej rodziny różnią się tylko rejestrami specjalnego przeznaczenia (w tym liczbą portów). System dowodzenia wszyscy kontrolerzy Rodzina MCS-51 zawiera 111 podstawowe polecenia o formacie 1, 2 lub 3 bajtów i nie zmienia się przy przejściu z jednego żetonu na drugi. Zapewnia to doskonałą przenośność programów z jednego układu do drugiego.

Jednostka sterująca i synchronizująca

Jednostka sterująca i synchronizująca (Timing and Control) przeznaczona jest do generowania sygnałów synchronizujących i sterujących, które zapewniają koordynację wspólnej pracy zespołów OEVM we wszystkich dopuszczalnych trybach ich pracy.

  • urządzenie do formowania przedziałów czasowych,
  • logika we/wy,
  • rejestr instrukcji,
  • rejestr kontrolny pobór prądu,
  • dekoder poleceń, logika sterowania komputerem.

Urządzenie do wyznaczania czasu jest przeznaczony do generowania i wyprowadzania wewnętrznych sygnałów synchronizacji faz, cykli i cykli. Liczba cykli maszyny określa czas wykonania instrukcji. Prawie wszystkie polecenia OEVM są wykonywane w jednym lub dwóch cyklach maszynowych, z wyjątkiem instrukcji mnożenia i dzielenia, których czas trwania wynosi cztery cykle maszynowe. Oznaczmy częstotliwość oscylatora głównego przez F g. Wtedy czas trwania cyklu maszyny wynosi 12/F g, czyli 12 okresów sygnału oscylatora głównego. Logika wejścia-wyjścia jest zaprojektowana do odbierania i wysyłania sygnałów, które zapewniają wymianę informacji z urządzenia zewnętrzne przez porty wejścia/wyjścia P0-P3.

Rejestr poleceń jest przeznaczony do rejestrowania i przechowywania 8-bitowego kodu operacji wykonywanego polecenia. Kod operacji, za pomocą poleceń i logiki sterowania komputerowego, jest przekształcany w mikroprogram do wykonywania polecenia.

Rejestr kontroli zapotrzebowania (PCON) pozwala na zatrzymanie pracy mikrokontrolera w celu zmniejszenia zużycia energii i zmniejszenia poziomu zakłóceń z mikrokontrolera. Jeszcze większą redukcję zużycia energii i redukcję szumów można osiągnąć poprzez zatrzymanie głównego oscylatora mikrokontrolera. Można to osiągnąć poprzez przełączanie bitów w rejestrze kontroli zapotrzebowania PCON. Dla opcji produkcyjnej n-MOS (seria 1816 lub chipy obce, które nie mają litery „c” w środku nazwy), rejestr sterowania mocą PCON zawiera tylko jeden bit, który kontroluje prędkość transmisji portu szeregowego SMOD, i nie ma bitów sterujących mocą.

Wraz z artykułem "Architektura mikrokontrolerów MCS-51" czytają:


http://website/MCS51/tablems.php


http://website/MCS51/SysInstr.php


http://website/MCS51/port.php

UDC 681,5, 681,325,5 (075,8)

BBK 32.973.202-018.2 i 73

Shcherbina A. N.Maszyny, systemy i sieci obliczeniowe. Mikrokontrolery i mikroprocesory w układach sterowania: Cheb. dodatek / A.N. Szczerbina, PA Nieczajew-SPb.: Z Politechniki. un-ta, 2012.-226 s.

Odpowiada treści państwowego standardu edukacyjnego dla obszarów kształcenia i specjalności z zakresu zarządzania w systemy techniczne, elektroenergetyki i elektrotechniki oraz treści przykładowego programu nauczania dyscypliny „Komputery, systemy i sieci”.

Podstawowe zagadnienia organizacji logicznej systemów mikroprocesorowych są rozważane na przykładzie podstawowej architektury rodziny mikrokontrolerów MCS-51 firmy Intel. Opisano technologię programowania mikrokontrolerów w językach Assembler i SI.

Może być przydatny dla studentów i wykładowców wyższych uczelni technicznych, specjalistów w zakresie automatyzacji procesów technologicznych i urządzeń produkcyjnych, a także dla konstruktorów systemów mikroprocesorowych.

Odpowiada również treści państwowego standardu edukacyjnego w dyscyplinach „Mikrokontrolery i mikroprocesory w układach sterowania” oraz „Elektroniczne urządzenia automatyki” na studia licencjackie, inżynierskie i magisterskie na kierunku 140400 „Elektryka i elektrotechnika”.

Opublikowane decyzją Rady Redakcyjnej i Wydawniczej

Petersburski Państwowy Uniwersytet Politechniczny.

© Shcherbina A. N., Nechaev P. A., 2012

© Państwo Petersburga

politechnika, 2012

ISBN 978-5-7422-3553-8


Wprowadzenie... 7

Rozdział 1. Architektura rodziny MCS51. 10

1.1 Ogólna charakterystyka 10

1.2 Schemat blokowy 11



1.3 Przypisanie pinów mikrokontrolera 8051 15

1.4 Organizacja pamięci 17

1.4.1 Pamięć programu (ROM) 18

1.4.2 Pamięć danych (RAM) 19

1.4.3 Rejestry funkcji specjalnych. dwadzieścia

1.4.4 Rejestr flag (PSW) 23

1.5 Urządzenie sterujące i synchronizujące 26

1.6 Organizacja portów I/O 27

1.6.1 Informacje ogólne. 27

1.6.2 Funkcje alternatywne. 27

1.7. Timery / liczniki mikrokontrolerów z rodziny 8051. 28

1.7.1. Budowa liczników czasu. 28

1.7.2 Tryby pracy timerów-liczników. trzydzieści

1.8. Port szeregowy 32

1.8.1. Struktura portu szeregowego. 32

1.8.2. Rejestr kontroli/statusu nadajnika-odbiornika SCON.. 34

1.8.3. Rejestr sterowania mocą PCON.. 36

1.9. System przerwań 37

1.9.1. Struktura systemu przerwań. 37

1.9.2 Wykonanie procedury przerwania. 40

Rozdział 2 Cechy mikrokontrolera 80C51GB.. 42

2.1 Funkcje 42

2.2 Porty we/wy P0-P5 43

2.2.1 Działanie portów I/O. 43

2.2.2 Zapis do portu.. 46

2.3 Cechy systemu przerwań 8XC51GB.. 49

Włącz/wyłącz przerwania. 50

Zarządzanie priorytetami przerwań. 51

przerwania zewnętrzne. 54

2.3. węzeł ADC 56

2.4. Watchdog sprzętowy 61

2.5. Wykrywanie awarii zegara 63

2.6. Macierz programowalnych liczników RSA 64

2.6.1. Struktura PCA.. 64

2.6.2. Rejestr trybu licznika PCA (CMOD) 66

2.6.3. Rejestr kontrolny licznika PCA (CON) 67

2.6.4. Porównaj/napraw moduły. 68

2.7. Ulepszony port szeregowy 76

2.8. Timery/Liczniki 79

Przypisanie pinów mikrokontrolerów grupy 8XC51GB.. 86

Rozdział 3 Programowanie MK 8051PL.. 89

3.1. Model oprogramowania 89

3.2 Typy danych 93

3.3 Sposoby adresowania danych 93

3.4 System poleceń 95

3.4.1 Charakterystyka ogólna. 95

3.4.2 Typy poleceń. 96

3.4.3 Rodzaje argumentów. 97

3.4.4 Polecenia przesyłania danych z mikrokontrolera. 98

3.4.5 Instrukcje arytmetyczne 8051.101

3.4.6 Polecenia logiczne 8051 MCU 104

3.4.7 Polecenia operacji bitowych 8051. 106

3.5 Programy debugowania 111

Rozdział 4. Język programowania ASM-51. 112

4.2 Pisanie tekstu programu 113

4.3 Alfabet języka. 114

4.4 Identyfikatory. 115

4.5 Liczby 117

4.6 Dyrektywy 118

4.7 Implementacja podprogramów w ASM51 122

4.7.1 Struktura podprogramu-procedury w języku ASM51. 122

4.7.2 Przekazywanie zmiennych parametrów do podprogramu. 123

4.7.3 Implementacja podprogramów-funkcji w języku ASM51. 123

4.7.4 Implementacja procedur obsługi przerwań w języku ASM51. 124

4.8 Programowanie strukturalne w asemblerze. 125

4.9 Specyfika tłumaczenia programów wielomodułowych.. 126

4.10 Korzystanie z segmentów 128

4.10.1 Podział pamięci MK na segmenty .. 128

4.10.2 Segmenty pamięci absolutnej. 129

4.10.2 Relokowalne segmenty pamięci. 131

Rozdział 5. Język programowania C-51. 134

5.1 Ogólna charakterystyka języka 134

5.3 Struktura programów C-51 136

5.3. Elementy języka programowania C-51 138

5.3.1. Symbole... 138

5.3.2. Jednostki leksykalne, separatory i wykorzystanie spacji. 141

5.3.3 Identyfikatory.. 142

5.3.4 Słowa kluczowe. 143

5.3.5 Stałe... 143

5.4. Wyrażenia w wypowiedziach językowych 146

programowanie C-51 146

5.5. Priorytety operacyjne 148

5.6. Oświadczenia języka programowania C-51 149

5.6.1. operatorzy deklaracji. 150

5.6.2 Wykonywalne instrukcje.. 150

5.6.3 Operator przydziału. 151

5.6.4 Oświadczenie warunkowe. 151

5.6.5 Operator strukturalny (). 152

5.6.6 Operator dla pętli. 152

5.6.7 Instrukcja Loop ze sprawdzaniem warunku aż do treści pętli while. 153

5.6.8 Instrukcja Loop ze sprawdzaniem warunku po wykonaniu obiektu pętli while. 154

5.6.9 Instrukcja przerwania. 155

5.6.10 Oświadczenie kontynuuj. 155

5.6.11 Instrukcja wyboru przełącznika. 155

5.6.12 Operator goto. 157

5.6.13 Wyrażenie operatora. 158

5.6.14 Zestawienie zwrotu ze zwrotu podprogramu. 158

5.6.15 Pusta instrukcja. 158

5.7. Deklarowanie zmiennych w języku programowania C-51. 159

5.7.1. Deklaracja zmiennej. 159

5.7.3 Typy danych całkowitych. 161

5.7.4 Liczby zmiennoprzecinkowe. 162

5.7.5 Zmienne typu wyliczeniowego. 162

5.7.6. Deklarowanie tablic w języku programowania C-51. 164

5.7.7. Konstrukcje... 165

5.7.8. Asocjacje (mieszaniny) 166

5.8. Używanie wskaźników w C-51 167

5.8.1. Deklarowanie wskaźników. 167

5.8.2. Wskaźniki bez typu. 168

5.8.3. Wskaźniki zależne od pamięci. 169

5.9. Deklarowanie nowych typów zmiennych 169

5.10. Inicjalizacja danych 170

5.11. Korzystanie z podprogramów w języku programowania C-51. 170

5.11.1. Definicja podprogramów.. 171

5.11.2. Parametry podprogramu .. 173

5.11.3. Wstępna deklaracja podprogramów.. 174

5.11.4 Wywoływanie podprogramów 176

5.11.5 Rekurencyjne wywołanie podprogramu.. 176

5.11.6 Procedury przerwań. 177

5.11.7 Zakres zmiennych i podprogramów. 178

5.12. Programy wielomodułowe 179

Rozdział 6. Przygotowywanie programów w zintegrowanym środowisku programistycznym Keil μVision2. 182

6.1 Tworzenie projektu ASM-51 182

6.2 Przykład tworzenia projektu C dla kontrolera treningowego w Keil μVision2 IDE 188

Rozdział 7 Opis sterownika uczenia się .. 199

7.1. Struktura kontrolera 199

7.2. Przestrzeń adresowa 200

7.2.1. Przydział pamięci. 200

7.2.2 Pamięć zewnętrzna. 201

7.2.3. Wewnętrzna pamięć danych. 202

7.3. Przydział portów we/wy 202

7.4. Port szeregowy………………………………...203

7.5. Praca z LCD 205

7.6. Panele sterownika………………………………………………………213

DODATEK P2 STRUKTURA SPRAWOZDANIA Z PRACY LABORATORYJNEJ……..217

Załącznik P3 Kody poleceń maszyny. 217

Referencje... 224


Wstęp

W rozwoju specjalności związanych z automatyzacją procesów technologicznych i produkcji jednym z ważnych działów jest nauka o mikrokontrolerach.

Na świecie następuje ciągły rozwój i pojawianie się coraz większej liczby 16- i 32-bitowych mikrokontrolerów i mikroprocesorów, ale największy udział w światowym rynku mikroprocesorów nadal mają urządzenia 8-bitowe. Według wszystkich prognoz firm analitycznych na najbliższą przyszłość, wiodąca pozycja 8-bitowych mikrokontrolerów na rynku światowym będzie się utrzymywać.

Obecnie wśród wszystkich 8-bitowych mikrokontrolerów rodzina MCS-51 jest niekwestionowanym liderem pod względem liczby odmian i liczby firm produkujących jego modyfikacje. Swoją nazwę otrzymał od pierwszego członka tej rodziny, mikrokontrolera 8051. urządzenia peryferyjne, elastyczny wybór zewnętrznej lub wewnętrznej pamięci programu oraz rozsądna cena sprawiły, że ten mikrokontroler odniósł sukces na rynku.

Zalety rodziny MCS-51:

architektura, która jest de facto standardem;

Ekstremalna szerokość rodziny i różnorodność możliwości;

Dostępność wysokowydajnych i rozszerzonych wersji procesorów;

znaczna liczba swobodnie dostępnych opracowań oprogramowania i sprzętu;

łatwość programowania sprzętu, w tym programowania w obwodzie;

niski koszt i dostępność podstawowych chipów;

Dostępność specjalistycznych wersji sterowników do specjalnych warunków użytkowania

Dostępność wersji sterowników o obniżonym poziomie zakłóceń elektromagnetycznych;

· duża popularność wśród deweloperów starszego pokolenia, zarówno na świecie, jak iw krajach WNP;

Wsparcie architektury przez wiodące instytucje edukacyjne świata.

I wreszcie główna zaleta: po opanowaniu podstawowego układu rodziny łatwo jest rozpocząć pracę z takimi komputerowymi „potworami”, jak Cygnal, Dallas Semiconductor, Analog Devices, mikrokontrolery Texas Instruments.

Rodzina MCS-51 obejmuje całą gamę mikroukładów od najprostszych mikrokontrolerów po dość złożone. Do chwili obecnej istnieje ponad 200 modyfikacji mikrokontrolerów z rodziny 8051 wyprodukowanych przez prawie 20 firm. Z roku na rok pojawia się coraz więcej wariantów przedstawicieli tej rodziny.

Główne obszary rozwoju to:

wzrost prędkości (zwiększenie częstotliwości zegara i przeprojektowanie architektury);

zmniejszenie napięcia zasilania i zużycia energii;

wzrost pamięci RAM i Pamięć flash na chipie z możliwością programowania w obwodzie;

· wprowadzenie na peryferie mikrokontrolera skomplikowanych urządzeń, takich jak układy sterowania napędami, interfejsy CAN, USB itp.

Mikrokontrolery z rodziny MCS-51 pozwalają na wykonywanie zarówno zadań sterowania różnymi urządzeniami, jak i realizacji poszczególnych węzłów obwodu analogowego. Wszystkie mikroukłady z tej rodziny działają z tym samym systemem poleceń. Większość z nich jest wykonywana w tych samych przypadkach z tym samym pinoutem (numeracja nóg do obudowy). Umożliwia to wykorzystanie mikroukładów różnych producentów do opracowanego urządzenia bez zmiany schematu obwodu urządzenia i programu.

Głównymi producentami odmian 51 rodziny na świecie są Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems i wielu innych.

Charakterystykę analogów mikrokontrolerów z rodziny MCS-51 (Intel 8XC51FA, 8XC51GB, 80C152) o zaawansowanych funkcjach przedstawiono w tabeli. W 1.

Tabela B.1

Baran ROM SAR ADC WDT T/C Po urodzeniu. Kanały Osobliwości
Atmel: AT89C2051
- - - - UART Flash 2 KB
AT89C4051 - - - - UART Flash 4 KB
AT89S4D12 128K - - - UART, SPI Flash 4 KB
Półprzewodnik DALLAS: DS5000FP
- - - + UART program ładujący
DS5001FP - - - + UART program ładujący
DS8xC520 16K - - + 2xUART 2DPTR
SIEMENS: C505C
16K - + + UART, CAN 8DPTR
C515C 64K - + + UART+SSC+CAN 4 PWM, 8 DPTR
Philips: *89C51RA+
- + - + UART 2 DPTR, poziom 4 przerwanie, wyjście zegara, Flash 8K
P51XAG1x 8K - - + 2 UART-y
Intel: 8xC51RA
8K - + + UART 4 poziomy IRQ, wyjście zegara
8XC196KC 64K 16K - + - UART 3 PWM
80C196KB 64K 8K - + - UART PWM

Rozdział 1 Architektura rodziny MCS51

8-bitowe jednoukładowe mikrokontrolery z rodziny MCS-51 zyskały dużą popularność wśród twórców mikroprocesorowych systemów sterowania ze względu na dobrze zaprojektowaną architekturę. Architektura mikrokontrolera to zestaw wewnętrznych i zewnętrznych zasobów sprzętowych dostępnych programowo oraz system poleceń. Architektura rodziny MCS-51 jest w dużej mierze zdeterminowana przez jej przeznaczenie – budowę kompaktowych i tanich urządzeń cyfrowych. Mikrokontrolery, które wykonują wszystkie funkcje mikrokomputera za pomocą jednego mikroukładu, nazywane są komputerami jednoukładowymi (OEVM).

Intel wypuścił na rynek około 50 modeli opartych na rdzeniu operacyjnym mikrokontrolera Intel 8051. W tym samym czasie wiele innych firm, takich jak Atmel, Philips, rozpoczęło produkcję swoich mikrokontrolerów opracowanych w standardzie MCS-51.

Ogólna charakterystyka

Główne cechy rodziny:

8 bitowy procesor(CPU), skoncentrowany na sterowaniu urządzeniami wykonawczymi;

· Procesor ma wbudowany obwód 8-bitowego sprzętowego mnożenia i dzielenia liczb;

Obecność w zestawie instrukcji dużej liczby operacji do pracy z bezpośrednio adresowalnymi bitami pozwala mówić o procesorze do pracy z danymi bitowymi (procesor boolowski);

wewnętrzna (na chipie) pamięć programowa typu maski lub reprogramowalnego, która ma objętość od 4 do 32 Kb dla różnych kryształów, w niektórych wersjach nie występuje;

· co najmniej 128 bajtów rezydentnej pamięci RAM, która jest wykorzystywana do organizacji, rejestrowania banków, stosu i przechowywania danych użytkownika;

· co najmniej 32 dwukierunkowe linie interfejsu (porty), indywidualnie skonfigurowane do wprowadzania lub wyprowadzania informacji;

· dwa 16-bitowe wielotrybowe liczniki/timery służące do zliczania zdarzeń zewnętrznych, organizowania opóźnień czasowych i taktowania portu komunikacyjnego;

· Dwukierunkowy dupleksowy asynchroniczny nadajnik-odbiornik (UART) przeznaczony do organizowania kanałów komunikacji między mikrokontrolerem a urządzeniami zewnętrznymi z szerokim zakresem szybkości przesyłania informacji. Istnieją środki do sprzętowo-programowej integracji mikrokontrolerów z połączonym systemem;

· dwupoziomowy priorytetowy system przerwań, który obsługuje co najmniej 5 wektorów przerwań z 4 wewnętrznych i 2 zewnętrznych źródeł zdarzeń;

wbudowany generator zegara.

Schemat strukturalny

Schemat blokowy sterownika pokazano na rysunku 1.1 i składa się z następujących głównych jednostek funkcjonalnych: jednostka sterująca, jednostka arytmetyczno-logiczna, jednostka zegar/licznik, interfejs szeregowy i jednostka przerwań, licznik programu, pamięć danych i pamięć programu. Wymiana dwustronna odbywa się za pomocą wewnętrznej 8-bitowej autostrady danych. Prawie wszyscy przedstawiciele rodziny MCS-51 są konstruowani zgodnie z tym schematem. Różne mikroukłady z tej rodziny różnią się tylko rejestrami specjalnego przeznaczenia (w tym liczbą portów).

Jednostka sterująca i synchronizująca (czas i kontrola)- przeznaczone do generowania sygnałów synchronizujących i sterujących, które zapewniają koordynację wspólnej pracy jednostek OEVM we wszystkich dopuszczalnych trybach ich pracy. Jednostka sterująca zawiera:

urządzenie do formowania przedziałów czasowych;

logika wejścia-wyjścia;

rejestr instrukcji;

rejestr zarządzania zużyciem energii elektrycznej;

dekoder poleceń, logika sterowania komputerem.

Ryż. 1.1. Schemat strukturalny sterownika I8051.

Urządzenie do wyznaczania czasu jest przeznaczony do generowania i wyprowadzania wewnętrznych sygnałów synchronizacji faz, cykli i cykli. Liczba cykli maszyny określa czas wykonania instrukcji. Prawie wszystkie polecenia OEVM są wykonywane w jednym lub dwóch cyklach maszynowych, z wyjątkiem instrukcji mnożenia i dzielenia, których czas trwania wynosi cztery cykle maszynowe. Oznaczmy częstotliwość oscylatora głównego przez F g. Czas trwania cyklu maszyny wynosi 12/F g, czyli 12 okresów sygnału oscylatora głównego. Logika wejścia-wyjścia została zaprojektowana do odbierania i wysyłania sygnałów zapewniających wymianę informacji z urządzeniami zewnętrznymi poprzez porty wejścia/wyjścia P0-P3.

Rejestr poleceń jest przeznaczony do rejestrowania i przechowywania 8-bitowego kodu operacji wykonywanego polecenia. Kod operacji, za pomocą dekodera poleceń i logiki sterowania komputerowego, jest przekształcany w mikroprogram do wykonywania poleceń.

Rejestr kontroli zapotrzebowania (PCON) pozwala na zatrzymanie pracy mikrokontrolera w celu zmniejszenia zużycia energii oraz zmniejszenia poziomu zakłóceń ze strony mikrokontrolera. Jeszcze większą redukcję zużycia energii i redukcję szumów można osiągnąć poprzez zatrzymanie głównego oscylatora mikrokontrolera. Można to osiągnąć poprzez przełączanie bitów w rejestrze kontroli zapotrzebowania PCON. Dla opcji produkcyjnej n-MOS (seria 1816 lub chipy obce, które nie mają litery „c” w środku nazwy), rejestr sterowania mocą PCON zawiera tylko jeden bit, który kontroluje prędkość transmisji portu szeregowego SMOD, i nie ma bitów sterujących mocą.

Jednostka arytmetyczno-logiczna (ALU) jest równoległym urządzeniem ośmiobitowym, które zapewnia operacje arytmetyczne i logiczne. ALU składa się z:

rejestry akumulatorów, rejestry przechowywania TMP1 i TMP2;

stałe ROM;

sumator;

rejestr dodatkowy (rejestr B);

bateria (ACC);

rejestr statusu programu (PSW).

Zarejestrować akumulator i rejestry przechowywania- ośmiobitowe rejestry przeznaczone do odbierania i przechowywania operandów na czas trwania na nich operacji. Rejestry te nie są dostępne programowo.

Stałe ROM zapewnia opracowanie kodu korygującego dla reprezentacji danych binarno-dziesiętnych, kodu maski dla operacji bitowych oraz kodu stałego.

Równoległy 8-bitowy sumator jest układem kombinacyjnym z sekwencyjnym transferem, przeznaczonym do wykonywania operacji arytmetycznych dodawania, odejmowania i logicznych operacji dodawania, mnożenia, nierównoważności i tożsamości.

Zarejestruj się- ośmiobitowy rejestr używany podczas operacji mnożenia i dzielenia. W przypadku innych instrukcji może być traktowany jako dodatkowy rejestr notatnika.

Bateria- ośmiobitowy rejestr przeznaczony do odbierania i przechowywania wyniku uzyskanego podczas wykonywania operacji arytmetyczno-logicznych lub operacji przesuwania

Interfejs szeregowy i blok przerwań (SIP) przeznaczony do organizowania wejścia - wyjścia sekwencyjnych przepływów informacji oraz organizacji systemu przerwań programu. W skład bloku wchodzą:

bufor PIP;

logika sterowania;

rejestr kontrolny;

bufor nadajnika;

bufor odbiornika;

nadajnik-odbiornik portu szeregowego;

rejestr priorytetów przerwań;

rejestr włączania przerwań;

logika przetwarzania flagi przerwań i schemat generowania wektorów.

Licznik programu zaprojektowany do tworzenia aktualnego 16-bitowego adresu pamięć wewnętrzna programy i 8/16-bitowy adres zewnętrznej pamięci programu. Licznik programu składa się z 16-bitowego bufora PC, rejestru PC i obwodu inkrementacyjnego (zwiększanie zawartości o 1).

Pamięć danych (RAM) służy do tymczasowego przechowywania informacji wykorzystywanych podczas wykonywania programu.

Porty P0, P1, P2, P3 są quasi-dwukierunkowymi portami wejścia-wyjścia i są zaprojektowane tak, aby zapewnić wymianę informacji między OEVM a urządzeniami zewnętrznymi, tworząc 32 linie wejścia-wyjścia.

Rejestr statusu programu (PSW) jest przeznaczony do przechowywania informacji o stanie ALU podczas wykonywania programu.

Pamięć programu (EPROM) przeznaczony do przechowywania programów i jest pamięcią tylko do odczytu (ROM). Różne mikroukłady wykorzystują zamaskowane, kasowalne UV lub pamięci FLASH ROM.

Rejestr wskaźników danych (DPTR) przeznaczony do przechowywania 16-bitowego adresu zewnętrznej pamięci danych.

Wskaźnik stosu (SP) jest ośmiobitowym rejestrem przeznaczonym do organizowania specjalnego obszaru pamięci danych (stosu), w którym można tymczasowo przechowywać dowolną komórkę pamięci.

1.3 Przypisanie pinów mikrokontrolera 8051(Rys. 1.2)

· U ss - potencjał wspólnego przewodu („ziemia”);

U cc - główne napięcie zasilania +5 V;

· X1,X2 - wnioski do podłączenia rezonatora kwarcowego;

· RST - wejście resetu ogólnego mikrokontrolera;

PSEN - zezwolenie na zewnętrzną pamięć programu, wydawane tylko przy dostępie do zewnętrznej pamięci ROM;

· ALE - stroboskop adresu pamięci zewnętrznej;

· EA - wyłącz wewnętrzną pamięć programu; poziom 0 na tym wejściu powoduje, że mikrokontroler wykonuje program tylko z zewnętrznej pamięci ROM; ignorowanie wewnętrznego (jeśli to drugie istnieje);

Ryż. 1.2. Przypisanie pinów 8051.

P1 - ośmiobitowy quasi-dwukierunkowy port wejścia/wyjścia, każdy bit portu może być zaprogramowany zarówno do wprowadzania, jak i wyprowadzania informacji, niezależnie od stanu innych bitów;

· P2 - ośmiobitowy port quasi-dwukierunkowy, podobny do P1, piny tego portu służą do wysyłania informacji adresowych podczas dostępu do zewnętrznego programu lub pamięci danych (jeśli jest używane 16-bitowe adresowanie tego ostatniego). Ponadto piny portu są używane podczas programowania do wprowadzania bitów wyższego rzędu adresu do mikrokontrolera;

· РЗ - ośmiobitowy port quasi-dwukierunkowy, podobny do Р1, piny tego portu mogą pełnić szereg alternatywnych funkcji, które są wykorzystywane w obsłudze timerów, szeregowego portu I/O, kontrolera przerwań i zewnętrznych pamięć programów i danych;

· P0 - multipleksowany ośmiobitowy dwukierunkowy port wejścia-wyjścia informacji, przez ten port w różnych momentach wyprowadzany jest młodszy bajt adresu i danych.

Organizacja pamięci

Cała seria MCS-51 ma architekturę Harvarda, czyli oddzielne przestrzenie adresowe pamięci programu i pamięci danych. Strukturę pamięci przedstawiono na ryc. 1.3.

Ilość wewnętrznej (rezydentnej) pamięci programu (ROM, EPROM lub OTP ROM) umieszczonej na chipie, w zależności od typu mikroukładu, może wynosić 0 (bez ROM), 4K (układ podstawowy), 8K, 16K lub 32K. W razie potrzeby użytkownik może rozszerzyć pamięć programu, instalując zewnętrzną pamięć ROM. Dostęp do wewnętrznej lub zewnętrznej pamięci ROM zależy od wartości sygnału na pinie EA (External Access):

EA=V cc (napięcie zasilania) - dostęp do wewnętrznej pamięci ROM;

EA=V ss (potencjał masy) - dostęp do zewnętrznej pamięci ROM.

W przypadku chipów ROMless pin EA musi być na stałe podłączony do V ss .

Ryż. 1.3. Organizacja pamięci rodziny MCS-51

Strob odczytu zewnętrznej pamięci ROM - (Program Store Enable) jest generowany podczas uzyskiwania dostępu do zewnętrznej pamięci programu i jest nieaktywny podczas dostępu do pamięci ROM znajdującej się na chipie. Niski obszar adresowy pamięci programu jest używany przez system przerwań. Podstawowa architektura układu 8051 obsługuje pięć źródeł przerwań:

dwa przerwania zewnętrzne;

dwa przerwania z timerów;

przerwania z portu szeregowego.

Na ryc. 1.4 pokazuje mapę dolnego obszaru pamięci programu.

Ryż. 1.4. Mapa dolnego obszaru pamięci programu

Pamięć programu (ROM)

W przypadku mikrokontrolerów z rodziny 8051 pamięć programu i pamięć danych są niezależnymi i niezależnymi urządzeniami, adresowanymi przez różne polecenia i sygnały sterujące.

Ilość wbudowanej pamięci programowej umieszczonej na chipie mikrokontrolera 8051 to 4 KB (w rodzinie do 32). Podczas uzyskiwania dostępu do zewnętrznej pamięci programu wszystkie mikrokontrolery 8051 zawsze używają adresu 16-bitowego, co zapewnia im dostęp do 64 KB pamięci ROM. Mikrokontroler uzyskuje dostęp do pamięci programu podczas odczytu kodu operacji i operandów (za pomocą licznika programu PC), a także podczas wykonywania poleceń kopiowania bajtu z pamięci programu do akumulatora. Podczas wykonywania poleceń kopiowania danych adresowanie komórki pamięci programu, z której będą odczytywane dane, może być realizowane zarówno za pomocą licznika PC, jak i specjalnego dwubajtowego rejestru wskaźników danych DPTR.

Pamięć danych (RAM)

Ilość wbudowanej pamięci danych to 128 bajtów. Zewnętrzna pamięć danych może mieć do 64 KB. Pierwsze 32 bajty są zorganizowane w cztery banki rejestrów ogólnego przeznaczenia, oznaczone odpowiednio bank 0 - bank 3. Każdy z nich składa się z ośmiu rejestrów R0-R7. W każdej chwili program jest dostępny, z adresowaniem rejestrów, tylko jeden bank rejestrów, których liczba zawarta jest w trzecim i czwartym bicie słowa statusowego programu PSW.

8051 Adresy obszaru bitowego mikrokontrolera

Tabela 1.1

Adres bajtu (szesnastkowy) Adresy bitowe po bicie
D7 D6 D5 D4 D3 D2 D1 D0
2F 7F 7E 7D 7C 7B 7A
2E
2D 6F 6E 6D 6C 6B 6A
2C
2B 5F 5E 5D 5C 5B 5A
2A
4F 4E 4D 4C 4B 4A
3F 3E 3D 3C 3B 3A
2F 2E 2D 2C 2B 2A
1F 1E 1D 1C 1B 1A
0F 0E 0D 0C 0B 0A
20h

Pozostała przestrzeń adresowa może być konfigurowana przez programistę według własnego uznania: może pomieścić obszar stosu, systemu i danych użytkownika. Dostęp do komórek pamięci danych można uzyskać na dwa sposoby. Pierwszy sposób to bezpośrednie adresowanie komórki pamięci. W tym przypadku adres komórki jest operandem odpowiedniej instrukcji. Drugą metodą jest adresowanie pośrednie za pomocą rejestrów wskaźnikowych R0 lub R1: przed wykonaniem odpowiedniego polecenia jeden z nich musi zawierać adres komórki, do której jest konieczny dostęp.

Aby uzyskać dostęp do zewnętrznej pamięci danych, stosuje się tylko adresowanie pośrednie za pomocą rejestrów R0 i R1 lub za pomocą 16-bitowego rejestru wskaźnikowego DPTR.

Część pamięci danych to obszar bitowy, ma on możliwość użycia specjalnych poleceń bitowych do adresowania każdej cyfry komórek pamięci. Adres bitów bezpośrednio adresowalnych można również zapisać w postaci (ByteAddress).(Bit). Zgodność między tymi dwoma metodami adresowania można określić z tabeli. 1.1.

Mikrokontrolery z rodziny MSS-51 zbudowane są zgodnie z architekturą Harvarda, w której pamięć programu i pamięć danych są odseparowane, posiadają własne przestrzenie adresowe i sposoby dostępu do nich.

Pamięć programu


Maksymalna ilość pamięci to 64K bajtów, z czego 4K, 8K, 16K lub 32K bajtów pamięci (Tabela 7.3.1) znajduje się na chipie, reszta znajduje się poza chipem.
Gdy napięcie na wyjściu EA = VCC używana jest zarówno pamięć wewnętrzna, jak i zewnętrzna, z EA \u003d V CC \u003d 0 - tylko pamięć zewnętrzna.
Tabela 7.3.1 pokazuje adresy pamięci programu we wskazanych przypadkach.
Dolny obszar pamięci programu jest zarezerwowany na rozpoczęcie pracy mikrokontrolera ( adres startowy 0000h po resecie) oraz do obsługi przerwań (adresy przerwań są umieszczone w odstępach 8-bajtowych: 0003h, 000Bh, 0013h itd.).


Pamięć programu jest tylko do odczytu, a przy dostępie:

● do pamięć zewnętrzna programów, generowany jest sygnał ¯PSEN i zawsze generowany jest adres 16-bitowy.
Młodszy bajt adresu przechodzi przez port P0 w pierwszej połowie cyklu maszyny i jest blokowany na krawędzi strobu ALE w rejestrze.
W drugiej połowie cyklu port P0 służy do wprowadzania do MCU bajtu danych z pamięci zewnętrznej.
Starszy bajt adresu jest transmitowany przez port P2 przez cały czas dostępu do pamięci (rys. 7.1.11);

● do pamięć wewnętrzna sygnał odczytu nie jest generowany i cykle wymiany są wykorzystywane na wewnętrznej magistrali mikrokontrolera.

Pamięć danych

pamięć wewnętrzna dane można warunkowo podzielić na trzy bloki (tabela 7.3.2).

Pamięć wewnętrzna jest zawsze adresowana bajtem, co zapewnia adresowanie tylko do 256 lokalizacji w pamięci.
Dlatego, jak widać z tabeli 7.3.2, do adresowania górnych 8-bitowych komórek wewnętrznej pamięci RAM i rejestrów funkcji specjalnych SFR zajmujących tę samą przestrzeń adresową, polecenia wykorzystują różne metody adresowania: pośrednią i prostą.

Cechy organizacji dolnego regionu wewnętrznej pamięci RAM znajdują odzwierciedlenie w tabeli 7.3.3.

Mniejsze 32 bajty wewnętrznej pamięci RAM o adresach 00h.
1Fh są pogrupowane w cztery banki po osiem rejestrów (R0.R7).
Kolejne 16 bajtów pamięci RAM adres 20h.
2Fh to obszar pamięci 8x16=128 bitów, który umożliwia dostęp do każdego pojedynczego bitu.
Do wyboru adresu rejestru bankowego używana jest jego nazwa R0.
R7, do wyboru banku - bity RS0, RS1 rejestru słowa statusu PSW.

Adresy bitowe

Adresy bitowe podano w tabeli 7.3.3.

Przeprowadzane jest adresowanie bezpośredni sposób.

Lista wszystkich rejestrów funkcji specjalnych SFR wraz z ich adresami jest podana w tabeli 7.2.2.
Dla jasności w tabeli 7.3.

4 jest podane mapa adresu rejestruSFR rozważane mikroukłady z rodziny MCS-51.
Adres SFR jest określany przez kombinację cyfr kolumny i wiersza w systemie szesnastkowym.

Na przykład rejestr CMOD ma adres D9h.

W przypadku SFR, których adresy kończą się na 0h lub 8h (pogrubione), oprócz bajt dozwolony bitowe adresowanie.

W tym przypadku adres bitu zajmującego zarejestruj N-ty bit, zdefiniowany jako XXh + ​​0Nh, gdzie XXh to adres rejestru SFR, N = 0,7.
Adresy bitowe w tym obszarze mają wartości od 80H do FFH.
Na przykład adresy bitowe akumulatora ACC leżą w zakresie E0h-E7h.

Pamięć zewnętrzna dane (do 64 KB) są tworzone przez dodatkowe układy pamięci podłączone do MK.
Do pracy z zewnętrzną pamięcią danych stosuje się specjalne polecenia, dzięki czemu przestrzenie adresowe pamięci zewnętrznej i wewnętrznej nie nakładają się na siebie, dzięki czemu oba typy pamięci danych mogą być używane jednocześnie.

Aby uzyskać dostęp do komórek zewnętrznej pamięci danych, użyj (rys. 7.1.8):
● komendy z adresowaniem pośrednim;
● odczytu sygnałów ¯RD i zapisu ¯WR;
● port P0 do przesyłania młodszego bajtu adresu i odbierania/wysyłania bajtów danych;
● Port P2 do przesyłania starszego bajtu adresu.
Metody adresowania.
System poleceń wykorzystuje:
● adresowanie bezpośrednie, pośrednie, rejestrowe, pośrednio-rejestrowe, bezpośrednie i indeksowe (adresowanie pośrednie sumą rejestrów bazowych i indeksowych) operandy źródłowe;
● adresowanie bezpośrednie, rejestrowe i pośrednie rejestrowe operandy docelowe.
Połączenie tych metod (adresowanie) zapewnia 21 trybów adresowania.
W tej i poniższych tabelach systemu dowodzenia używane są następujące oznaczenia:

adresowanie bezpośrednie.

W tej metodzie adresowania lokalizacja bajtu lub bitu danych jest określona przez 8-bitowy adres drugiego (i trzeciego) bajtu instrukcji.
Adresowanie bezpośrednie jest używane tylko w celu uzyskania dostępu do wewnętrznej pamięci danych (mniejsze 128 bajtów pamięci RAM) i rejestrów funkcji specjalnych.

adresowanie rejestru.


Ten sposób adresowania zapewnia dostęp do danych przechowywanych w jednym z ośmiu rejestrów R0.
R7 obecnego banku rejestrów roboczych.
Może być również używany do uzyskiwania dostępu do rejestrów A, B, AB (rejestr podwójny), rejestru wskaźnikowego DPTR i flagi przenoszenia C.
Adres tych rejestrów jest osadzony w kodzie operacji, zmniejszając w ten sposób liczbę bajtów poleceń.

Pośrednie adresowanie rejestrów.


W takim przypadku adres danych jest przechowywany w rejestrze wskaźników, którego lokalizacja jest określona przez kod operacyjny.
Ta metoda adresowania służy do uzyskiwania dostępu do zewnętrznej pamięci RAM i górnej połowy wewnętrznej pamięci RAM.
Rejestry-wskaźniki adresów 8-bitowych mogą być rejestrami R0, R1 wybranego banku rejestrów roboczych lub wskaźnikiem stosu SP, do adresowania 16-bitowego wykorzystywany jest tylko rejestr wskaźników danych DPTR.

adresowanie bezpośrednie.


W tym sposobie adresowania dane są bezpośrednio wskazywane w poleceniu i znajdują się w drugim (lub w drugim i trzecim) bajcie polecenia, tj.
nie jest wymagane adresowanie pamięci.
Na przykład polecenie MOV A,#50 ładuje liczbę 50 do akumulatora A.

adresowanie indeksu.


Metoda ta to adresowanie pośrednie rejestrowe, w którym adres bajtu danych określany jest jako suma zawartości rejestrów bazowego (DPTR lub PC) i indeksowego (A).
Sposób używany tylko do dostępu do pamięci programu i tylko w trybie odczytu; ułatwia przeglądanie tabel zapisanych w pamięci programu.

Struktura dowodzenia.

Długość polecenia to jeden (49 poleceń), dwa (45 poleceń) lub trzy (17 poleceń) bajty.
Pierwszy bajt polecenia zawsze zawiera kod operacji (KO), podczas gdy drugi i trzeci bajt to adresy operandów lub bezpośrednie wartości danych.

Jako operandy mogą być użyte pojedyncze bity, tetrady, bajty i słowa dwubajtowe.
Istnieje 13 typów poleceń, które podano w tabeli 7.3.5:

● A, PC, SP, DPTR, Rn (n = 0, 7) - akumulator, licznik programu, wskaźnik stosu, rejestr wskaźnika danych i bieżący rejestr bankowy;
● Rm (m = 0, 1) — aktualny rejestr bankowy używany do adresowania pośredniego;
● direct — 8-bitowy adres bezpośrednio adresowanego operandu;
● bit — adres bitu adresowanego bezpośrednio;
● rel — względny adres przejścia;
● addr11, addr16 — 11- i 16-bitowy absolutny adres skoku;
● #data8, #data16 — dane bezpośrednie (operandy) o długości 8 i 16 bitów;
● A10, A9, A0 - oddzielne cyfry adresu 11-bitowego;
● (.) — zawartość komórki pamięci pod adresem podanym w nawiasach;
● SB, MB - wysokie i niskie bajty 16-bitowego operandu.

Ogólne informacje o systemie dowodzenia.

System poleceń zapewnia duże możliwości przetwarzania danych w postaci bitów, tetrad, bajtów, słów dwubajtowych, a także kontrolę w czasie rzeczywistym.
Do opisu poleceń używany jest język asemblera makr ASM51. Składnia większości poleceń składa się z mnemonika (skrótu) określającego operację, która ma zostać wykonana, po której następuje operand.
Operandy są używane do określenia różne drogi adresowanie i typy danych.

W szczególności skrót MOV ma 18 różnych poleceń przeznaczonych do przetwarzania trzech typów danych (bitów, bajtów, adresów) w różnych przestrzeniach adresowych.
Zestaw poleceń ma 42 oznaczenia mnemoniczne 111 typów poleceń dla określenia 33 funkcji MC.

Spośród 111 instrukcji 64 są wykonywane w jednym cyklu maszynowym, 45 w dwóch cyklach, a tylko dwie instrukcje (MUL - mnożenie i DIV - dzielenie) są wykonywane w 4 cyklach. Przy częstotliwości taktowania 12 MHz czas cyklu maszyny (12 cykli) wynosi 1 µs. Za pomocą funkcja funkcjonalna polecenia można podzielić na pięć grup. Poniżej znajduje się opis komend każdej grupy, przedstawiony w formie tabel. Dla zwartości tabel wybieramy grupę poleceń (Tabela 7.3.6), których wykonanie ma wpływ(oznaczone +) o stanie flag słowo statusu rejestru PSW.

Polecenia przesyłania danych

Polecenia wysyłania można podzielić na osobne podgrupy.
Polecenia wysyłania i wymiany danych między komórkami pamięci wewnętrznej(tabela 7.3.7).

Komendy 1-16, mające mnemonik MOV dest, src, są dla przekierowanie bajt lub dwa bajty (polecenie 16) danych ze źródła źródłowego do docelowego miejsca docelowego, podczas gdy:
● wskazać źródło(src) stosowane są cztery metody adresowania: rejestr (polecenia 2-4, 6, 8), bezpośredni (polecenia 1, 7, 9, 11), pośredni (polecenia 5, 10) i bezpośredni (polecenia 12-16);
● wskazać odbiorca(cel) stosowane są trzy metody: rejestr (polecenia 1, 3…5, 9, 12, 14, 16), bezpośredni (polecenia 2, 7, 8, 10, 13), pośredni (polecenia 6, 11, 15).

Zespoły 17-20 zapewniają Wymieniać się informacje pomiędzy dwoma komórkami wewnętrznej pamięci danych (lub transfer w obie strony).
Podczas wykonywania poleceń XCH bajty są wymieniane, podczas gdy polecenia XCHD są wymieniane z niższymi tetradami operandów bajtowych.

Jedną z komórek jest zawsze akumulator A. Jeden z rejestrów banku bieżącego Rn jest używany jako druga komórka w wymianie bajtów, A jest również bezpośrednio lub pośrednio adresowaną komórką pamięci wewnętrznej; podczas wymiany tetrad - tylko pośrednio zaadresowana wewnętrzna komórka pamięci.

Ponieważ we wszystkich MK stos znajduje się w wewnętrznej pamięci RAM, ta sama podgrupa obejmuje zespoły(20, 21) dostęp do stosu PUSH src, POP odb.
Te polecenia wykorzystują tylko metodę adresowania bezpośredniego, zapisując bajt na stosie lub odtwarzając go ze stosu.
Należy pamiętać, że w tych MK, które nie mają górnych 128 bajtów w pamięci RAM, zwiększenie stosu powyżej 128 bajtów prowadzi do utraty danych.

Polecenia przesyłania danych między wewnętrzną i zewnętrzną pamięcią danych(Tabela 7.3.8).

Te polecenia wykorzystują tylko adresowanie pośrednie, podczas gdy jednobajtowy adres może znajdować się w P0 lub R1 bieżącego banku rejestrów, Dwubajtowy adres może znajdować się w rejestrze wskaźnika danych DRTR.
Przy dowolnym dostępie do pamięci zewnętrznej rolę odbiornika lub źródła operandów w pamięci wewnętrznej pełni akumulator A.

Komendy do przesyłania danych z pamięci programu(tabela 7.3.9).

Te instrukcje służą do odczytywania tabel z pamięci programu.

Instrukcja MOVC A,@A + DPTR służy do uzyskiwania dostępu do tabeli z wejściami od 0 do 255.

Numer żądanego wpisu tabeli jest ładowany do akumulatora, a rejestr DPTR jest ustawiany na punkt początkowy tabeli. Charakterystyczną cechą innego polecenia jest to, że licznik programu PC jest używany jako wskaźnik bazowy, a dostęp do tabeli uzyskuje się z podprogramu. Najpierw do akumulatora ładowany jest numer wymaganego punktu wejścia, następnie podprogram jest wywoływany instrukcją MOVC A, @A + PC. Tabela może zawierać 255 wpisów, ponumerowanych od 1 do 255, ponieważ 0 jest używane jako adres polecenia RET do wyjścia z podprogramu.

Polecenia do przetwarzania danych arytmetycznych. Wszystkie polecenia arytmetyczne są wykonywane na liczbach całkowitych bez znaku. Operacje na dwóch operandach(Tabela 7.3.10). W operacjach dodatek DODAJ, dodatek z noszeniem ADDC i odliczenia kredytu SUB:

● źródłem jednego 8-bitowego operandu i odbiornikiem wyniku jest akumulator;
● źródłem innego operandu jest albo jeden z rejestrów roboczych Rn (n = 0-7) bieżącego banku, albo bezpośrednio bezpośredni lub pośrednio @Rm (m = 0, 1) adresowalna lokalizacja pamięci RAM lub dane bezpośrednie #dane.

Operacje mnożenie MUL i dział DIV są wykonywane na zawartości rejestrów A i B. Podczas mnożenia górne 8 bitów wyniku jest zapisywanych w rejestrze B, a dolne 8 bitów w rejestrze A.
Jeżeli produkt jest większy niż 255, ustawiana jest flaga przepełnienia OV; flaga przeniesienia C jest zawsze resetowana. Instrukcja DIV dzieli 8-bitowy argument A akumulatora przez 8-bitowy argument B rejestru.
Podczas dzielenia iloraz (bity najbardziej znaczące) jest zapisywany w rejestrze w A, reszta (bity młodsze) - w B. Flagi przeniesienia C i przepełnienia OV są resetowane.
Próba podzielenia przez 0 ustawia flagę przepełnienia OV. Operacja dzielenia jest częściej używana w przypadku zmian i konwersji baz.

Dzieląc Liczba binarna o 2 N jest przesunięty o N bitów w lewo.
Dodatkowe bity są przesyłane do rejestru B.

Operacje na operandach jednobajtowych(Tabela 7.3.11).

Instrukcja DA służy do wykonywania operacji BCD. Instrukcje INC, DEC pozwalają odpowiednio zwiększyć lub zmniejszyć zawartość komórki pamięci o jeden.
Dotyczą one zawartości akumulatora A, jednego z rejestrów roboczych Rn lub komórki pamięci adresowanej zarówno bezpośrednio, jak i pośrednio.
Operacja inkrementacji dotyczy również zawartości 16-bitowego rejestru wskaźnika DPTR.

Polecenia operacji logicznych.

Podwójne operacje

(Tabela 7.3.12).

Polecenia AML, ORL, XRL pozwalają na wykonanie trzech binarnych operacji logicznych na 8-bitowych operandach: ANL - mnożenie logiczne (AND), ORL - dodawanie logiczne (OR), XRL - OR (XOR).
Operacje wykonywane są na poszczególnych bitach operandów. Źródłem jednego z operandów i jednocześnie odbiornikiem wyniku jest albo akumulator (A) albo bezpośrednio adresowalna komórka pamięci (direct).
Jako źródło innego operandu stosuje się adresowanie rejestrowe, bezpośrednie, pośrednie lub bezpośrednie.

Pojedyncze operacje

(Tabela 7.3.13).
Grupa obejmuje również szereg pojedynczych operacji na zawartości akumulatora A: operacje kasowania (CLR), logicznego dodawania lub inwersji (CPL), cyklicznych i rozszerzonych przesunięć cyklicznych o 1 bit w prawo (RL, RLC) i w lewo (RR, RRC), tetrada wymiany lub cykliczne przesunięcie bajtów o 4 bity (SWAP), A także operacja pusta (NOP), w wyniku której stan wszystkich rejestrów MK (z wyjątkiem licznika programu) pozostaje niezmieniony .

Polecenia transferu sterowania

Bezwarunkowe polecenia skoku

(Tabela 7.3.14).

Komendy 1-3 różnią się jedynie formatem adresu docelowego.

Komenda LJMP (L - Long) wykonuje "długi" bezwarunkowy skok do podanego adresu addr16, ładując do licznika PC drugi i trzeci bajt komendy.
Polecenie zapewnia przejście do dowolnego punktu w 64-bajtowej przestrzeni adresowej.

Polecenie AJMP (A - Absolute) zapewnia "bezwzględny" skok do adresu w obrębie strony 2K bajtów, którego adres początkowy jest ustawiany przez pięć najbardziej znaczących bitów licznika programu PC (początkowo zawartość komputera PC zwiększa o 2).

Polecenie SJMP (S - Short) pozwala na wykonanie „krótkiego” bezwarunkowego skoku do adresu, który jest wyliczany przez dodanie podpisanego offsetu rel w drugim bajcie polecenia z zawartością licznika PC, wcześniej powiększoną o 2 .

Adres skoku mieści się w zakresie -128+127 bajtów w stosunku do adresu polecenia.
Aby przeskoczyć do dowolnego innego punktu w 64-kilobajtowej przestrzeni adresowej, można również użyć polecenia 4 z pośrednim adresowaniem @A+DPTR.
W tym przypadku zawartość A jest interpretowana jako liczba całkowita bez znaku.

Pusta operacja (NOP), w wyniku której stan wszystkich rejestrów mikroprocesora (z wyjątkiem licznika programu) pozostaje niezmieniony.

Instrukcje skoku warunkowego

(tabela 7.3.15).

Instrukcje JZ i JNZ przeskakują, jeśli zawartość akumulatora jest odpowiednio równa lub niezerowa.
Adres skoku jest obliczany przez dodanie względnego przesunięcia znaku rel do zawartości licznika instrukcji PC po dodaniu do niego liczby 2 (długość instrukcji w bajtach).

Zawartość akumulatora pozostaje bez zmian.
Polecenia nie wpływają na flagi.

Polecenia CJNE (3-6) służą do implementacji skoku warunkowego opartego na wyniku porównania dwóch 8-bitowych operandów, których lokalizacja jest określona w poleceniach.
Jeśli ich wartości nie są równe, następuje przejście.

Adres skoku jest obliczany przez dodanie offsetu rel do zawartości licznika PC, wcześniej powiększonego o 3.
V Inaczej wykonywane jest następujące polecenie.

Kolumna Algorithm pokazuje wpływ wartości porównywanych 8-bitowych operandów na flagę przeniesienia C.
Polecenia DJNZ (7, przeznaczone do organizowania cykli programu.

Rejestr Rn lub bezpośrednio (bezpośrednio) adresowalna komórka jest licznikiem powtórzeń cyklu, Przesunięcie rel (w drugim i trzecim bajcie poleceń) jest względnym adresem przejścia na początek cyklu.
Gdy polecenia są wykonywane, zawartość licznika jest zmniejszana o jeden i sprawdzana pod kątem zera.
Jeżeli zawartość licznika nie jest równa zeru, następuje przejście na początek pętli.
W przeciwnym razie wykonywane jest następujące polecenie.

Adres skoku jest obliczany przez dodanie offsetu do zawartości licznika, uprzednio powiększonego o długość polecenia (o 2 lub 3).
Nie ma to wpływu na flagi poleceń.

Polecenia wywoływania podprogramów i powracania z programów

(Tabela 7.3.16).
Wykonują polecenia LCALL „długie połączenie” i ACALL „bezwzględne połączenie” bezwarunkowe połączenie podprogram znajdujący się pod podanym adresem.

Różnica między tymi poleceniami a bezwarunkowymi poleceniami skoku omówionymi powyżej polega na tym, że zapisują adres powrotu (zawartość licznika) do programu głównego na stosie.
Instrukcja powrotu z podprogramu RET przywraca zawartość licznika programu ze stosu, a instrukcja RETI włącza również przerwania poziomu usług.

Polecenia transferu sterowania w dużym stopniu wykorzystują adresowanie względne, które obsługuje relokowalne moduły programu.
Adres względny to 8-bitowy offset ze znakiem rel, który zapewnia rozgałęzienie od aktualnej pozycji licznika PC w obu kierunkach o ±127 bajtów.

Bezpośredni adres addr16 lub pośredni adres @A+DPTR może służyć do przeskakiwania do dowolnego innego punktu w 64-bajtowej przestrzeni adresowej.
W tym drugim przypadku zawartość A jest interpretowana jako liczba całkowita bez znaku.

Wariant krótkiego adresowania bezpośredniego addr11 wewnątrz 2K-bajtów bieżąca strona wprowadzono dla kompatybilności z architekturą MK48.

Wszystkie te typy adresowania można zastosować tylko do operacji skoku, podczas gdy tylko metody adresowania bezpośredniego addr16 i wewnętrznego addr11 są dozwolone dla operacji wywołania.
Wszystkie operacje warunkowe mogą używać tylko adresowania względnego.

Kiedy MK51 rozpoznaje żądanie przerwania, generuje jedną z instrukcji LCALL addr16, która automatycznie przechowuje adres powrotu na stosie.
Jednak w przeciwieństwie do MK48, MK51 nie posiada automatycznie zapisanych informacji o stanie.

W takim przypadku logika przerwań przestaje odpowiadać na żądania poziomu, który został zaakceptowany do obsługi.
Aby obniżyć poziom przerwania, używa się polecenia RETI przerwania powrotu, które oprócz operacji równoważnej RET, zawiera operację włączania przerwań podany poziom.
Typowe operacje warunkowe MK51 obejmują również operacje JZ, JNZ.
Istnieje jednak nowa operacja „Porównaj i przejdź” CJNE.

Zgodnie z tym poleceniem operand jest najpierw porównywany zgodnie z regułami odejmowania liczb całkowitych ze stałą i zgodnie z wynikiem porównania ustawiana jest flaga CY.Następnie w przypadku niezgodności ze stałą, rozgałęzianie jest wykonywane. Porównując akumulator, rejestr lub lokalizację pamięci z sekwencją stałych, otrzymujemy wygodny sposób sprawdzania dopasowań, na przykład w celu zidentyfikowania przypadków specjalnych.

W rzeczywistości polecenie CJNE jest elementem operatora języka wysokiego poziomu typu CASE.

Zespół DJNZ został dalej rozwinięty.
Teraz programista może wykorzystać jako licznik nie tylko jeden z rejestrów roboczych Rn, ale także dowolną komórkę pamięci DSEG.

Polecenia operacji bitowych.

Grupa składa się z 12 poleceń, które umożliwiają wykonanie operacji na jednym lub dwóch bitach (reset, set, bit inversion, A także logiczne AND i OR) oraz 5 poleceń przeznaczonych do realizacji przejść warunkowych (tabela 7.3.17).

Rozkazy zapewniają bezpośrednie adresowanie 128 bitów znajdujących się w szesnastu komórkach wewnętrznej pamięci RAM o adresach 20h.
2Fh (Tabela 7.3.3) oraz 128 bitów umieszczonych w rejestrach specjalnego przeznaczenia, których adresy są wielokrotnościami ośmiu (zaznaczone pogrubioną czcionką w Tabeli 7.3.4).

Podczas wykonywania operacji na dwóch operandach jednobitowych wyzwalacz rejestru PSW jest używany jako akumulator logiczny, który przechowuje flagę przeniesienia C (tabela 7.1.2).

Wykonują polecenia MOV (1,2) przekierowanie bit z jednej bezpośrednio adresowalnej komórki bitowej wewnętrznej pamięci RAM do flip-flop C lub odwrotnie.
Komendy odpowiednio CRL (3, 4), SETB (5, 6) porzucony do zera lub zainstalować do jednej flagi przeniesienia C lub określonego bitu.
Za pomocą poleceń CPL, ANL, ORL (7-12) wykonywane są logiczne operacje odwracania, dodawania i mnożenia.

Grupa zawiera również polecenia (13-17) do implementacji operacji skoku warunkowego z względnym 8-bitowym przesunięciem rel.
Przejścia mogą być realizowane zarówno wtedy, gdy bit lub flaga przeniesienia jest ustawiona (polecenia 13, 16), jak i po wyczyszczeniu (polecenia 14, 17).

Polecenie JBC, oprócz skoku do obliczonego adresu, gdy warunek (bit) = 1 jest spełniony, resetuje ten bit do zera.
Podczas wykonywania instrukcji skoku warunkowego adres skoku jest obliczany po dodaniu do zawartości licznika liczb 3 lub 2 (odzwierciedlających liczbę bajtów w instrukcji).

PLAN WYKŁADU

1. Wstęp

2. Instrukcje arytmetyczne i logiczne

3. Polecenia przesyłania danych

4. Operacje logiczne

5. Instrukcje skoku

1. Wstęp

System dowodzenia MCS-51 obsługuje pojedynczy zestaw instrukcji, który jest przeznaczony do wykonywania 8-bitowych algorytmów sterowania siłownikami. Możliwe jest zastosowanie szybkich metod adresowania wewnętrznej pamięci RAM, wykonując operacje na bitach na małych strukturach danych. Istnieje rozbudowany system adresowania zmiennych jednobitowych jako niezależnego typu danych, co pozwala na używanie poszczególnych bitów w poleceniach logicznych i sterujących algebry Boole'a.

Tryby adresowania : zestaw instrukcji MCS-51 obsługuje następujące tryby adresowania. Adresowanie bezpośrednie: Operand jest określony przez 8-bitowy adres w instrukcji. Adresowanie bezpośrednie jest używane tylko dla dolnej połowy wewnętrznej pamięci danych i rejestrów SFR. adresowanie pośrednie: Instrukcja adresuje rejestr zawierający adres operandu. Ten typ adresowania jest używany dla zewnętrznej i wewnętrznej pamięci RAM. Rejestry mogą służyć do określania 8-bitowych adresów R0 oraz R1 wybrany bank rejestru lub wskaźnik stosu SP. W przypadku adresowania 16-bitowego używany jest tylko rejestr wskaźnika danych. DPTR.

Zarejestruj instrukcje : rejestry R0–R7 bieżący bank rejestrów może być adresowany za pomocą określonych instrukcji zawierających 3-bitowe pole wskazujące numer rejestru w samej instrukcji. W takim przypadku w poleceniu nie ma odpowiedniego pola adresu. Operacje z wykorzystaniem rejestrów specjalnych: niektóre instrukcje wykorzystują indywidualne rejestry (na przykład operacje na akumulatorach, DPTR itp.). W takim przypadku adres argumentu nie jest w ogóle określony w instrukcji. Jest to z góry określone przez kod operacyjny.

Stałe natychmiastowe : stała może znajdować się bezpośrednio w poleceniu za opcodem.

Adresowanie indeksu : Adresowanie indeksowane może być używane tylko w celu uzyskania dostępu do pamięci programu i tylko w trybie odczytu. W tym trybie przeglądane są tabele w pamięci programu. rejestr 16-bitowy ( DPTR lub licznik programu) wskazuje adres bazowy żądanej tabeli, a akumulator wskazuje punkt wejścia do niej.

Zestaw poleceńposiada 42 komendy mnemotechniczne określające 33 funkcje tego systemu. Składnia większości instrukcji języka asemblerowego składa się z mnemonika funkcji, po którym następują operandy określające metody adresowania i typy danych. różne rodzaje dane lub tryby adresowania są określane przez zestaw argumentów, a nie przez zmiany w notacji mnemonicznej.

System poleceń można warunkowo podzielić na pięć grup: polecenia arytmetyczne; polecenia logiczne; polecenia przesyłania danych; instrukcje procesora bitowego; polecenia oddziału i transferu. Poniżej podano oznaczenia i symbole stosowane w systemie dowodzenia.

Tabela. Notacje i symbole używane w systemie dowodzenia

Oznaczenie, symbol

Zamiar

Bateria

Rejestry aktualnie wybranego banku rejestrów

Numer załadowanego rejestru określony w poleceniu

bezpośredni

Bezpośrednio adresowalny 8-bitowy wewnętrzny adres lokalizacji danych, który może być wewnętrzną lokalizacją danych w pamięci RAM (0-127) lub specjalnym rejestrem funkcji SFR (128-255)

Adresowalna pośrednio 8-bitowa wewnętrzna pamięć RAM danych

8 bitowy natychmiastowy dane zawarte w kodzie operacji (COP)

daneH

MSB (15-8) natychmiastowych danych 16-bitowych

dataL

Niskie bity (7-0) natychmiastowych danych 16-bitowych

11-bitowy adres docelowy

adresL

Najmniej znaczące bity adresu docelowego

8-bitowy bajt przesunięcia ze znakiem

Bit adresowany bezpośrednio, którego adres zawiera CPC umieszczony w wewnętrznej pamięci RAM danych lub rejestrze funkcji specjalnych SFR

a15, a14...a0

Bity adresu docelowego

Zawartość elementu X

Treść pod adresem przechowywana w elemencie X

Rozładowanie elementu M X


+

*
ORAZ
LUB
XOR
/X

Operacje:
wzbogacenie
odejmowanie
mnożenie
dział
mnożenie logiczne (operacja AND)
dodawanie logiczne (operacja OR)
dodatek modulo 2 (XOR)
odwrócenie elementu X

Mnemoniki funkcyjne są jednoznacznie powiązane z określonymi kombinacjami metod adresowania i typów danych. Łącznie w systemie dowodzenia możliwych jest 111 takich kombinacji.

2. Instrukcje arytmetyczne i logiczne

Jak przykład instrukcja arytmetyczna, operację dodawania można wykonać za pomocą jednego z następujących poleceń.

DODAJA,7 F 16 - dodaj liczbę 7 do zawartości rejestru A F 16 i zapisz wynik w rejestrze A;

DODAJA,@ r0 - dodać do zawartości rejestru A numer, którego adres (@ – handlowy w ) jest przechowywany w rejestrze r 0 (adresowanie pośrednie) i zapisz wynik w rejestrze A;

DODAJ A,R7- dodaj do zawartości rejestru A zawartość rejestru r 7 i zapisać wynik w rejestrze A;

DODAJ A,#127- dodać do zawartości rejestru A numer, którego adres komórki pamięci to 127 ( # - symbol liczby) i zapisz wynik w rejestrze T- dot. A.

Wszystkie instrukcje arytmetyczne są wykonywane w jednym cyklu maszynowym z wyjątkiem instrukcji INC DPTR(przesunięcie wskaźnika danych DPTR do następnego bajtu), wymagające dwóch cykli maszynowych oraz operacji mnożenia i dzielenia wykonywanych w 4 cyklach maszynowych. Każdy bajt w wewnętrznej pamięci danych może być zwiększany i zmniejszany bez użycia akumulatora.

Instrukcja MUL AB wykonuje mnożenie (mnożenie) danych w akumulatorze z danymi w rejestrze B, umieszczając iloczyn w rejestrach A (dolna połowa) i B (wyższa połowa).

Instrukcja DIV AB dzieli (dzieli) zawartość akumulatora przez wartość w rejestrze B pozostawiając resztę w B i iloraz w akumulatorze.

Instrukcja DA A przeznaczony do operacji arytmetycznych binarno-dziesiętnych (operacje arytmetyczne na liczbach reprezentowanych w kodzie binarno-dziesiętnym). Nie konwertuje binarnego na binarny dziesiętny, ale zapewnia poprawny wynik tylko przy dodawaniu dwóch liczb BCD.

Przykład polecenie logiczne: operację logiczną AND można wykonać jednym z następujących poleceń:

ANLA,7 F 16 - logiczne mnożenie zawartości rejestru A przez liczbę 7 F 16 a wynik jest przechowywany w rejestrze A;

ANLA,@ r1 - logiczne przemnożenie zawartości rejestru A przez liczbę, której adres jest w rejestrze r 1 (adresowanie pośrednie) i zapisać wynik w rejestrze A;

ANL A,R6- logiczne mnożenie zawartości rejestru A przez zawartość rejestru r 6 i zapisz wynik w rejestrze A;

ANL A,#53 - logiczne przemnożenie zawartości rejestru A przez liczbę o adresie komórki pamięci 53 16 i zapisanie wyniku w rejestrze A.

Wszystkie operacje logiczne na zawartości akumulatora wykonywane są w jednym cyklu maszyny, pozostałe w dwóch. Operacje logiczne mogą być wykonywane na dowolnym z dolnych 128 bajtów wewnętrznej pamięci danych lub na dowolnym rejestrze SFR (rejestry funkcji specjalnych) w trybie adresowania bezpośredniego bez użycia baterii.

Operacje obracania RL A, RLC A itd. przesuwają zawartość akumulatora o jeden bit w prawo lub w lewo. W przypadku przesunięcia cyklicznego w lewo, najmniej znaczący bit jest przesuwany do pozycji najbardziej znaczącej. W przypadku prawego przesunięcia cyklicznego dzieje się odwrotnie.

Operacja ZAMIANA A przeprowadza wymianę tetrad młodszych i starszych w akumulatorze.

3. Polecenia przesyłania danych

Zespół MOV dest, src umożliwia przesyłanie danych między wewnętrznymi komórkami RAM lub obszarem rejestru funkcji specjalnych SFR bez użycia baterii. W takim przypadku praca z górną połową wewnętrznej pamięci RAM może odbywać się tylko w trybie adresowania pośredniego, a dostęp do rejestrów SFR– tylko w trybie adresowania bezpośredniego.

We wszystkich mikroukładach MCS-51 stos jest umieszczany bezpośrednio w pamięci rezydentnej danych i rośnie w górę. Instrukcja NACISKAĆ najpierw zwiększa wartość w rejestrze wskaźnika stosu SP, a następnie wypycha bajty danych na stos. Drużyny NACISKAĆ oraz MUZYKA POP są używane tylko w trybie adresowania bezpośredniego (podczas zapisu lub przywracania bajtu), ale stos jest zawsze dostępny przy adresowaniu pośrednim przez rejestr SP. W ten sposób stos może również wykorzystywać górne 128 bajtów pamięci danych. Te same względy wykluczają użycie instrukcji stosu do adresowania rejestrów. SFR.

Instrukcje przesyłania danych obejmują 16-bitową operację przesyłania MOV DPTR, #data16, który służy do inicjalizacji rejestru wskaźnika danych DPTR podczas przeglądania tabel w pamięci programu lub w celu uzyskania dostępu do zewnętrznej pamięci danych.

Operacja XCH A,bajt służy do wymiany danych między akumulatorem a adresowanym bajtem. Zespół XCHD A,@Ri podobny do poprzedniego, ale tylko dla niższych tetrad zaangażowanych w wymianę operandów.

W celu uzyskania dostępu do zewnętrznej pamięci danych wykorzystywane jest tylko adresowanie pośrednie. W przypadku adresów jednobajtowych wykorzystywane są rejestry R0 lub R1 bieżący bank rejestru, a dla 16-bitowych rejestr wskaźnika danych DPTR. Przy każdym sposobie dostępu do zewnętrznej pamięci danych bateria pełni rolę źródła lub odbiornika informacji.

Aby uzyskać dostęp do tabel znajdujących się w pamięci programu, używane są następujące polecenia:

MOVC A,@A+ DPTR ;

MOVC A,@A+ PC .

Zawartość odpowiedniego rejestru wskaźnika danych jest używana jako adres bazowy tabeli. DPTR lub PC(licznik programowy), a przesunięcie jest pobierane z A. Instrukcje te służą wyłącznie do odczytu danych z pamięci programu, a nie do zapisywania do niej.

4. Operacje logiczne

Mikroukłady MCS-51 zawierają procesor logiczny. Wewnętrzna pamięć RAM ma 128 bezpośrednio adresowalnych bitów. Przestrzeń rejestru funkcji specjalnych SFR może również obsługiwać do 128-bitowych pól. Instrukcje bitowe wykonują skoki warunkowe, transfery, resety, inwersje oraz operacje AND i OR. Wszystkie określone bity są dostępne w trybie adresowania bezpośredniego.

Nosić bit CF w specjalnym rejestrze funkcji "słowo statusu programu" PSW' jest używany jako jednobitowy akumulator procesora logicznego.

5. Instrukcje skoku

Adresy operacji skoku są oznaczane w języku asemblerowym przez etykietę lub rzeczywistą wartość w przestrzeni pamięci programu. Warunkowe adresy gałęzi są składane w offset względny - bajt znaku dodawany do licznika programu PC jeśli warunek przejścia jest spełniony. Granice takich skoków leżą między minus 128 a 127 względem pierwszego bajtu następującego po instrukcji. W specjalnym rejestrze funkcji "słowo statusu programu" PSW» nie ma flagi zerowej, więc instrukcje J Z oraz JNZ sprawdź warunek "równa się zeru" podczas testowania danych w akumulatorze.

Istnieją trzy rodzaje bezwarunkowej instrukcji gałęzi: SJMP, LJMP oraz AJMP– adresy docelowe różniące się formatem. Instrukcja SJMP koduje adres jako przesunięcie względne i zajmuje dwa bajty. Odległość skoku jest ograniczona do zakresu od minus 128 do 127 bajtów w stosunku do następującej instrukcji SJMP.

W instrukcji LJMP adres docelowy jest używany jako stała 16-bitowa. Polecenie ma długość trzech bajtów. Adres docelowy może znajdować się w dowolnym miejscu w pamięci programu.

Zespół AJMP używa 11-bitowej stałej adresu. Polecenie składa się z dwóch bajtów. Kiedy ta instrukcja jest wykonywana, dolne 11 bitów licznika adresu jest zastępowane 11-bitowym adresem z instrukcji. Pięć najbardziej znaczących bitów licznika programu PC pozostają bez zmian. W ten sposób skok można wykonać wewnątrz bloku 2 KB, który zawiera instrukcję następującą po instrukcji AJMP.

Istnieją dwa rodzaje instrukcji wywołania podprogramu: LCALL oraz ACALL. Instrukcja LCALL używa 16-bitowego adresu wywoływanego podprogramu. W takim przypadku podprogram może znajdować się w dowolnym miejscu pamięci programu. Instrukcja ACALL używa 11-bitowego adresu podprogramu. W takim przypadku wywoływany podprogram musi znajdować się w tym samym 2-kilobajtowym bloku z następującą instrukcją ACALL. Obie wersje instrukcji wypychają adres następnej instrukcji na stos i ładują go do licznika programu. PC odpowiednią nową wartość.

Podprogram kończy się instrukcją GNIĆ, co pozwala na powrót do instrukcji po poleceniu POŁĄCZENIE. Ta instrukcja zdejmuje adres powrotu ze stosu i ładuje go do licznika programu. PC . Instrukcja RETI używany do powrotu z procedur przerwań. Jedyna różnica RETI z GNIĆ czy to RETI Informuje system, że przetwarzanie przerwań zostało zakończone. Jeśli w momencie egzekucji RETI nie ma innych przerwań, jest identyczny GNIĆ.

Instrukcja DJNZ przeznaczony do kontroli cyklu. Aby uruchomić pętlę n gdy musisz załadować do licznika bajty z wartością n i zamknij ciało pętli poleceniem DJNZ, wskazując początek cyklu.

Zespół CJNE porównuje swoje dwa operandy jako liczby całkowite bez znaku i skacze do podanego w nim adresu, jeśli porównywane operandy nie są równe. Jeśli pierwszy operand jest mniejszy niż drugi, to bit przeniesienia CF ustawić na „1”.

Wszystkie instrukcje w formie złożonej zajmują 1, 2 lub 3 bajty.

Podobał Ci się artykuł? Podziel się z przyjaciółmi!
Czy ten artykuł był pomocny?
tak
Nie
Dziekuję za odpowiedź!
Coś poszło nie tak i Twój głos nie został policzony.
Dziękuję Ci. Twoja wiadomość została wysłana
Znalazłeś błąd w tekście?
Wybierz, kliknij Ctrl+Enter a my to naprawimy!