620


    1. BADANIE MIKROKONTROLERA 8051

1. Cel i zakres ćwiczenia

Poznanie podstawowych działań realizowanych przez mikrokontroler 8051 podczas komunikacji z zewnętrzną pamięcią programu i danych oraz z urządzeniami peryferyjnymi, poprzez rejestrację odpowiednich przebiegów czasowych podczas wykonywania przykładowych rozkazów i programów.

2. Podstawy teoretyczne

Mikrokontroler 8051 jest przedstawicielem 8 - bitowej rodziny układów mikroprocesorowych MCS 51. Schemat funkcjonalny oraz symbol logiczny przedstawia poniższy rysunek.

Rys. 1. Mikrokontroler 8051: a). schemat funkcjonalny, b). symbol logiczny.

Wykorzystanie poszczególnych podzespołów układu i wybór trybów pracy wymaga ustawienia znaczników w odpowiednich słowach sterujących w rejestrach z obszaru rejestrów specjalnych (SFR) znajdujących w wewnętrznej pamięci danych, której podział przedstawia poniższy rysunek.

Rys. 2. Podział wewnętrznej pamięci danych mikrokontrolera 8051.

Podstawową operacją wykonywaną przez mikrokontroler jest cykl rozkazowy, który składa się z określonej liczby cykli maszynowych, wynikającej z dekodowanego rozkazu.

Cykl maszynowy - składa się z sześciu stanów, z których każdy dzieli się na dwie fazy, po jednym takcie zegara każda. Cykl maszynowy jest więc wykonywany w czasie 12 taktów (faz) numerowanych od S1P1 (stan 1, faz 1) do S6P2. Podział cyklu maszynowego pokazano na rys. 3 i 4a, uwzględniając dostępne na zewnątrz układu sygnały: zegarowy XTAL2 oraz ALE, wysyłany dwukrotnie w każdym cyklu (oraz PSEN w przypadku zewn. pamięci programu).

Każdy rozkaz realizowany jest w jednym lub dwu cyklach maszynowych z wyjątkiem mnożenia i dzielenia (4 cykle). ogólnie wyróżnić można cztery typy cykli maszynowych:

Rys. 3. Przebiegi sygnałów w trakcie realizacji cykli: a).odczytu zewn. pamięci programu, b). odczytu oraz zapisu zewn. pamięci danych.

Rys. 4. Cykl maszynowy: a). sygnały zegarowe, b - f). schematy wykonywania przykładowych rozkazów.

W każdym cyklu maszynowym wykonują się pewne elementarne operacje, przy czym w stanach S1 i S4 jest realizowane odczytywanie pamięci programu. Zazwyczaj w stanie S1 jest pobierany (z komórki o adresie zawartym w liczniku rozkazów) kod rozkazu. W stanie S2 dekodowany jest rozkaz oraz zwiększana o 1 zawartość licznika rozkazów. W kolejnych stanach wykonują się operacje wynikające z treści rozkazu. Jeżeli wykonanie rozkazu wymaga odczytania z pamięci programu np. argumentu lub adresu bezpośredniego, to odbywa się to w stanie S4 - w innym przypadku odczytywanie w stanie S4 jest jałowe.

Dzięki dwukrotnemu czytaniu z pamięci programu w każdym cyklu maszynowym, prawie wszystkie rozkazy są wykonywane w czasie jednego lub dwóch cykli. Widać to na rys.4., na którym przedstawiono schematy wykonania przykładowych rozkazów z różnych grup. Tylko sposób wykonania rozkazów MOVX jest nieco odmienny od pozostałych. W tym przypadku, w drugim cyklu maszynowym jest realizowany dostęp do zewnętrznej pamięci danych - nie ma więc pobierania z pamięci programu. Nie jest też wytwarzany sygnał ALE.

Sygnały sterujące:

ALE - sygnał strobujący adres wysyłany do port P0 (w chwili opadającego zbocza adres jest obecny na porcie P0 i dotyczy najbliższego przesłania) przy każdym odczytywaniu z zewnętrznej pamięci programu oraz przy komunikacji z zewnętrzną pamięcią danych, wysyłany dwukrotnie w każdym cyklu maszynowym,

