Mikroprocesory, Micro 3, Politechnika Lubelska


Laboratorium Podstaw Systemów Mikroprocesorowych

Nazwisko i imię wykonawców:

Wiesław Rycerz

Symbol grupy

ED. 5.4

Data wyk. Ćwiczenia

1997-11-17

Symbol ćwiczenia

3

Temat zadania

Pamięć wewnętrzna RAM. Organizacja

i wykorzystanie stosu.

ZALICZENIE

Ocena

Data

Podpis

Mikrokontroler 8051 posiada wbudowaną do wnętrza pamięć RAM. Tak jak w przypadku pamięci programu, w celu wybrania określonej komórki pamięci należy podać jej adres. Do adresowania pamięci wewnętrznej RAM używany jest adres 8-bitowy pozwala rozróżnić maksymalnie s8 = 256 komórek pamięci. W rzeczywistości w mikrokontrolerze 8051 umieszczono 128 bajtów pamięci RAM (adresy: 00..7F). Natomiast w obszarze adresów 80..FF umieszczono rejestry specjalne (SFR), które sterują różnymi funkcjami mikrokontrolera. W obszarze tym znajdują się między innymi rejestry odpowiedzialne za stan portów. Wartość wpisana do takiego rejestru jest jednocześnie wystawiona na odpowiadający mu port, tzn. Odpowiednie linie ustawiane są w stan niski lub wysoki, zgodnie z wartościami odpowiednich bitów w rejestrze. Rejestrom poszczególnym portów przyporządkowano następujące adresy

Port Adres

P0 80H

P1 90H

P2 A0H

P3 B0H

Chcąc wpisać wartość do odpowiedniego rejestru należy w odpowiednim rozkazie (na przykład MOV) podać adres rejestru. Ten sposób adresowania , w którym w kodzie rozkazu jest umieszczony adres odpowiedniego rejestru, nazywany jest adresowanie bezpośrednim.

Pisząc program w asemblerze nie trzeba umieszczać adresu rejestru w rozkazie (na przykład szesnastkowo), wystarczy podać jego symboliczna nazwę. Wszystkie nazwy rejestrów specjalnych mikrokontrolera 8051 są znane asemblerowi i odpowiadające im adresy zostaną wstawione do kodu programu w trakcie asemblacji.

Możliwe jest również adresowanie bezpośrednie w odniesieniu do poszczególnych bitów. W obszarze rejestrów specjalnych przyjęto zasadę, że bity we wszystkich rejestrach, których adres jest podzielny przez 8, tzn. 80H, 88H, 90H, 98H,.., F8H, można indywidualnie adresować. Adresy w poszczególnych bitach tworzone są następująco:

w rejestrze 80H:

bit 7 6 5 4 3 2 1 0

adres 87H 86H 85H 84H 83H 82H 81H 80H

w rejestrze 88H:

bit 7 6 5 4 3 2 1 0

adres 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H

Poszczególne bity w rejestrach mogą mieć takie same adresy, jak adresy rejestrów, gdyż adresy bitów są wykorzystywane w innych rozkazach niż adresy rejestrów. To rozkaz „wie”, czy podana liczba jest adresem bitu czy rejestru.

Tak jak rejestry, również część bitów posiada swoje nazwy znane asemblerowi. Do pozostałych można odwoływać się poprzez podanie nazwy rejestru i numeru bitu. Na przykład port P1 o adresie 90H oraz bity P1.7 i P1.5 o adresach odpowiednio 97H i 95H.

W obszarze rejestrów specjalnych znajduje się podstawowy rejestr mikroprocesora, tj. akumulator. Jest on umieszczony pod adresem 0E0H. Wiele rozkazów wykonywanych przez mikrokontroler (m.in. arytmetyczne), może zrealizować swoje operacje tylko na tym rejestrze. Umieszczanie adresu akumulatora w kodzie tych rozkazów, byłoby niepotrzebną stratą pamięci. Dlatego też większość rozkazów odnoszących się do akumulatora, nie zawiera w swoim kodzie jego adresu. Ten typ adresowania (w którym nie ma wyspecyfikowanego adresu) nazywany jest adresowaniem rejestrowym. W tego typu rozkazach akumulator oznaczany jest literą A.

Jako, że akumulator leży w obszarze rejestrów specjalnych, może być on adresowany tak, jak każdy inny rejestr, tzn. Bezpośrednio, czyli z umieszczeniem adresu w kodzie rozkazu. W takich przypadkach akumulator oznaczany jest jako ACC. Zawsze jednak rozkazy zostaną wykonane na tym samym rejestrze.

Przykładowo:

MOV A,#10

można zapisać jako

MOV ACC,#10

W pierwszym przypadku zostanie on przetłumaczony jako: 74 0A, natomiast w drugim jako: 75 E0 0A. Skutek działania obu tych rozkazów jest taki sam, ale długość kodu drugiego jest, jak widać, 1.5 razy dłuższa, natomiast czas wykonywania aż 2 razy dłuższy.

Drugim podstawowym rejestrem mikrokontrolera 8051 jest rejestr stanu (PSW- Program Status Word), który znajduje się pod adresem 0D0H. Rejestr ten jest w zasadzie zbiorem niezależnych flag (wskaźników), które są przeważnie wykorzystywane za pośrednictwem ich adresów. Flagi te mogą być ustawiane odpowiednimi rozkazami umieszczonymi w programie, na przykład SETB, CLR itp., ale są one również automatycznie ustawiane w wyniku działania innych rejestrów, na przykład arytmetycznych. Mogą one również wpływać na sposób wykonywania poszczególnych rozkazów.

Rejestr PSW