TMiK Podstawy Techniki Mikroprocesorowej Materiały pomocnicze do wykładu Lidia Łukasiak 1
Treść przedmiotu Wprowadzenie System mikroprocesorowy Mikroprocesor - jednostka centralna Rodzaje pamięci Mikrokontrolery - architektura Wewnętrzne układy wejścia-wyjścia Specjalizowane układy zewn. 2
Treść przedmiotu Programowanie Rodziny mikrokontrolerów Perspektywy rozwoju mikrokontrolerów 3
Literatura do przedmiotu Piotr Misiurewicz, Podstawy techniki mikroprocesorowej, WNT, Warszawa, 1991 Andrzej Rydzewski, Mikrokomputery jednoukładowe rodziny MCS-51, WNT, Warszawa, 1992 J. Doliński, Mikrokomputer jednoukładowy INTEL 8051, Wyd. PLJ, Warszawa, 1993 4
Literatura do przedmiotu Tomasz Owczarek, Laboratorium podstaw techniki mikroprocesorowej i elementów konstrukcji systemów cyfrowych, Oficyna Wydawnicza PW, Warszawa, 1999, 2003 5
Literatura do przedmiotu Tomasz Starecki, Mikrokontrolery jednoukładowe rodziny 51, Nozomi, Warszawa, 1996 W. Daca, Mikrokontrolery od układów 8-bitowych do 32-bitowych, MIKOM, Warszawa, 2000 6
Elementy składowe μp 7 Układ sterowania Rejestr instrukcji IR Licznik rozkazów PC STOS Wskaźnik stosu SP ALU Rejestry robocze Magistrala wewnętrzna Źródło: P. Misiurewicz, Podstawy techniki mikroprocesorowej
Sieć działań IR := M(PC) pobranie (fetch) wykonanie (execute) PC := PC + 1 Dekodowanie Wykonanie 8
Pobranie rozkazu Magistrala adresowa PC MIKRO- PROCESOR IR PAMIĘĆ PROGRAMU Magistrala danych 9
STOS ODKŁADANIE ZDEJMOWANIE SP WIERZCHOŁEK STOSU WSKAŹNIK STOSU 10
Jednostka arytmetyczno-logiczna REJESTR STANU ALU Arithmetic Logic Unit AKUMULATOR 11
System mikroprocesorowy MIKRO- PROCESOR PAMIĘĆ DANYCH PAMIĘĆ PROGRAMU URZĄDZENIA WE/WY Magistrala sterująca Magistrala adresowa Magistrala danych 12
Komunikacja z pamięcią danych MIKROPROCESOR dane adres sygnały sterujące WE OE CE PAMIĘĆ DANYCH WE - write enable OE - output enable CE - chip enable (chip select - CS) 13
Odczyt z pamięci danych ADRES CE OE odczyt DANE 14
Zapis do pamięci danych ADRES CE WE zapis DANE 15
Urządzenia WE/WY Magistrala sterująca Magistrala adresowa Magistrala danych INTERFEJS URZĄDZENIE WE/WY 16
8051 schemat blokowy PRZERWANIA ZEWNĘTRZNE SYSTEM PRZERWAŃ PRZERWANIA WEWNĘTRZNE ROM 4kB RAM 128B LICZNIK T1 LICZNIK T0 WEJŚCIA LICZNIKÓW CPU OSCYLATOR STEROWANIE MAGISTRALĄ 4 PORTY WE/WY PORT SZEREGOWY P0 P1 P2 P3 TXD RXD 17
8051 programowanie Jakiej wiedzy potrzebujemy do oprogramowania mikrokontrolera? o zasobach (pamięci danych oraz innych urządzeniach pokładowych, typu liczniki, port szeregowy, itd.) o liście rozkazowej 18
8051 wewnętrzna pamięć danych 00H 01H 02H 03H 04H 7DH 7EH 7FH 19
8051 banki rejestrów 00H 07H 08H 0FH 10H 17H 18H 1FH R0 R1 R2 R3 R4 R5 R6 R7 Bank rejestrów 1 Bank rejestrów 2 Bank rejestrów 3 Bank rejestrów 0 20
Obszar adresowany bitowo 20H 21H 22H 2EH 2FH 16 bajtów = 128 bitów 21
8051 bajtowy RAM 30H 31H 32H 7EH 7FH 22
Obszar rejestrów specjalnych 80H 88H 90H 98H A0H A8H B0H B8H P0 SP DPH DPL TCON TMOD TL0 TL1 TH0 TH1 P1 SCON SBUF P2 IE P3 IP dostępne bitowo SFR - special function register 23
Obszar rejestrów specjalnych C0H C8H D0H D8H E0H E8H F0H F8H T2CON RCAP2L RCAP2H TL2 TH2 PSW ACC B dostępne bitowo 24
Pobranie rozkazu Magistrala adresowa PC MIKRO- PROCESOR PAMIĘĆ PROGRAMU IR Magistrala danych 25
Pobranie rozkazu Faza pobrania rozkazu jest identyczna dla wszystkich rozkazów i polega na pobraniu kodu rozkazu z pamięci (adres znajduje się w liczniku rozkazów PC) i umieszczeniu go w rejestrze rozkazów IR (rejestr ten nie jest dostępny programowo). 26
Wykonanie rozkazu Faza wykonania jest różna dla różnych rozkazów. Rozkaz przeniesiony do IR steruje układem sterowania CU (control unit) W CU następuje dekodowanie rozkazu i generacja odpowiedniego zestawu sygnałów sterujących wewnętrznych i zewnętrznych. Sygnały wewnętrzne doprowadzane są do właściwych elementów wewnętrznych procesora - umożliwiają wewnętrzny obieg danych i adresów przy wykonywaniu kolejnych rozkazów. Sygnały zewnętrzne umożliwiają współpracę 27 z pamięcią i urządzeniami WE/WY
Co to jest rozkaz? Rozkaz -słowo binarne, niepodzielne z punktu widzenia mikroprocesora, które potrafi on zinterpretować i podjąć ściśle określone czynności wewnętrzne i/lub zewnętrzne. Typy rozkazów: - przesłania danych - przetwarzania danych - sterujące wykonaniem programu lub stanem mikroprocesora 28
Tryby adresowania Rozkaz musi zawierać następujące informacje: - jaka operacja? - gdzie są argumenty? - gdzie umieścić wynik? Sposoby w jakie procesor potrafi sięgać do argumentów operacji nazywamy trybami adresowania. 29
8051 lista rozkazów Rozkazy przesłania danych do/z wewnętrznej pamięci danych zewnętrznej pamięci danych pamięci programu (odczyt) dane 8-bitowe dane 16-bitowe bity dane 8-bitowe dane 8-bitowe 30
8051 lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe mov przeznaczenie, źródło mov A, Rn A:=Rn n=0...7 1 1 1 0 1 r r r adresowanie przez nazwę rejestru 31
8051 lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe mov A, adres A:=M(adres) 1 1 1 0 0 1 0 1 8-bitowy adres argumentu adresowanie bezpośrednie 32
Źródło: P. Misiurewicz, Podstawy techniki mikroprocesorowej Adresowanie bezpośrednie Adres argumentu podany w treści rozkazu PC A Magistrala adresowa Pamięć programu kod op. a L a H Pamięć danych M(adres) argument Magistrala danych } Adres argumentu 33
Adresowanie bezpośrednie Wady: 1. Rozkazy długie (trzeba pobierać kilka bajtów), długi czas wykonania 2. Brak możliwości zmiany adresu w trakcie wykonywania programu Przykład: A:=M(7FH) 1. Z80 LD A, (7FH) 2. 8051 mov A, 7FH (dotyczy wewnętrznej pamięci danych) 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 34
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe mov A, #dana A:=dana 0 1 1 1 0 1 0 0 8-bitowa wartość adresowanie natychmiastowe 35
Adresowanie natychmiastowe Wartość argumentu podana w treści rozkazu PC A M(PC) Magistrala danych Pamięć programu kod op. wartość 36 Źródło: P. Misiurewicz, Podstawy techniki mikroprocesorowej
Adresowanie natychmiastowe Służy do nadawania wartości początkowych Przykład: A := 7FH 1. Z80 LD A, 7FH 2. 8051 mov A, #7FH (dotyczy wewnętrznej pamięci danych) 0 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 37
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe mov A, @Ri A:=M(Ri) i=0,1 1 1 1 0 0 1 1 i adresowanie pośrednie 38
Adresowanie pośrednie Adres argumentu przechowywany w rejestrze zwanym wskaźnikiem danych PC rejestr A M(rejestr) Magistrala danych Pamięć programu kod op. Pamięć danych argument 39 Źródło: P. Misiurewicz, Podstawy techniki mikroprocesorowej
Adresowanie pośrednie Przykład: 1. Z80 LD A, (HL) 2. 8051 mov A, @R1 1 1 1 0 0 0 1 1 40
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe mov przeznaczenie, źródło mov A, Rn A:=Rn n=0...7 mov A, adres A:=M(adres) mov A, #dana A:=dana mov A, @Ri A:=M(Ri) i=0,1 41
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe mov Rn, A Rn:=A n=0...7 mov Rn, adres mov Rn, #dana Rn:=M(adres) Rn:=dana mov R3, R5 mov R3, @R0 42
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe mov adres, A M(adres):=A mov adres, Rn M(adres):=Rn n=0...7 mov adres1, adres2 M(adres1):=M(adres2) mov adres, @Ri M(adres):=M(Ri) i=0,1 mov adres, #dana M(adres):=dana 43
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe mov @Ri, A M(Ri):=A i=0,1 mov @Ri, adres M(Ri):=M(adres) i=0,1 mov @Ri, #dana M(Ri):=dana i=0,1 44
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe Operacje na stosie push adres SP:=SP+1 M(SP):=M(adres) pop adres M(adres):=M(SP) SP:=SP-1 Przykłady: push ACC push A push R3 45
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 1. Dane 8-bitowe Wymiana danych xch A, Rn A:=Rn; Rn:=A xch A, adres A:=M(adres); M(adres):=A xch A, @Ri A:= M(Ri); M(Ri):=A xchd A, @Ri zamiana młodszych 4 bitów 46
8051 - lista rozkazów Przesłanie danych do/z wewnętrznej pamięci danych 2. Dane 16-bitowe mov DPTR, #dana16 DPTR:=dana16 Przesłanie danych do/z wewnętrznej pamięci danych 3. Dane bitowe mov C, bit C:=bit mov bit, C bit:=c 47
Rejestr statusu Rejestr specjalny PSW (MSB) (LSB) CY AC F0 RS1 RS2 OV P CY bit przeniesienia (carry) AC przeniesienie połówkowe (auxiliary carry) F0 flaga ogólnego zastosowania RS1, RS2 bity wyboru banku rejestrów OV bit nadmiaru P bit parzystości 48
8051 - lista rozkazów Oznaczanie bitów adres_bajtu.numer_bitu 1. Obszar adresowany bitowo 20H-2FH (128 bitów) mov C, 25H.3 mov 27H.6, C poszczególne bity ponumerowano od 0 do 127 mov C, 0 mov 3, C 2. Bity rejestrów specjalnych dostępnych bitowo mov ACC.1, C mov C, P1.7 49
Adresowanie bitów (bezpośrednie) Przykład: 1. 8051 mov C, ACC.7 (dotyczy wewnętrznej pamięci danych) 1 0 1 0 0 0 1 0 1 1 1 0 0 1 1 1 adres bitu 2. 8051 mov ACC.0, C (dotyczy wewnętrznej pamięci danych) 1 0 0 1 0 0 1 0 1 1 1 0 0 0 0 0 adres bitu 50
8051 - lista rozkazów Przesłanie danych do/z zewnętrznej pamięci danych 1. Dane 8-bitowe movx przeznaczenie, źródło movx A, @Ri A:=M(Ri) i=0,1 movx @Ri, A M(Ri):=A i=0,1 movx A, @DPTR A:=M(DPTR) movx @DPTR, A M(DPTR):=A 51
Adresowanie pośrednie Adres argumentu przechowywany w rejestrze zwanym wskaźnikiem danych PC DPTR A M(DPTR) Magistrala danych Pamięć programu kod op. Pamięć danych argument 52 Źródło: P. Misiurewicz, Podstawy techniki mikroprocesorowej
Adresowanie pośrednie Przykład: 1. 8051 movx A, @DPTR (dotyczy zewnętrznej pamięci danych) 1 1 1 0 0 0 0 0 53
8051 - lista rozkazów Przesłanie danych z pamięci programu 1. Dane 8-bitowe movc A, @A+DPTR A:=M(A+DPTR) movc A, @A+PC A:=M(A+PC) adresowanie indeksowe 54
Adresowanie indeksowe Pamięć programu PC kod op. DPTR + A argument M(A+DPTR) Magistrala danych 55 Źródło: P. Misiurewicz, Podstawy techniki mikroprocesorowej
Adresowanie indeksowe Przykład: dotyczy pamięci programu 1. 8051 movc A, @A+DPTR 1 0 0 1 0 0 1 1 2. 8051 movc A, @A+PC 1 0 0 0 0 0 1 1 Adres komórki pamięci programu, z której pobierana jest zawartość, obliczany jest jako suma zawartości akumulatora oraz rejestru specjalnego DPTR lub rejestru PC 56
8051 lista rozkazów Rozkazy przetwarzania danych Operacje arytmetyczne Operacje logiczne dane 8-bitowe dane 16-bitowe dane 8-bitowe dane 1-bitowe dodawanie odejmowanie mnożenie dzielenie inkrementacja dekrementacja korekcja dz. inkrementacja dekrementacja iloczyn suma suma rozł. negacja zerowanie obroty zerowanie ustawianie negacja Iloczyn suma 57
Jednostka arytmetyczno-logiczna REJESTR STANU ALU AKUMULATOR Arithmetic Logic Unit 58
8051 - lista rozkazów Rozkazy przetwarzania danych 1. Operacje artymetyczne Rejestr specjalny PSW (program status word): CY AC F0 RS1 RS2 OV - P CY (carry) - przeniesienie AC (auxiliary carry) - przeniesienie połówkowe F0 - flaga ogólnego przeznaczenia RS0, RS1 - wybór banku rejestrów P (parity) - parzystość 59
Nadmiar (overflow) Nadmiar zawiera informację o tym, że wynik operacji na liczbach ze znakiem jest błędny. Możliwe są 2 przypadki: 1. Suma dwóch liczb dodatnich jest liczbą ujemną 2. Suma dwóch liczb dodatnich jest liczbą dodatnią 60
Kod U2 Do uwzględnienia informacji o znaku liczby służy kod uzupełnieniowy do dwóch U2. Informacja ta jest umieszczona w najstarszym bicie (0 - liczba dodatnia, 1 - liczba ujemna). Liczby dodatnie 00000000 = 0 00000001 = +1 00000010 = +2 01111111 = +127 61
Kod U2 Liczby ujemne (ABS) (DEC) NEG 00000001 00000000 11111111 = -1 00000010 00000001 11111110 = -2 10000000 01111111 10000000 = -128 62
Nadmiar Dodawanie dwóch liczb dodatnich 96 01100000 + 42 + 00101010 138 10001010 Jeżeli wynik traktujemy jako liczbę ze znakiem, to: NEG INC ABS 10001010 01110101 01110110 118 Wystąpiło przeniesienie z bitu 6 na 7, ale nie było przeniesienia z bitu 7 na zewnątrz 63
Nadmiar Dodawanie dwóch liczb ujemnych -126 10000010 + -94 + 10100010-220 1 00100100 Jeżeli wynik traktujemy jako liczbę ze znakiem, to otrzymujemy 36 Nie wystąpiło przeniesienie z bitu 6 na 7, ale było przeniesienie z bitu 7 na zewnątrz 64
Nadmiar -126 10000010 + -94 + 10100010-220 1 00100100 Warto zauważyć, że uwzględnienie przeniesienia na zewnątrz daje poprawny wynik: NEG INC ABS 100100100 011011011 01101110 220 65
Korekcja dziesiętna Kod BCD - zapis cyfry dziesiętnej na 4 bitach 59 01011001 + 69 + 01101001 128 11000010 AC Poprawny wynik w kodzie BCD to 000100101000 66
Korekcja dziesiętna Jeżeli młodsza część wyniku > 9 lub AC=1, dodajemy do wyniku 6H (tutaj AC=1) 11000010 + 00000110 11001000 Młodsza cyfra wyniku została już skorygowana 67
Korekcja dziesiętna Jeżeli starsza część wyniku > 9 lub C=1, dodajemy do wyniku 60H (tutaj starsza część > 9) 11001000 + 01100000 1 00101000 Nastąpiła korekcja starszej cyfry 68
8051 - lista rozkazów Rozkazy przetwarzania danych 1. 1. Operacje arytmetyczne na danych 8-bitowych 1.1.1. Dodawanie bez przeniesienia: add A, Rn A:=A+Rn add A, adres A:=A+M(adres) add A, @Ri A:=A+M(Ri) add A, #dana A:=A+dana Wpływa na wartość bitów AC, CY i OV 69
8051 - lista rozkazów Rozkazy przetwarzania danych 1.1. Operacje arytmetyczne na danych 8-bitowych 1.1.2. Dodawanie z przeniesieniem: addc A, Rn addc A, adres addc A, @Ri addc A, #dana A:=A+Rn+CY A:=A+M(adres)+CY A:=A+M(Ri)+CY A:=A+dana+CY Wpływa na wartość bitów AC, CY i OV 70
8051 - lista rozkazów Rozkazy przetwarzania danych 1. 1. Operacje arytmetyczne na danych 8-bitowych 1.1.3. Odejmowanie (zawsze z pożyczką): subb A, Rn subb A, adres subb A, @Ri subb A, #dana A:=A-Rn-CY A:=A-M(adres)-CY A:=A-M(Ri)-CY A:=A-dana-CY Wpływa na wartość bitów AC, CY i OV 71
8051 - lista rozkazów Rozkazy przetwarzania danych 1. 1. Operacje arytmetyczne na danych 8-bitowych 1.1.4. Mnożenie: mul AB A := młodszy bajt iloczynu A B B := starszy bajt iloczynu A B Jeżeli wynik > 255 OV=1 Jeżeli wynik < 255 OV=0 CY=0 bez względu na wynik 72
8051 - lista rozkazów Rozkazy przetwarzania danych 1. 1. Operacje arytmetyczne na danych 8-bitowych 1.1.5. dzielenie: div AB A := wynik całkowity dzielenia A/B B := reszta z dzielenia A/B OV=0, CY=0 73
8051 - lista rozkazów Rozkazy przetwarzania danych 1. 1. Operacje arytmetyczne na danych 8-bitowych 1.1.6. Dekrementacja: dec A A:=A-1 dec Rn Rn:=Rn-1 dec adres M(adres):=M(adres)-1 dec @Ri M(Ri):=M(Ri)-1 74
8051 - lista rozkazów Rozkazy przetwarzania danych 1. 1. Operacje arytmetyczne na danych 8-bitowych 1.1.7. Inkrementacja: inc A A:=A+1 inc Rn Rn:=Rn+1 inc adres M(adres):=M(adres)+1 inc @Ri M(Ri):=M(Ri)+1 75
8051 - lista rozkazów Rozkazy przetwarzania danych 1.1. Operacje arytmetyczne na danych 8-bitowych 1.1.8. Korekcja dodawania w kodzie BCD: da A wpływa na wartość CY 76
8051 - lista rozkazów Rozkazy przetwarzania danych 1.2. Operacje arytmetyczne na danych 16-bitowych 1.2.1. Inkrementacja: inc DPTR DPTR:=DPTR+1 77
8051 - lista rozkazów Rozkazy przetwarzania danych 2. Operacje logiczne 2.1. Operacje logiczne na danych 8-bitowych 2.1.1. Iloczyn logiczny: anl A, Rn A:=A and Rn anl A, adres A:=A and M(adres) anl A, @Ri A:=A and M(Ri) anl A, #dana A:=A and dana anl adres, A M(adres):=M(adres) and A anl adres, #dana M(adres):=M(adres) and dana 78
8051 - lista rozkazów Rozkazy przetwarzania danych 2.1. Operacje logiczne na danych 8-bitowych 2.1.2. Suma logiczna: orl A, Rn A:=A or Rn orl A, adres A:=A or M(adres) orl A, @Ri A:=A or M(Ri) orl A, #dana A:=A or dana orl adres, A M(adres):=M(adres) or A orl adres, #dana M(adres):=M(adres) or dana 79
8051 - lista rozkazów Rozkazy przetwarzania danych 2.1. Operacje logiczne na danych 8-bitowych 2.1.3. Logiczna suma rozłączna EXOR: xrl A, Rn A:=A xor Rn xrl A, adres A:=A xor M(adres) xrl A, @Ri A:=A xor M(Ri) xrl A, #dana A:=A xor dana xrl adres, A M(adres):=M(adres) xor A xrl adres, #dana M(adres):=M(adres) xor dana 80
8051 - lista rozkazów Rozkazy przetwarzania danych (c.d.) 2.1. Operacje logiczne na danych 8-bitowych (c.d.) 2.1.4. Zerowanie akumulatora: clr A A:=0 2.1.5. Negacja akumulatora (bitowa): cpl A A:=A 2.1.6. Zamiana połówek akumulatora swap A 81
8051 - lista rozkazów Rozkazy przetwarzania danych (c.d.) 2.1. Operacje logiczne na danych 8-bitowych (c.d.) 2.1.7. Obrót akumulatora w lewo: rl A 2.1.8. Obrót akumulatora w prawo: rr A 82
8051 - lista rozkazów Rozkazy przetwarzania danych (c.d.) 2.1. Operacje logiczne na danych 8-bitowych (c.d.) 2.1.9. Obrót akumulatora w lewo przez carry: rlc A CY 2.1.10. Obrót akumulatora w prawo przez carry: rrc A CY 83
8051 - lista rozkazów Rozkazy przetwarzania danych (c.d.) 2.2. Operacje logiczne na bitach 2.2.1. Zerowanie bitu clr bit bit:=0 clr C C:=0 2.2.2. Ustawianie bitu setb bit bit:=1 setb C C:=1 84
8051 - lista rozkazów Rozkazy przetwarzania danych (c.d.) 2.2. Operacje logiczne na bitach (c.d.) 2.2.3. Negacja bitu: cpl bit bit:=bit cpl C C:=C 2.2.4. Iloczyn logiczny anl C, bit C:=C and bit anl C, /bit C:=C and bit 85
8051 - lista rozkazów Rozkazy przetwarzania danych (c.d.) 2.2. Operacje logiczne na bitach (c.d.) 2.2.5. Suma logiczna orl C, bit C:=C or bit orl C, /bit C:=C or bit 86
8051 lista rozkazów Rozkazy sterujące wykonaniem programu Skoki bezwarunkowe warunkowe Wywołania procedury bezwzględne względne 87
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 1. 1. Skoki bezwarunkowe AJMP addr11 PC:=PC+2 PC 10 -PC 0 :=addr11 a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 LJMP addr16 PC:=addr16 SJMP rel8 PC:=PC+2 PC:=PC+rel8 88
Przykład: 8051 lista rozkazów ljmp dalej dalej: mov A, @R0 Etykieta symboliczny sposób przedstawienia adresu w pamięci programu 89
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 1. 1. Skoki bezwarunkowe (c.d.) skok pośredni JMP @A+DPTR PC:=PC+A+DPTR 90
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 1.2. Skoki warunkowe jz rel8 PC:=PC+2 jeżeli A=0, PC:=PC+rel8 jnz rel8 PC:=PC+2 jeżeli A 0, PC:=PC+rel8 jc rel8 PC:=PC+2 jeżeli C=1, PC:=PC+rel8 jnc rel8 PC:=PC+2 jeżeli C=0, PC:=PC+rel8 91
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 1.2. Skoki warunkowe (cd) jb bit, rel8 PC:=PC+3 jeżeli bit=1, PC:=PC+rel8 jnb bit, rel8 PC:=PC+3 jeżeli bit=0, PC:=PC+rel8 jbc bit, rel8 PC:=PC+3 jeżeli bit=1, PC:=PC+rel8, bit=0 92
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 1.2. Skoki warunkowe (c.d.) djnz Rn, rel8 djnz adres, rel8 PC:=PC+2, Rn:=Rn-1 jeżeli Rn 0, PC:=PC+rel8 PC:=PC+3, M(adres)=M(adres)-1 jeżeli M(adres) 0, PC:=PC+rel8 93
8051 - lista rozkazów Przykład: mov R7, #4; licznik pętli mov R0, #5AH; adres bazowy mov A, #5; wartość pocz. loop: mov @R0, A inc R0 djnz R7, loop 94
Definiowanie symboli Przykład: loop: baza_buf equ 5AH dlug_buf equ 4 war_pocz equ 00000101b mov R7, #dlug_buf; licznik pętli mov R0, #baza_buf; adres bazowy mov A, #war_pocz; wartość pocz. mov @R0, A inc R0 djnz R7, loop 95
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 1.2. Skoki warunkowe (c.d.) cjne A, adres, rel8 PC:=PC+3, jeżeli A M(adres), PC:=PC+rel8 jeżeli A < M(adres), C:=1 jeżeli A > M(adres), C:=0 kombinacje porównywanych argumentów: A, adres A, #dana @Ri, #dana Rn, adres Rn, #dana 96
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 2. Wywołanie procedury acall addr11 a10 a9 a8 1 0 0 0 1 PC:=PC+2 SP:=SP+1 M(SP):=PC 7 -PC 0 SP:=SP+1 M(SP):=PC 15 -PC 8 a7 a6 a5 a4 a3 a2 a1 a0 PC 10 -PC 0 :=addr11 97
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 2. Wywołanie procedury (c.d.) lcall addr16 PC:=PC+3 SP:=SP+1 M(SP):=PC 7 -PC 0 SP:=SP+1 M(SP):=PC 15 -PC 8 PC:=addr16 98
8051 - lista rozkazów Rozkazy sterujące wykonaniem programu 2. Powrót z procedury ret reti 3. Operacja pusta nop PC 15 -PC 8 :=M(SP) SP:=SP-1 PC 7 -PC 0 :=M(SP) SP:=SP-1 99
8051 - lista rozkazów Przykład: call procedura mov A, R0. procedura: mov R2, #5 ret 100
Procedura Poprawnie napisana procedura: pierwszy rozkaz odwołujący się do stosu musi być rozkazem odłożenia danej na stos (PUSH) liczby umieszczonych wewnątrz procedury rozkazów odkładania i zdejmowania ze stosu muszą być sobie równe procedura musi być zakończona instrukcją powrotu RET (lub RETI w przypadku procedury obsługi przerwania) 101
8051 - lista rozkazów Przykład: call procedura mov A, R0. procedura: push ACC mov A, R4 push ACC pop ACC mov R4, A pop ACC ret 102
8051 - lista rozkazów Przykład: init_display: mov R2, #0.. call init_display mov A, R0.. jmp $ setb P1.5 mov DPTR, #LCD_instr.. ret 103
Przykład: dlugosc equ 25 cseg at 4000H jmp Poczatek org 400BH jmp Timer0Int proc1: mov R2, #5. ret proc2: mov A, #dlugosc. ret Timer0Int: mov TL0, #30H. reti 104
Przykład: Poczatek: mov SP, #30H call proc1 call proc2 call proc3 call proc4 jmp Poczatek proc3:. ret proc4:. ret end 105
8051 - lista rozkazów Przykład: odczyt z pamięci progr. tablica: mov DPTR, #tablica mov A, #0 movc A, @A+DPTR mov R0, A.. db X, 00110001, 25H, Ala 106