PSEN - sygnał odczytywania z zewnętrznej pamięci programu, wytwarzany przy każdym pobraniu kodu rozkazu lub argumentu,

RD, WR - sygnały odczytywania i zapisywania do zewnętrznej pamięci danych (wytwarzane w czasie wykonywania rozkazów MOVX).

Odczytywanie z zewnętrznej pamięci programu jest wykonywane przez procesor dwukrotnie w każdym cyklu maszynowym, przy pobieraniu z pamięci kodu rozkazu, argumentu bezpośredniego lub danej. Przebiegi czasowe sygnałów w czasie odczytywania przedstawia rys.5.

Rys. 5. Przebiegi czasowe sygnałów w cyklu odczytu zewnętrznej pamięci programu.

Adres jest wpisywany (z licznika rozkazów) do portów P0 i P2 w stanie S5P1 i w stanie S2P1, gdy ALE = 1. Jest on utrzymywany na P2 do końca odczytywania, a na P0 - do zakończenia (opadającego zbocza) impulsu ALE. Port P0 jest ustawiany jako wejściowy (w stan wysokiej impedancji), a następnie jest wytwarzany sygnał sterujący PSEN. W odpowiedzi układ pamięci wysyła do portu P0 zawartość zaadresowanej komórki. Wczytanie danych przez procesor następuje w stanie S1P1 i S4P1, chwilę przed narastającym zboczem sygnału PSEN, po czym kończy się wysyłanie adresu na P2.

Odczytywanie lub zapisywanie zewnętrznej pamięci danych jest realizowane w drugim cyklu maszynowym, w czasie wykonywania rozkazów MOVX. Przebiegi czasowe sygnałów podczas odczytywania pokazano na rys.6a. Adres komórki zewnętrznej pamięci danych jest wpisywany w stanie S5P1 pierwszego cyklu (gdy ALE = 1):

- tylko do portu P0 (8 - bitowy adres z rejestru R0 lub R1), gdy jest wykonywany rozkaz

MOVX A, @Ri,

- do portów P0 i P2 (16 - bitowy adres z rejestru DPTR), gdy jest wykonywany rozkaz

MOVX A, @DPTR.

Rys. 6. Przebiegi czasowe sygnałów w cyklach: a). odczytu, b). zapisu zewn. pamięci danych.

Adres na P2 jest utrzymywany do końca odczytywania, natomiast na P0 - do zakończenia (opadającego zbocza) impulsu ALE. Port P0 jest ustawiany jako wejściowy (w stan wysokiej impedancji), a następnie jest wytwarzany sygnał sterujący RD. Wczytanie przez procesor danych wejściowych z portu P0 następuje w stanie S3P1, chwilę przed narastającym zboczem sygnału RD.

Przebiegi czasowe sygnałów podczas zapisywania do zewnętrznej pamięci danych pokazano na rys. 6b. Adres jest, jak poprzednio, wysyłany do portu P0 (przy wykonywaniu rozkazu MOVX @Ri, A) lub do portów P0 i P2 (przy wykonywaniu rozkazu MOVX @DPTR, A). Jest on strobowany sygnałem ALE. Następnie do portu P0 są wpisywane dane do zapisania i jest wytwarzany sygnał sterujący WR. Dane do zapisania są obecne na porcie P0 jeszcze chwilę po zakończeniu (narastającym zboczu) impulsu WR.

W cyklu maszynowym, w którym jest wykonywane zapisywanie lub odczytywanie zewnętrznej pamięci danych, w odróżnieniu od każdego innego cyklu, w stanie S1 i S2 nie jest wytwarzany impuls ALE.

Należy też zwrócić uwagę, że czas od chwili wysłania adresu oraz od chwili pojawienia się stanu aktywnego sygnału sterującego do momentu odczytania przez procesor danych wejściowych z portu P0 jest krótszy (o dwa okresy oscylatora) przy odczytywaniu zewnętrznej pamięci programu niż przy odczytywaniu pamięci danych.

Mikrokontroler 8051 posiada 32 linie wejścia - wyjścia, zgrupowane w 4 porty: P0, P1, P2 i P3, umieszczone w przestrzeni adresowej wewnętrznej pamięci danych jako rejestry specjalne (o adresach: 80H, 90H, A0H, i B0H - patrz rys.2). Wszystkie porty są dwukierunkowe - mogą być wykorzystane jako wejścia lub wyjścia bezpośrednie. Do rejestrów portów (bitów) pracujących jako wejścia muszą być wpisane jedynki (po wyzerowaniu do rejestrów wszystkich portów wpisywane są jedynki - porty ustawione są jako wejścia). Tylko port P1 jest przeznaczony do pracy wyłącznie jako bezpośrednie wejście - wyjście. Pozostałe linie, w zależności od konfiguracji systemu i oprogramowania, mogą spełniać również inne funkcje. Przy współpracy z zewnętrzną pamięcią programu lub danych port P0 pełni funkcję wejścia - wyjścia dwukierunkowej multipleksowanej magistrali adresowej (8 mniej znaczących bitów) i danych, a port P2 jest wyjściem 8 bardziej znaczących bitów magistrali adresowej. W takim przypadku porty te nie mogą być wykorzystywane jako wejście - wyjście. Bity portu P3 mogą być użyte do pewnych alternatywnych funkcji (we/wy szeregowe, wejścia przerywające, wejścia zewn. liczników T0 i T1, wyjścia strobujące zapis i odczyt do zewn. pamięci danych).

Układ czasowo - licznikowy zawiera dwa 16 - bitowe liczniki T0 i T1, które mogą zliczać impulsy zewnętrzne, doprowadzone do wejść P3.4 i P3.5, spełniając w ten sposób funkcję licznika. Mogą także zliczać wewnętrzne impulsy zegarowe, w celu odmierzania opóźnień czy generowania przerwań zegarowych o zadanej częstotliwości (taktują także transmisję szeregową poprzez linie portu P3). W takim przypadku spełniają funkcję czasomierza. Poza tym każdy z nich może pracować w jednym z czterech indywidualnie ustawianych trybów.

System przerwań może przyjmować zgłoszenia następujących przerwań:

a). zewnętrznych:

- z wejścia INT0 (zn.IE0),

- z wejścia INT1 (zn.IE1),

b). z układu czasowo - licznikowego:

- przepełnienie licznika T0 (zn. TF0),

- przepełnienie licznika T1 (zn. TF1),

c). z portu szeregowego:

- koniec nadawania znaku (TI) lub koniec odbierania znaku (RI).

Z każdą przyczyną przerwania jest związany wyżej wymieniony znacznik, do którego wpisanie jedynki jest zgłoszeniem przerwania. Wyzerowanie znacznika powoduje skasowanie przerwania. Odbywa się to automatycznie - odpowiednio przy wystąpieniu przyczyny przerwania i przy jego przyjęciu (zn. TI, RI nie są zerowane automatycznie). Wszystkie wymienione znaczniki mogą też być ustawiane i zerowane programowo. System przerwań może być włączany i wyłączany oraz każde zgłoszenie może być indywidualnie zamaskowane przez ustawienie odpowiedniego bitu w słowie sterującym IE (1 - odblokowanie przerwania, 1 - zablokowanie, po restarcie IE = 0). Każde z przerwań, przez ustawienie lub wyzerowanie właściwego bitu w słowie sterującym IP, może być programowo umieszczone na wyższym priorytecie (1) lub niższym (0). W razie jednoczesnego zgłoszenia dwóch przerwań, jako pierwsze będzie przyjęte przerwanie z wyższego poziomu priorytetu. Natomiast, przy jednoczesnym zgłoszeniu kilku przerwań umieszczonych na tym samym poziomie, o kolejności decyduje sztywno ustalony priorytet zgłoszeń (w kolejności od najwyższego: zewn. INT0, od licznika T0, zewn. INT1, od licznika T1, od portu szeregowego). Ponadto, umieszczenie przerwań na danym poziomie priorytetu decyduje o możliwości przerywania programów obsługi innych przerwań. W czasie wykonywania programu obsługi przerwania z niższego poziomu priorytetu będzie przyjęte zgłoszenie przerwania z wyższego poziomu (o ile nie jest zablokowane), a nie będzie przyjęte zgłoszenie przerwania z niższego poziomu. W czasie wykonywania programu obsługi przerwania z wyższego poziomu priorytetu nie będzie przyjęte żadne zgłoszenie przerwania. Program obsługi przerwania z wyższego poziomu jest nieprzerywalny. Jeżeli w słowie IE jest EA = 1 (włączony system przerwań), to w stanie S6 każdego cyklu maszynowego są przeglądane znaczniki nie zamaskowanych przerwań. Wykrycie zgłoszenia powoduje (o ile nie jest spełniony żaden z poniższych warunków), że w następnym cyklu maszynowym rozpocznie się wykonywanie cyklu przyjęcia przerwania o najwyższym priorytecie ze zgłoszonych. Warunki uniemożliwiające przyjęcie przerwania:

Jeżeli co najmniej jeden z warunków jest spełniony, to przyjęcie przerwania zostaje wstrzymane. W następnym cyklu maszynowym następuje ponowne sprawdzenie znaczników zgłoszeń.

Podczas cyklu przyjęcia przerwania są wykonywane następujące operacje:

ustawienie wewnętrznego przerzutnika poziomu przerwania,

wyzerowanie znacznika zgłoszenia przyjętego przerwania (poza TI i RI),

zapisanie na stosie zawartości licznika rozkazów PC,

wpisanie do licznika rozkazów adresu początku programu obsługi przerwania:

0003H - dla przerwania zewnętrznego INT0,

000BH - dla przerwania z licznika T0,

0013H - dla przerwania zewnętrznego INT1,

001BH - dla przerwania z licznika T0,

001BH - dla przerwania z portu szeregowego,

Cykl przyjęcia przerwania jest wykonywany w ciągu dwóch cykli maszynowych. Po jego zakończeniu procesor rozpoczyna realizację kolejnych cykli rozkazowych i wykonuje się program obsługi przerwania. Program obsługi przerwania musi być zakończony rozkazem powrotu z przerwania - RETI. Do chwili wykonania tego rozkazu nie zostanie przyjęte żadne zgłoszenie przerwania z poziomu równego lub niższego niż poziom obsługiwanego przerwania. Wykonanie rozkazu RETI powoduje wyzerowanie przerzutnika poziomu, ustawionego przy przyjęciu przerwania, oraz zdjęcie ze stosu adresu powrotu (2 bajty) i wpisanie go do licznika rozkazów.

Wybrane rozkazy mikrokontrolera 8051:

Rozkaz

Znaczenie

B/C

Kod

OPERACJE ARYTMETYCZNO - LOGICZNE

ADD A, <s>

Dodaj do akumulatora wskazany argument, wynik wpisz do akumulatora.

-----

-----------

ADD A, Rr

A <- A + Rr

1/1

28...2FH

ADD A, @Ri

A <- A + (Ri)

1/1

26,27H

ADD A, ad

A <- A + (ad)

2/1

25H

ADD A, #n

A <- A + n

2/1

24H

ANL <r>, <s>

Iloczyn logiczny (bit po bicie) wskazanych argumentów, wynik w <r>.

-----

-----------

ANL A, Rr

A <- A ^ Rr

1/1

58...5FH

ANL A, ad

A <- A ^ (ad)

2/1

55H

ANL A, @Ri

A <- A ^ (Ri)

1/1

56,57H

ANL A, #n

A <- A ^ n

2/1

54H

ANL ad, A

(ad) <- (ad) ^ A

2/1

52H

ANL ad, #n

(ad) <- (ad) ^ n

3/2

53H

ORL <r>, <s>

Suma logiczna (bit po bicie) wskazanych argumentów, wynik w <r>.

-----

-----------

ORL A, Rr

A <- A v Rr

1/1

48...4FH

ORL A, ad

A <- A v (ad)

2/1

45H

ORL A, @Ri

A <- A v (Ri)

1/1

46,47H

ORL A, #n

A <- A v n

2/1

44H

ORL ad, A

(ad) <- (ad) v A

2/1

42H

ORL ad, #n

(ad) <- (ad) v n

3/2

43H

INC <r>

Zwiększ argument o 1.

-----

-----------

INC A

A <- A + 1

1/1

04H

INC Rr

Rr <- Rr + 1

1/1

08..0FH

INC ad

(ad) <- (ad) + 1

2/1

05H

INC @Ri

(Ri) <- (Ri) + 1

1/1

06,07H

INC DPTR

DPTR <- DPTR + 1

1/2

A3H

DEC <r>

Zmniejsz argument o 1.

-----

-----------

DEC A

A <- A - 1

1/1

14H

DEC Rr

Rr <- Rr - 1

1/1

18..1FH

DEC ad

(ad) <- (ad) - 1

2/1

15H

DEC @Ri

(Ri) <- (Ri) - 1

1/1

16,17H

CLR A

Wyzeruj akumulator A <- '0'.

1/1

E4H

CPL A

Neguj akumulator A <- A.

1/1

F4H

SWAP A

Wymień półbajty w akumulatorze

A3..0 <-> A7..4

1/1

C4H

RL A

7 <- A 0 /przesuwa w A bity o jedną pozycję w lewo/

1/1

23H

RR A

7 -> A 0 /przesuwa w A bity o jedną pozycję w prawo/

1/1

03H

PRZESŁANIA

MOV <r>, <s>

Ośmiobitowe dane z miejsca wskazanego przez drugi argument są przesyłane do miejsca wskazanego przez pierwszy argument.

------

-----------

MOV A, Rr

A <- Rr

1/1

E8...EFH

MOV A, ad

A <- (ad)

2/1

E5H

MOV A, @Ri

A <- (Ri)

1/1

E6,E7H

MOV A, #n

A <- n

2/1

74H

MOV Rr, A

Rr <- A

1/1

F8...FFH

MOV Rr, ad

Rr <- (ad)

2/2

A8...AFH

MOV Rr, #n

Rr <- n

2/1

78...7FH

MOV ad, A

(ad) <- A

2/1

F5H

MOV ad, Rr

(ad) <- Rr

2/2

88...8FH

MOV ad1, ad2

(ad1) <- (ad2)

3/2

85H

MOV ad, @Ri

(ad) <- (Ri)

2/2

86,87H

MOV ad, #n

(ad) <- n

3/2

75H

MOV @Ri, A

(Ri) <- A

1/1

F6,F7H

MOV @Ri, ad

(Ri) <- (ad)

2/2

A6,A7H

MOV @Ri, #n

(Ri) <- n

2/1

76,77H

MOV DPTR,#nn

DPTR <- nn

3/2

90H

XCH A, <s>

Zawartość akumulatora jest wymieniana z zawartością wskazanego argumentu.

------

------------

XCH A, Rr

A <-> Rr

1/1

C8...CFH

XCH A, ad

A <-> (ad)

2/1

C5H

XCH A, @Ri

A <-> (Ri)

1/1

C6,C7H

XCHD A, @Ri

A3..0 <-> (Ri)3..0

1/1

D6,D7H

MOVX

Zapis lub odczyt zewn. pamięci danych.

------

------------

MOVX A, @Ri

A <- (Ri)

1/2

E2,E3H

MOVX @Ri, A

(Ri) <- A

1/2

F2,F3H

MOVX A, @DPTR

A <- (DPTR)

1/2

E0H

MOVX @DPTR, A

(DPTR) <- A

1/2

F0H

OPERACJE NA BITACH

CLR bit

(bit) <- '0'

2/1

C2H

SETB bit

(bit) <- '1'

2/1

D2H

CPL bit

(bit) <- (bit)

2/1

B2H

SKOKI

AJMP adr11

PC10..0 <- adr11

2/2

01,21H

SJMP d

PC <- PC + d

2/2

80H

LJMP adr16

PC <- adr16

3/2

02H

3. Opis stanowiska laboratoryjnego.

Rozkazy do mikrokontrolera przesyła się za pomocą klawiatury komputerowej. Opis klawiszy używanych na stanowisku laboratoryjnym podano niżej:

Klawisz

Opis

F1

Tryb pracy krokowej

F2

Tryb pracy automatycznej

F3

Tryb wpisywania programu do symulowanej pamięci ROM

C

Sygnał zegarowy (CLK)

R

Sygnał zerowania (RESET)

SPACJA

Start pracy automatycznej wolnej

G

Start pracy automatycznej szybkiej

TAB

Przełączanie między pamięcią ROM i RAM

0,1..7

Ustawianie bitów danych

H + x + y

Ustawianie bajtu danych (x - starsza część bajtu, y - młodsza część bajtu, x,y = (0, 1 .. 9 ,A ,B .. F)

4. Pytania kontrolne.

1. Podać definicję cyklu maszynowego i rozkazowego.

2. Wyjaśnić do czego służy sygnał ALE.

3. Wyjaśnić do czego służy sygnał PSEN.

4. Podać kiedy uaktywniane są sygnały RD i WR.

5. Wyjaśnić pojęcie priorytetu przerwań i podać jego kolejność.

6. Podać na czym polega cykl przyjęcia przerwania oraz kolejność operacji wówczas wykonywanych.

7. Podać kiedy przerwanie nie może być przyjęte.

8. Podać czym kończy się podprogram obsługi przerwania i co jest następnie wykonywane.

5. Zadania laboratoryjne.

Ćwiczenie I: Podstawowe cykle pracy mikrokontrolera 8051.

1. W trybie 'F1' zdjąć przebiegi czasowe sygnałów CLK, ALE, PSEN, stan portów P0 i P2 oraz adresy: A 0-7 i A 8-15, w trakcie realizacji jednego z podanych rozkazów:

a). skok bezwarunkowy pod adres 16 - bitowy (adr16):

LJMP adr16 (np. LJMP 0D00Dh ;kod: 02 D0 0D h),

b). załadowanie komórki o adresie bezpośrednim 8 - bitowym (ad) argumentem bezpośrednim 8 - bitowym (n):

MOV ad, #n (np. MOV 90h, #0ABh ; kod: 75 90 AB h),

c). załadowanie rejestru roboczego Rr adresem bezpośrednim 8 - bitowym (ad):

MOV Rr, ad (np. MOV R7, 0EEh ;kod: AF EE h),

d). załadowanie wskaźnika danych DPTR argumentem bezpośrednim 16- bitowym (nn):

MOV DPTR, #nn (np. MOV DPTR, #0E00Eh) ;kod: 90 E0 0E h).

Przygotowanie do kolejnych zajęć:

W sprawozdaniu:

Ćwiczenie II: Komunikacja mikrokontrolera 8051 z pamięcią zewnętrzną.

1. W trybie 'F3' wprowadzić do symulowanej pamięci programu wybrany program:

a).

org 0000h

POCZATEK:

MOV R1, #0Bh ; wpis 8 - bitowego argumentu bezpośredniego (będącego ; w tym wypadku adresem wykorzystanym dalej w trybie ; adresowania pośredniego) do rejestru R1

MOV A, #0AAh ; wpis 8 - bitowego argumentu bezpośredniego do akumulatora

MOVX @R1, A ; zapisanie komórki zewnętrznej pamięci danych o adresie ; w rejestrze R1 zawartością akumulatora

MOVX A, @R1 ; odczyt zewnętrznej pamięci danych

MOV P1, A ; przesłanie do portu P1 zawartości akumulatora

MOV P1, #0FFh ; ustawienie portu P1 w stan wysoki

LJMP POCZATEK ; skok do adresu 0000h

Adres Kod Program źródłowy:

hex hex

0000 org 0000h

0000 POCZATEK:

0000 79 0B MOV R1, #0Bh

0002 74 AA MOV A, #0AAh

0004 F3 MOVX @R1, A

0005 E3 MOVX A, @R1

0006 F5 90 MOV P1, A

0008 75 90 FF MOV P1, #0FFh

000B 02 00 00 LJMP POCZATEK

b).

org 0000h

POCZATEK:

MOV DPTR, 0F00Fh ; wpis 16 - bitowego adresu do wskaźnika danych DPTR

MOV A, #0AAh ; wpis 8 - bitowego argumentu bezpośr. do akumulatora

MOVX @DPTR, A ; zapisanie komórki zewnętrznej pamięci danych o adresie ; w DPTR zawartością akumulatora

MOVX A, @DPTR ; odczyt zewnętrznej pamięci danych

MOV P1, A ; przesłanie do portu P1 zawartości akumulatora

MOV P1, #0FFh ; ustawienie portu P1 w stan wysoki

LJMP POCZATEK ; skok do adresu 0000h

Adres Kod Program źródłowy:

hex hex

0000 org 0000h

0000 POCZATEK:

0000 90 F0 0F MOV DPTR, #0F00Fh

0003 74 AA MOV A, #0AAh

0005 F0 MOVX @DPTR, A

0006 E0 MOVX A, @DPTR

0007 F5 90 MOV P1, A

0009 75 90 FF MOV P1, #0FFh

000C 02 00 00 LJMP POCZATEK

2. Przejść do trybu 'F2', uruchomić automatyczne wykonywanie programu i zaobserwować poprawność wykonywania programu.

3. Włączyć sygnał RESET (R) następnie zatrzymać pracę automatyczną, zdjąć sygnał RESET i rozpocząć pracę krokową (pozostając w trybie F2). Po wykonaniu restartu rozpoczyna się wykonywanie wprowadzonego programu. Po trzech pełnych cyklach maszynowych (od S4 do S3) rozpocząć zdejmowanie przebiegów następujących sygnałów (od stanu S4): CLK, ALE, PSEN, RD, WR, A0-7, A8-15, P0 oraz P1. Zdejmowanie przebiegów zakończyć w momencie pojawienia się w porcie P1 wartości AAh.

W sprawozdaniu:

Ćwiczenie III: Komunikacja mikrokontrolera 8051 z urządzeniami peryferyjnymi.

Napisać krótkie programy (do 64 bajtów) realizujące podane niżej zadania, wykorzystując wcześniej listą zamieszczoną rozkazów (do każdego z zadań należy starać się używać innych rozkazów):

VI. Literatura.

[1] Rydzewski Andrzej: „Mikrokomputery jednoukładowe rodziny MCS - 51”,

[2] Jakubiec Jerzy: „Wprowadzenie do techniki mikroprocesorowej”,

[3] Gałka Piotr, Gałka Paweł: „Podstawy programowania mikrokontrolera 8051”.

4.7-13

BADANIE MIKROKONTROLERA 8051

______________________________________________________________________________________

__________________________________________________________________________________________

LABORATORIUM TECHNIKI CYFROWEJ I MIKROPROCESOROWEJ

<r> - miejsce pobrania argumentu

i zapisania wyniku operacji,

<s> - miejsce pobrania drugiego

argumentu operacji,

@ - w mnemoniku poprzedza

adres pośredni,

# - w mnemoniku poprzedza

argument bezpośredni,

Rr - rejestr roboczy, r = 0...7,

Ri - rejestr roboczy - wskaźnik

danych, i = 0,1,

DPTR - wskaźnik danych (DPH,

DPL),

PC - licznik rozkazów,

ad - 8 - bitowy adres bezpośr.,

n - 8 - bitowy argument bezp.,

nn - 16 - bitowy argument bezp.,

bit - 8 - bitowy adres w RAM lub

SFR,

adr 11 - adres 11 - bitowy,

adr 16 - adres 16 - bitowy,

d - 8 - bitowe przesunięcie o

wartościach z przedziału

<-128, 127>,

B/C - liczba bajtów/ liczba cykli

maszynowych.



Wyszukiwarka