21 Pisanie i uruchamianie programów w asemblerze

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”




MINISTERSTWO EDUKACJI

NARODOWEJ

Danuta Pawełczyk

Pisanie i uruchamianie programów w asemblerze

311[07].Z4.01





Poradnik dla ucznia






Wydawca

Instytut Technologii Eksploatacji – Państwowy Instytut Badawczy
Radom 2006

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

Recenzenci:
mgr inż. Elżbieta Małgorzata Majka
mgr inż. Anna Kembłowska

Opracowanie redakcyjne:
mgr inż. Danuta Pawełczyk



Konsultacja:
mgr inż. Gabriela Poloczek



Korekta:
mgr inż. Urszula Ran



Poradnik stanowi obudowę dydaktyczną programu jednostki modułowej 311[07].Z4.01

„Pisanie i uruchamianie programów w asemblerze” zawartego w modułowym programie
nauczania dla zawodu technik elektronik.















Wydawca

Instytut Technologii Eksploatacji – Państwowy Instytut Badawczy, Radom 2006

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

2

SPIS TREŚCI


1. Wprowadzenie

3

2. Wymagania wstępne

6

3. Cele kształcenia

7

4. Materiał nauczania

8

4.1. System mikroprocesorowy

8

4.1.1. Materiał nauczania

8

4.1.2. Pytania sprawdzające 12
4.1.3. Ćwiczenia 12
4.1.4. Sprawdzian postępów 14
4.2. Komunikacja mikroprocesora z otoczeniem

15

4.2.1. Materiał nauczania

15

4.2.2. Pytania sprawdzające 17
4.2.3. Ćwiczenia 17
4.2.4. Sprawdzian postępów 19
4.3. Mikrokontrolery rodziny ‘51

20

4.3.1. Materiał nauczania

20

4.3.2. Pytania sprawdzające 25
4.3.3. Ćwiczenia 25
4.3.4. Sprawdzian postępów 26
4.4 Programowanie mikrokontrolera w języku asemblera

27

4.4.1. Materiał nauczania

27

4.4.2. Pytania sprawdzające 34
4.4.3. Ćwiczenia 34
4.4.4. Sprawdzian postępów 36
5. Sprawdzian osiągnięć

37

6. Literatura

43

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

3

1. WPROWADZENIE


Poradnik będzie Ci pomocny w przyswajaniu wiedzy z zakresu pisania i uruchamiania

programów w języku asemblera.

W poradniku zamieszczono:

− wymagania wstępne – wykaz umiejętności, jakie powinieneś mieć już ukształtowane, abyś

bez problemów mógł korzystać z poradnika,

− cele kształcenia – wykaz umiejętności, jakie ukształtujesz podczas pracy z poradnikiem,

− materiał nauczania – podstawowe wiadomości teoretyczne niezbędne do opanowania treści

jednostki modułowej,

− zestaw pytań przydatny do sprawdzenia, czy już opanowałeś podane treści,
− ćwiczenia, które pomogą Ci zweryfikować wiadomości teoretyczne oraz ukształtować

umiejętności praktyczne,

− sprawdzian postępów,

− literaturę uzupełniającą,
− sprawdzian osiągnięć – przykładowy zestaw zadań. Pozytywny wynik sprawdzianu

potwierdzi, że dobrze pracowałeś podczas zajęć i nabyłeś wiedzę i umiejętności z zakresu
tej jednostki modułowej.

W materiale nauczania zostały omówione zagadnienia z zakresu budowy

mikroprocesorów, sposobu ich programowania w języku asemblera oraz kompilowania
i uruchamiania napisanych programów. Przy poznawaniu budowy mikroprocesora, listy
rozkazów, sposobu programowania i uruchamiania programów niewątpliwie pomocny będzie
nauczyciel, który pomoże Ci w przypadku pojawienia się problemów.

Z rozdziałem „Pytania sprawdzające” możesz zapoznać się:

przed przystąpieniem do rozdziału „Materiał nauczania” – poznając przy tym wymagania
wynikające z zawodu, a po przyswojeniu wskazanych treści, odpowiadając
na te pytania sprawdzisz stan swojej gotowości do wykonywania ćwiczeń,

po opanowaniu rozdziału „Materiał nauczania”, by sprawdzić stan swojej wiedzy, która
będzie Ci potrzebna do wykonywania ćwiczeń.

Kolejny etap to wykonywanie ćwiczeń, których celem jest uzupełnienie i utrwalenie

wiadomości z zakresu programowania mikroprocesorów.

Wykonując ćwiczenia przedstawione w poradniku lub zaproponowane przez nauczyciela,

będziesz poznawał budowę mikroprocesora na przykładzie mikrokontrolera rodziny ‘51, jego
listę rozkazów, sposób programowania oraz kompilowania, debbugowania i uruchamiania
programów w języku asemblera.

Po wykonaniu zaplanowanych ćwiczeń, sprawdź poziom swoich postępów wykonując

„Sprawdzian postępów”.

W tym celu:

− przeczytaj pytania i odpowiedz na nie,
− podaj odpowiedź wstawiając X w podane miejsce,

− wpisz Tak, jeśli Twoja odpowiedź na pytanie jest poprawna,

− wpisz Nie, jeśli Twoja odpowiedź na pytanie jest niepoprawna.

Odpowiedzi Nie wskazują luki w Twojej wiedzy, informują Cię również, jakich

zagadnień jeszcze dobrze nie poznałeś. Oznacza to także powrót do treści, które nie są
dostatecznie opanowane.

Poznanie przez Ciebie wszystkich lub określonej części wiadomości będzie stanowiło

dla nauczyciela podstawę przeprowadzenia sprawdzianu poziomu przyswojonych wiadomości

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

4

i ukształtowanych umiejętności. W tym celu nauczyciel może posłużyć się zadaniami
testowymi.

W poradniku jest zamieszczony sprawdzian osiągnięć, który zawiera przykład takiego

testu oraz:
− instrukcję, w której omówiono tok postępowania podczas przeprowadzania sprawdzianu,

− przykładową kartę odpowiedzi, w której w przeznaczonych miejscach wpisz odpowiedzi

na zadania lub zakreśl właściwe odpowiedzi spośród zaproponowanych.


Jednostka modułowa: „Pisanie i uruchamianie programów w języku asemblera”, której

treści teraz poznasz jest jednym z modułów koniecznych do zapoznania się z badaniem
układów mikroprocesorowych – schemat 1.


Bezpieczeństwo i higiena pracy

W czasie pobytu w pracowni musisz przestrzegać regulaminów, przepisów bhp i higieny

pracy oraz instrukcji przeciwpożarowych, wynikających z rodzaju wykonywanych prac.
Przepisy te poznasz podczas trwania nauki.



background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

5

Schemat układu jednostek modułowych w module 311[07].Z4 „Badanie układów mikroprocesorowych”.

311[07].Z4

Badanie układów

mikroprocesorowych

311[07].Z4.01

Pisanie i uruchamianie programów

w asemblerze

311[07].Z4.02

Badanie modułów wewnętrznych

mikrokontrolera

311[07].Z4.03

Badanie układów zewnętrznych

mikrokontrolera

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

6

2. WYMAGANIA WSTĘPNE


Przystępując do realizacji programu jednostki modułowej „Pisanie i uruchamianie

programów w asemblerze ” powinieneś umieć:
− opracowywać algorytm programu i zapisywać go w postaci schematu blokowego,

− konwertować liczby z systemu dziesiętnego na binarny i ósemkowy oraz z binarnego

i szesnastkowego na dziesiętny,

− wykonywać działania arytmetyczne (dodawanie i odejmowanie) i logiczne (suma, iloczyn,

suma modulo 2, negacja) na liczbach binarnych,

− znać budowę i działanie podstawowych układów cyfrowych,

− korzystać z różnych źródeł informacji.

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

7

3. CELE KSZTAŁCENIA


W wyniku realizacji programu jednostki modułowej powinieneś umieć:

− rozpoznać poszczególne bloki systemu mikroprocesorowego na podstawie schematu

blokowego,

− podłączyć różne rodzaje pamięci półprzewodnikowych w systemie,
− scharakteryzować rolę układów wejścia/wyjścia, sposób podłączeń do systemu układów

izolowanych i współadresowalnych z pamięcią,

− scharakteryzować rolę wybranych rejestrów,

− scharakteryzować operacje wejścia/wyjścia, sposób realizacji (przerwania, bezpośredni

dostęp do pamięci – DMA) oraz pojęcie priorytetu i poziomu przerwań,

− scharakteryzować podstawowe zasoby mikrokontrolera (porty, pamięć programu, pamięć

danych i SFR oraz sposoby sterowania poborem mocy),

− podłączyć zewnętrzną pamięć danych i pamięć programu do mikrokontrolera,

− odczytać dane binarne z wybranego portu,
− zapisać i przejrzeć zawartości rejestrów w mikrokontrolerze,

− zinterpretować wykresy czasowe obrazujące realizację wybranych typów rozkazów

mikrokontrolera,

− skorzystać z listy rozkazów mikrokontrolera,
− obsłużyć mikroprocesorowy system uruchomieniowy,

− napisać w edytorze, zasemblować i uruchomić programy w trybie krokowym

i ciągłym,

− utworzyć i wywołać podprogramy,
− wykorzystać gotowe procedury obsługi wyświetlacza i klawiatury zawarte w pamięci

ROM,

− zastosować wybrane dyrektywy asemblera do nadawania symbolom wartości,

− zastosować wybrane dyrektywy asemblera przy pisaniu i łączeniu modułów programów,
− obsłużyć linker,

− zastosować istniejące programy jako podprogramy we własnym programie głównym

(zmiana pliku absolutnego na relokowalny, dodanie instrukcji RET), stworzyć
makroinstrukcje i posłużyć się nimi,

− stworzyć algorytmy programów z uwzględnieniem rozgałęzień i pętli programowych,

− napisać programy przemieszczające bloki informacji pomiędzy poszczególnymi rodzajami

pamięci,

− zastosować podprogramy oraz wykorzystać metody ich tworzenia (ochrona zawartości

rejestrów, przekazywanie danych pomiędzy programem głównym i podprogramem),

− napisać programy wykorzystujące algorytmy mnożenia i dzielenia liczb binarnych bez

znaku oraz wykorzystujące rozkazy arytmetyczne dostępne dla nowoczesnych
mikrokontrolerów jednoukładowych,

− zastosować algorytmy dodawania, odejmowania, mnożenia i dzielenia wielobajtowych

liczb binarnych.

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

8

4. MATERIAŁ NAUCZANIA

4.1. System mikroprocesorowy

4.1.1. Materiał nauczania

Systemy mikroprocesorowe służą do przetwarzania informacji. Przetwarzanie

informacji polega na dostarczeniu do systemu danych, które poddawane są określonym
działaniom dając wyniki. Wynikami mogą być sygnały sterujące pracą maszyn, obrazy, teksty
itp. Jedną z ważniejszych części tego systemu jest procesor, który przetwarza informacje,
wykonując na niej elementarne operacje zwane instrukcjami (bądź rozkazami). Ciąg takich
instrukcji realizujący konkretne zadanie przetwarzania informacji nazywamy programem.
Tak więc do systemu mikroprocesorowego musimy dostarczyć dane wejściowe, program
lub zestaw programów, aby po przetworzeniu otrzymać wynik.

Rys. 1. System mikroprocesorowy

Typowy system mikroprocesorowy składa się z następujących części:

− mikroprocesora
− pamięci danych RAM

− pamięci programu ROM

− układów wejścia/wyjścia
− układów sterujących przepływem informacji między tymi elementami: magistrali danych,

magistrali adresowej i sygnałów sterujących.

system

mikroprocesorowy

dane

pr

og

ra

m

wyniki

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

9

Schemat blokowy systemu mikroprocesorowego opartego na architekturze von Neumana:

Rys. 2. Schemat systemu mikroprocesorowego

Mikroprocesor pełniący funkcję jednostki centralnej umożliwia wykonywanie operacji

przetwarzania danych poprzez realizację programu zapisanego w pamięci programu.

Mikroprocesor składa się z dwóch układów: układu sterowania oraz jednostki

arytmetyczno-logicznej wraz z rejestrami roboczymi.
Zadaniem układu sterowania jest pobieranie rozkazów z pamięci programu, dekodowanie ich
oraz wystawianie odpowiednich sygnałów sterujących (wewnętrznych i zewnętrznych) w celu
wykonania rozkazów.
Jednostka arytmetyczno-logiczna służy do wykonywania operacji arytmetycznych
lub logicznych na liczbach binarnych. Jednostka arytmetyczno logiczna zawiera również
rejestr wskaźników (flagowy), w którym ustawiane są znaczniki wyniku wykonanej operacji
(np. flaga znaku, zera, przeniesienia).


Pamięć programu – pamięć nieulotna, przechowuje program w języku maszynowym.

Najczęściej jest wykonywana jako pamięć typu:

−ROM – programowana przez producenta

−PROM – programowana jednorazowo przez użytkownika
−EPROM, EEPROM – do wielokrotnego programowania przez użytkownika

Pamięć danych – pamięć typu odczyt/zapis, służy do przechowywania danych podczas

realizacji programu.


Układy wejścia/wyjścia – umożliwiają prawidłową komunikację między

mikroprocesorem a otoczeniem – urządzeniami zewnętrznymi. Zadaniem układów
wejścia/wyjścia jest zapewnienie odpowiedniej postaci danej (np. zamiana z postaci
szeregowej na równoległą i odwrotnie) oraz dopasowanie czasowe wymiany danej
(np. zapamiętanie danej do czasu, kiedy odbierze ją urządzenie zewnętrzne).


Magistrala danych – zespół linii, którymi przesyłane są liczby binarne (dane, kody

rozkazów, słowa sterujące i statusowe).

magistrala adresowa


mikro-
procesor


pamięć
danych


pamięć
programu


układy
we–wy

magistrala danych

magistrala sterująca

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

10

Magistrala adresowa – zespół linii, którymi procesor adresuje poszczególne komórki

pamięci programu, danych lub rejestry układów wejścia/wyjścia.

Magistrala sterująca – zespół linii, którymi wymieniane są sygnały sterujące.

Mikroprocesor zawiera następujące podzespoły:

− jednostkę arytmetyczno–logiczną ALU (arithmetic and logic unit),
− akumulator A (accumulator),

− licznik rozkazów PC (program counter),

− zestaw rejestrów roboczych R

i

(general purpose register),

− rejestr rozkazów IR (instruction register),

− wskaźnik stosu SP (stack pointer),

− układ sterowania CU (control unit).

Rys. 3. Schemat blokowy mikroprocesora

Jednostka arytmetyczno–logiczna (ALU) wykonuje podstawowe działania logiczne

i arytmetyczne na słowach takich jak suma logiczna, iloczyn logiczny, suma modulo 2,

negacja, dodawanie i odejmowanie arytmetyczne, porównywanie, rotacja. Wykonanie

operacji arytmetycznej lub logicznej powoduje ustawienie znaczników (flag) w rejestrze

wskaźników. Najczęściej stosowane flagi to:

− przeniesienia CY (przyjmuje wartość 1 jeżeli wystąpiło przeniesienie z najbardziej

znaczącej pozycji),

− przeniesienia połówkowego AC (przyjmuje wartość 1 jeżeli wystąpiło przeniesienie z bitu

3 na 4 – wykorzystywany w operacjach na liczbach BCD),

− zera Z (przyjmuje wartość 1 jeżeli wynik operacji jest równy 0),

− znaku S (przyjmuje wartość 1 jeżeli wynik operacji jest ujemny),

− parzystości P (przyjmuje wartość 1 jeżeli liczba jedynek w wyniku operacji jest

nieparzysta).

Akumulator – rejestr związany z jednostką arytmetyczną – z akumulatora jest domyślnie

pobierany jeden z argumentów operacji dwuargumentowej, w akumulatorze jest umieszczany

wynik operacji. Akumulator jest również wykorzystywany podczas komunikacji

z urządzeniami zewnętrznymi.

MAGISTRALA
STERUJĄCA

MAG. ADRESOWA

MAGISTRALA DANYCH

A

ALU

REJ. FLAG.

REJESTRY
ROBOCZE

SP

PC

IR

CU

SYGN
STER.

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

11

Rejestry robocze mogą pełnić różną role, w zależności od realizowanego rozkazu. Mogą

służyć do przechowywania danych lub adresów. Na rejestrach można wykonywać niektóre

operacje wynikające z listy rozkazów.

Licznik rozkazów PC służy do adresowania pamięci programu tzn. przechowuje adres

komórki pamięci, z której należy pobrać kod następnego rozkazu. W czasie realizacji

programu licznik zwiększa swoją zawartość po pobraniu każdego rozkazu lub jest do niego

wpisywana wartość (np. adres skoku).

Rejestr rozkazów IR służy do przechowywania pobranego z pamięci programu kodu

rozkazu.

Układ sterowania CU dekoduje zawartość rejestru rozkazów i generuje sygnały

sterujące zapewniające realizację pobranego rozkazu.

Wskaźnik stosu SP służy do adresowania wydzielonego obszaru pamięci danych,

w którym zapisywane są adresy i dane zgodnie z regułą LIFO (last in first out) tzn. kolejność

odczytu słowa jest odwrotna do kolejności ich zapisywania. Tak jest zorganizowana

programowa realizacja stosu, niektóre mikroprocesory posiadają stos sprzętowy. Stos

i wskaźnik stosu umożliwiają przejście do podprogramu, a po jego zakończeniu powrót do

programu głównego.

Mikroprocesory są układami sekwencyjnymi synchronicznymi, dlatego też z układem

sterowania musi współpracować generator impulsów zegarowych.

Rozkazy są realizowane w cyklach rozkazowych. Każdy cykl maszynowy składa się

z cykli maszynowych. Cykl maszynowy to część cyklu rozkazowego związana z odwołaniem

się (w celu odczytu lub zapisu) do pamięci lub układu wejścia/wyjścia. Cykl maszynowy

składa się z określonej liczby taktów zegarowych.

Każdy cykl rozkazowy można podzielić na dwie fazy:

− faza pobrania rozkazu z pamięci programu,

− faza wykonania rozkazu, która ma inny przebieg dla każdego rozkazu.

Faza pobrania rozkazu jest jednakowa dla wszystkich rozkazów. Polega na pobraniu

kodu rozkazu z pamięci programu, z komórki której adres wskazuje zawartość licznika

rozkazów PC. Kod pobranego rozkazu jest umieszczany w rejestrze rozkazów IR, licznik

rozkazów zostaje zwiększony, tak aby wskazywał następny rozkaz.

Faza wykonania rozkazu ma różny przebieg, rozpoczyna się w chwili umieszczenia

rozkazu w rejestrze rozkazów IR. Układ sterowania CU na podstawie zdekodowanego stanu

rejestru generuje odpowiednią sekwencję sygnałów sterujących zapewniających prawidłową

realizację rozkazu.

Podczas realizacji programu argumenty mogą być pobierane/zapisywane z/do rejestrów

roboczych, pamięci danych, pamięci programu (tylko odczytywane) lub układów

wejścia/wyjścia. Decyduje o tym użyty sposób adresacji. W mikroprocesorach stosowane są:

− adresacja natychmiastowa – rozkaz zawiera kod rozkazu i argument (tzn. argument jest

przechowywany wraz z kodem rozkazu w pamięci programu)

− adresacja bezpośrednia – rozkaz zawiera kod rozkazu i adres argumentu w pamięci danych

− adresacja rejestrowa – rozkaz zawiera kod rozkazu i nazwę rejestru, w którym

przechowywany jest argument

− adresacja rejestrowa pośrednia – rozkaz zawiera kod rozkazu i nazwę rejestru,

w którym przechowywany jest adres argumentu w pamięci danych.


background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

12

4.1.2. Pytania sprawdzające


Odpowiadając na pytania, sprawdzisz, czy jesteś przygotowany do wykonania ćwiczeń.

1. Z jakich elementów składa się system mikroprocesorowy?
2. Jakie jest przeznaczenie poszczególnych bloków?
3. Z jakich podzespołów składa się mikroprocesor?
4. Do czego służy akumulator?
5. Jakie jest przeznaczenie rejestrów roboczych?
6. Co to jest stos i do czego służy?
7. W jaki sposób jest adresowany stos?
8. Co to jest cykl rozkazowy, cykl maszynowy, takt zegarowy?
9. W jakich fazach odbywa się cykl rozkazowy?
10. Do czego służy licznik rozkazów, kiedy zmieniana jest jego zawartość?
11. Co to jest rejestr flagowy (wskaźników), co oznaczają poszczególne flagi?
12. Jakie są metody adresacji stosowane w mikrokontrolerach?

4.1.3. Ćwiczenia

Ćwiczenie 1

Połącz elementy z lewej strony z ich opisem po prawej stronie. Przeanalizuj zadanie

dla mikroprocesora ośmiobitowego (8–bitowa magistrala danych) z 16 bitową magistralą
adresową.
akumulator

16– bitowy rejestr adresowy pamięci
programu

rejestr roboczy

8–bitowa magistrala dwukierunkowa

licznik rozkazów

wydzielony

fragment

pamięci danych

magistrala danych

8– bitowa magistrala jednokierunkowa

wskaźnik stosu

8– bitowy rejestr, w którym umieszczany jest
wynik operacji arytmetyczno-logicznej

adresacja natychmiastowa

8– bitowy rejestr ogólnego przeznaczenia

stos

argument rozkazu jest pobierany z pamięci
danych

magistrala adresowa

argument rozkazu jest pobierany z pamięci
programu

adresacja rejestrowa
pośrednia

16– bitowy rejestr adresowy pamięci danych

16– bitowa jednokierunkowa magistrala

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

13

Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) przeanalizować podane informacje,
2) dopasować opisy do odpowiednich elementów systemu mikroprocesorowego

lub metod adresacji (jeden opis pozostanie niewykorzystany),

3) zaprezentować wykonane ćwiczenie,
4) dokonać oceny poprawności wykonanego ćwiczenia.


Wyposażenie stanowiska pracy:

− treść zadania dla każdego ucznia,
− zeszyt przedmiotowy,

− literatura z rozdziału 6.

Ćwiczenie 2

W jednostce arytmetyczno logicznej odbywają się wymienione operacje. Uzupełnij

tabelę, określając jaki będzie 8–bitowy wynik działania (binarnie), czyli zawartość
akumulatora po wykonaniu operacji oraz jakie będą flagi po ich wykonaniu: wpisz 0– jeżeli
flaga będzie zerowana, 1– jeśli będzie ustawiana lub x – jeśli wykonanie operacji nie wpływa
na flagę. Dane w tabeli są dziesiętne, pamiętaj, że jednostka arytmetyczno-logiczna wykonuje
operacje na danych binarnych, musisz więc dokonać konwersji:

operacja

wynik operacji w akumulatorze

C

Z

P

135+100

167+200

115

115

120

∧ 100

15

∧ 240

255 ∨ 15


Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) dokonać konwersji danych dziesiętnych na binarne,
2) wykonać podane działania,
3) na podstawie uzyskanych wyników uzupełnić tabelę,
4) zaprezentować wykonane ćwiczenie,
5) dokonać oceny poprawności wykonanego ćwiczenia.


Wyposażenie stanowiska pracy:

− treść zadania dla każdego ucznia,

− zeszyt przedmiotowy,

− literatura z rozdziału 6.



background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

14

4.1.4. Sprawdzian postępów

Czy potrafisz:

Tak Nie

1) rozpoznać poszczególne elementy systemu mikroprocesorowego

na podstawie schematu blokowego?

…

…

2) opisać rolę elementów systemu mikroprocesorowego?

…

…

3) wymienić podzespoły mikroprocesora i podać ich funkcję?

…

…

4) wyjaśnić pojęcia cykl rozkazowy, cykl maszynowy, takt zegarowy?

…

…

5) wyjaśnić z jakich faz składa się cykl rozkazowy?

…

…

6) opisać

metody

adresacji?

…

…

7) przyporządkować metodę adresacji do lokalizacji argumentu?

…

…

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

15

4.2. Komunikacja mikroprocesora z otoczeniem

4.2.1. Materiał nauczania


Zastosowanie systemu mikroprocesorowego do realizacji konkretnych zadań wymaga

zapewnienia wymiany danych między mikroprocesorem i urządzeniami zewnętrznymi
(klawiatura, wyświetlacz, czujniki, układy wykonawcze), a w niektórych przypadkach także
między pamięcią danych a urządzeniami zewnętrznymi.


Układy wejścia/wyjścia pośredniczą w wymianie informacji między mikroprocesorem

a urządzeniami zewnętrznymi. Układy wejścia/wyjścia można podzielić na:
− proste układy wejścia/wyjścia, w których podstawowym elementem jest rejestr danych

lub bramka trójstanowa,

− programowalne, uniwersalne układy wejścia/wyjścia, w których oprócz rejestrów danych

występują rejestry sterujące pozwalające na ustalenie określonego trybu pracy układu,
rejestr statusowy, przechowujący informację o stanie układu oraz wewnętrzny układ
sterowania

− specjalizowane układy wejścia/wyjścia służące do współpracy z konkretnymi

urządzeniami


Komunikacja mikroprocesora z otoczeniem odbywa się za pośrednictwem magistral.
Układ jest wybierany odpowiednim adresem.
Wyróżnia się dwie metody adresowania pamięci i układów wejścia/wyjścia:

− adresowanie jednolite pamięci i układów wejścia/wyjścia (układy wejścia/wyjścia

współadresowalne z pamięcią),

− adresowanie rozdzielone pamięci i układów wejścia/wyjścia.

Adresowanie jednolite (wspólne) polega na dołączaniu układów we/wy w taki sam

sposób jak modułów pamięci. Pamięć i układy we/wy nie są rozróżniane przez procesor
i znajdują się w tej samej przestrzeni adresowej. Te same rozkazy i te same sygnały sterujące
służą do komunikacji z pamięcią i z układami we/wy. Dlatego układy we/wy muszą mieć
przydzielone inne adresy niż komórki pamięci.

Rys. 4. Jednolite adresowanie pamięci i układów wejścia/ wyjścia [1, str39]

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

16

Sygnały sterujące odczytu pamięci MEMR i zapisu pamięci

MEMW

są bramkowane

sygnałem I/O z dekodera adresów wybierającego odpowiedni obszar pamięci dla układów
we/wy i tworzą sygnały sterujące zapisem danych

I/OW

i odczytu danych

I/OR

.


Adresowanie rozdzielone polega na tym, że pamięć i układy we/wy mają odrębne

przestrzenie adresowe – adresy komórek pamięci i układów we/wy mogą być takie same.
Lista rozkazów zawiera odrębną grupę rozkazów dotyczącą komunikacji z pamięcią,
a odrębną do komunikacji z układami wejścia–wyjścia. Mikroprocesor bezpośrednio
wystawia sygnały:

MEMR ,

MEMW

,

I/OW

oraz

I/OR

.

do pamięci

do układów
we/wy

Rys. 5. Rozdzielone adresowanie pamięci i układów wejścia/ wyjścia [1, str39]

Sposoby komunikacji między mikroprocesorem a otoczeniem:

− obsługa programowa (pooling)

− przerwania (interrupt)

− bezpośredni dostęp do pamięci (Direct Memory Access)


Obsługa programowa polega na przeglądaniu przez mikroprocesor stanów

poszczególnych układów we/wy. Mikroprocesor w sposób programowy pobiera zawartości
rejestrów statusowych poszczególnych układów we/wy, sprawdza stan odpowiednich bitów
i na ich podstawie podejmuje decyzje dotyczące określonych działań programowych
dotyczących obsługi urządzenia. Tego typu komunikacja jest bardzo prosta w realizacji
sprzętowej, jej wadą jest fakt, że odbywa się w ściśle określonym momencie realizacji
programu. Nie może więc być stosowana do obsługi urządzeń pracujących w czasie
rzeczywistym, gdzie konieczna jest natychmiastowa obsługa dołączonych urządzeń.

Współpraca z przerwaniami umożliwia praktycznie natychmiastową reakcję na żądanie

obsługi przez urządzenie zewnętrzne. W momencie przyjęcia zgłoszenia żądania obsługi
przez urządzenie procesor zawiesza realizację programu na czas obsługi urządzenia. Układ
we/wy generuje sygnał żądania przerwania INT, mikroprocesor sprawdza stan tego sygnału
pod koniec realizacji każdego rozkazu. Po wykryciu przerwania mikroprocesor:
− zapamiętuje na stosie stan licznika rozkazów (adres rozkazu, który byłby realizowany,

gdyby przerwanie nie nadeszło),

− wpisuje do licznika rozkazów adres podprogramu obsługi przerwania (wektor przerwania),

− realizuje podprogram obsługi przerwania,

− po zakończeniu obsługi przerwania przywraca ze stosu stan licznika rozkazów i wraca

do realizacji programu głównego.

Pamięć

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

17

Jeżeli zgłasza się więcej niż jedno przerwanie układ przerwań rozstrzyga, które

z przerwań ma być obsłużone na podstawie priorytetu.

Układ przerwań może być jedno– lub wielopoziomowy. W jednopoziomowym układzie

przerwań nie ma możliwości zawieszenia realizowanego podprogramu obsługi przerwania
przez żadne inne przerwanie (niezależnie od priorytetu). W wielopoziomowym układzie
przerwań, przerwanie o wyższym poziomie może przerwać podprogram obsługi przerwania
o niższym poziomie. Podprogram obsługi przerwania o niższym poziomie zostanie
dokończony po zrealizowaniu obsługi przerwania o wyższym poziomie.


Przerwanie może zostać przyjęte do obsługi, jeżeli:

− procesor zakończył realizację rozkazu,

− zgłaszające się przerwanie jest odblokowane,

− nie zgłasza się inne przerwanie o priorytecie wyższym,

− nie jest realizowana obsługa innego przerwania (w układzie przerwań jednopoziomowym)

lub przerwania o równym lub wyższym poziomie (w układzie przerwań
wielopoziomowym)


Tryb bezpośredniego dostępu do pamięci DMA jest stosowany podczas wymiany

danych między pamięcią a urządzeniami zewnętrznymi bez udziału mikroprocesora. Dzięki
temu możliwe jest szybsze przesyłanie bloków danych. Przesyłanie odbywa się pod kontrolą
sterownika DMA, mikroprocesor w tym czasie nie ma dostępu do magistral, nie realizuje
więc swojego programu. Przed rozpoczęciem transmisji DMA sterownik musi zostać
zaprogramowany przez umieszczenie w jego rejestrach sterujących informacji dotyczących
kierunku transmisji, ilości przesyłanych słów i adresu obszaru danych. Po zakończeniu
przesyłu następuje powrót do realizowanego programu.

4.2.2. Pytania sprawdzające


Odpowiadając pytania, sprawdzisz, czy jesteś przygotowany do wykonania ćwiczeń.

1. Jaką rolę pełnią układy wejścia/wyjścia?
2. Jakie są rodzaje układów wejścia/wyjścia?
3. Jakie są metody adresowania?
4. Jakie są sposoby współpracy mikroprocesora z otoczeniem?
5. Na czym polega obsługa programowa?
6. O czym podczas obsługi przerwań decyduje priorytet, a o czym poziom?
7. Na czym polega obsługa z przerwaniami?
8. Na czym polega bezpośredni dostęp do pamięci?

4.2.3. Ćwiczenia

Ćwiczenie 1

Wybierz, które zdania są prawdziwe, a które fałszywe:

Zdanie: prawda

fałsz

Adresowanie jednolite pozwala na zaadresowanie większej przestrzeni
adresowej niż adresacja rozdzielona.

Przy zastosowaniu adresacji jednolitej te same rozkazy odnoszą się
do pamięci i układów wejścia/wyjścia.

Układ wejścia/wyjścia umożliwia dopasowanie czasowe między
szybszym mikroprocesorem, a wolniejszym urządzeniem

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

18

wejścia/wyjścia.
W przypadku jednoczesnego zgłoszenia się dwóch zgłoszeń przerwań
do obsługi zostanie przyjęte przerwanie o wyższym poziomie.

Obsługa programowa nie pozwala na ustalanie priorytetów przerwań.
Po zakończeniu obsługi przerwania program główny jest wykonywany
od rozkazu, w czasie którego nadeszło przerwanie.

Przerwanie może być przyjęte do obsługi pod warunkiem zakończenia
realizowanego cyklu rozkazowego.

Podczas bezpośredniego dostępu do pamięci dane są przesyłane
z mikroprocesora do pamięci danych.


Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) zapoznać się ze sposobami komunikacji mikroprocesora z otoczeniem,
2) dokładnie przeczytać zdania,
3) przeanalizować ich treść decydując, czy zdanie jest prawdziwe czy fałszywe,
4) zaprezentować wykonane ćwiczenie,
5) dokonać oceny poprawności wykonanego ćwiczenia.


Wyposażenie stanowiska pracy:

− treść zadania dla każdego ucznia,

− literatura z rozdziału 6.

Ćwiczenie 2

Przedstaw na wykresie kolejność obsługi przerwań w jednopoziomowym układzie

przerwań. Wszystkie przerwania są odblokowane, wszystkie mogą zostać przyjęte do obsługi.
Przerwanie INT0 ma najwyższy priorytet, a INT4 najniższy. Czas trwania każdego
podprogramu obsługi przerwania – 4 jednostki.

pr

io

ry

tet

INT0

INT1

INT2

INT3

INT4

pr. gł.

t

INT2 INT4,

INT1

INT0

INT3

Na tym samym wykresie innym kolorem narysuj kolejność obsługi przerwań

w wielopoziomowym układzie przerwań, przyjmując, że przerwanie INT0 ma poziom
najwyższy i dalej każde kolejne ma poziom niższy, INT4 ma poziom najniższy.

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

19

Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) w przypadku jednopoziomowego układu przerwań rozstrzygnąć, które ze zgłoszeń ma

w danej chwili najwyższy priorytet,

2) w przypadku wielopoziomowego układu przerwań dodatkowo zdecydować, czy możliwe

jest przejście do obsługi przerwania podczas trwania obsługi realizowanego
podprogramu,

3) narysować przebiegi kolejności obsługi przerwań,
4) zaprezentować wykonane ćwiczenie,
5) dokonać oceny poprawności i estetyki wykonanego ćwiczenia.


Wyposażenie stanowiska pracy:

− treść zadania dla każdego ucznia,

− literatura z rozdziału 6.


4.2.4. Sprawdzian postępów

Czy potrafisz:

Tak Nie

1) rozróżnić metody adresacji: jednolitą i rozdzieloną?

…

…

2) wyjaśnić jakie wady i zalety ma każda z metod?

…

…

3) scharakteryzować role układów wejścia/wyjścia?

…

…

4) rozróżnić rodzaje układów wejścia/wyjścia?

…

…

5) scharakteryzować sposoby komunikacji mikroprocesora z otoczeniem?

…

…

6) wyjaśnić, kiedy korzystne jest stosowanie każdej z tych metod?

…

…

7) wymienić warunki przyjęcia

przerwania?

…

…

8) opisać działania mikroprocesora po przyjęciu przerwania?

…

…

9) zdefiniować pojęcia poziom, priorytet, wektor przerwania?

…

…

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

20

4.3. Mikrokontrolery rodziny ‘51

4.3.1.Materiał nauczania

Mikrokomputerami jednoukładowymi, zwanymi również mikrokontrolerami

lub mikrosterownikami, nazywana jest pewna klasa mikroprocesorów charakteryzująca się
tym, że w jednym układzie scalonym zawarty jest mikroprocesor, pamięć danych, układy
we/wy umożliwiające bezpośrednie dołączenie urządzeń zewnętrznych, układy czasowo
licznikowe, układ przerwań i inne zasoby, w niektórych mikrokontrolerach jest wbudowana
pamięć programu.

Charaktrystyka rodziny mikrokontrolerów ’51:

− 8–bitowa magistrala danych,

− 16–bitowa magistrala adresowa,

− 8–bitowy arytmometr,

− 128 B (256B) wewnętrznej pamięci danych,

− dwa 16–bitowe układy czasowo–licznikowe,

− cztery 8–bitowe porty równoległe,

− układ transmisji szeregowej,

− układ przerwań,

− możliwość dołączenia zewnętrznej pamięci danych,

− możliwość dołączenia zewnętrznej pamięci danych,

Częstotliwość pracy mikroprocesorów zawiera się w granicach od 1,2 do 20 MHz.
Architektura podstawowego mikrokontrolera rodziny ’51:

Rys. 6. Schemat mikrokontrolera 8051 [7]

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

21

ALU – jednostka arytmetyczno–logiczna
PSW – rejestr statusowy

C AC

F0 RS1

RS0

OV

– P


znaczenie flag:
C – przeniesienie (z bitu 7)
AC – przeniesienie połówkowe (z bitu 3 na 4)
F0 – znacznik ogólnego przeznaczenia, ustawiany i kasowany programowo
RS1, RS0 – wybór bieżącego banku rejestrów roboczych
OV – znacznik nadmiaru
P – flaga parzystości

Rejestry:
A, ACC – rejestr akumulatora,
B– rejestr dodatkowy używany przy mnożeniu i dzieleniu,
DPTR – rejestr adresowy zewnętrznej pamięci,
PC– licznik programu,
SP– wskaźnik stosu,
P0–P3– porty równoległe
linie portu P0 i P2 mogą służyć do dołączenia pamięci zewnętrznych,
alternatywne funkcje portu P3 przedstawia tabela 1.

Tabela 1 Alternatywne funkcje portu P3

linia Funkcja
P3.0

RxD– we portu szeregowego

P3.1

TxD– wy portu szeregowego

P3.2

INT0– we przerwania zewnętrznego

P3.3

INT1– we przerwania zewnętrznego

P3.4

T0– we licznika 0

P3.5

T1– we licznika 1

P3.6 WR–

sygnał zapisu do zewnętrznej pamięci

P3.7 RD–

sygnał odczytu z zewnętrznej pamięci


Sygnały sterujące:

PSEN

− sygnał odczytu z zewnętrznej pamięci programu,

ALE

− sygnał zatrzaskujący w zewnętrznym rejestrze młodszą część adresu podczas
współpracy z zewnętrznymi pamięciami,

EA

− sygnał wyboru pamięci programu ( EA =0– odczyt z zewnętrznej pamięci
programu, EA =1 z wewnętrznej),

RST

− sygnał zerujący procesor , zerowany jest licznik PC (start programu od
komórki zerowej), nie jest zerowana pamięć RAM.


Pamięć wewnętrzna IRAM

Tabela 2 Przestrzeń adresowa pamięci IRAM

Adresy 48–127 (30H–

7FH)

Pamięć danych użytkownika

Adresy 32–47 (20H–2FH)

Pamięć adresowana bitowo (adresy 0–127 (0H–7FH))

Adresy 24–31 (18H–1FH)

Rejestry R0–R7 – bank 3 (RB3)

Adresy 16–23 (10H–17H)

Rejestry R0–R7 – bank 2 (RB2)

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

22

Adresy 8–15 (8H–0FH)

Rejestry R0–R7 – bank 1 (RB1)

Adresy 0–7 (0H–7H)

Rejestry R0–R7 – bank 0 (RB0)

Obszar od adresu 0 do 31 (0H–1FH) zajmują cztery banki rejestrów (RB0...RB3)

roboczych, po osiem rejestrów w banku. Rejestry te mają oznaczenia R0 do R7 i mogą być
wykorzystywane do przechowywania danych. Wyjątek stanowią rejestry R0 i R1 każdego
bloku, które mogą być dodatkowo wykorzystane do indeksowego adresowania wewnętrznej
i zewnętrznej pamięci danych. W danej chwili dostępny jest tylko bank wybierany bitami
RS1 i RS0 rejestru statusowego PSW. W obszar e pamięci o adresach 32–47(20H–2FH)
możliwe jest zaadresowanie pojedynczego bitu komórki pamięci. Bity te są dostępne pod
adresami 0–127 (0H–7FH). Obszar pamięci o adresach 48–127 (30H–7FH) nie posiada już
żadnych specyficznych własności i wykorzystywany jest jak zwykła pamięć o organizacji
bajtowej. Cała pamięć może być adresowana jak pamięć o bajtowej organizacji w sposób
bezpośredni lub rejestrowy pośredni używając rejestrów R0 i R1.

Rejestry specjalne SFR

:

Blok rejestrów specjalnych (SFR; ang. Special Function Registers) znajduje się

w niespójnym obszarze pamięci danych mikrokontrolera o adresach 128–240 (80H–0F0H).
Obszar rejestrów SFR mikrokontrolera '51 jest wykorzystywany dwojako – z jednej strony
umieszczone są w nim wszystkie (za wyjątkiem licznika rozkazów i czterech banków
rejestrów R0–R7) rejestry sterujące pracą mikrokontrolera lub wykorzystywane bezpośrednio
przy wykonywaniu programu; z drugiej zaś strony rejestry SFR stanowią rodzaj interfejsu
pomiędzy mikroprocesorem a układami peryferyjnymi umieszczonymi wewnątrz
mikrokontrolera. Wszystkie operacje sterowania wewnętrznymi układami peryferyjnymi oraz
przesyłania danych między nimi a CPU, odbywają się właśnie za pośrednictwem rejestrów
SFR. Dostęp do każdego z tych rejestrów możliwy jest wyłącznie w trybie adresowania
bezpośredniego. Nazwy rejestrów SFR są zazwyczaj nazwami predefiniowanymi,

więc najczęściej nie trzeba znać adresu danego rejestru – wystarczy pamiętać jego nazwę.

Tabela 3 Obszar SFR

Nazwa

Adres

Pełniona funkcja

P0

128(80H)

Port we/wy 0

SP 129(81H)

Wskaźnik stosu

DPL 130(82H)

Rejestr

indeksowy DPTR (mniej znaczący bajt)

DPH 131(83H)

Rejestr

indeksowy DPTR (bardziej znaczący bajt)

PCON 135(87H)

Rejestr

sterujący stanami uśpienia

TCON 136(88H)

Rejestr

sterujący układów czasowych 0 i 1

TMOD

137(89H)

Rejestr trybu pracy układów czasowych 0 i 1

TL0

138(8AH)

Rejestr danych układu czasowego 0 (mniej znaczący)

TL1

139(8BH)

Rejestr danych układu czasowego 1 (mniej znaczący)

TH0

140(8CH)

Rejestr danych układu czasowego 0 (bardziej znaczący)

TH1

141(8DH)

Rejestr danych układu czasowego 1 (bardziej znaczący)

P1

144(90H)

Port we/wy 1

SCON 152(98H)

Rejestr

sterujący układu transmisji szeregowej

SBUF

153(99H)

Rejestr danych układu transmisji szeregowej

P2

160(0A0H) Port we/wy 2

SP 129(81H)

Wskaźnik stosu

IE

168(0A8H) Rejestr maski przerwań

P3

176(0B0H) Port we/wy 3

IP

184(0B8H) Rejestr priorytetów przerwań

PSW 208(0D0H)

Słowo stanu procesora


background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

23

Pamięć zewnętrzna
Oprócz pamięci wewnętrznej danych możliwe jest dołączenie do mikrokontrolera

zewnętrznej pamięci danych o pojemności do 64kB. Dostęp do tego obszaru pamięci jest
tylko używając adresacji rejestrowej pośredniej, adres znajduje się w rejestrach DPTR, R0
lub R1. Jeżeli do adresacji użyto 16–bitowego rejestru DPTR, zawartość DPH jest
wpisywana do portu P2, a DPL do P0. Jeżeli do adresacji użyto R0 lub R1 modyfikowana jest
tylko zawartość P0.

Rys. 7. Dołączenie zewnętrznej pamięci danych i programu [2, s.45 ]

Przy odczycie lub zapisie danej do pamięci zewnętrznej po odczytaniu rozkazu w takcie

S1, w takcie S5 następuje wysłanie na wyjście portu P0 mniej znaczącego bajtu adresu, który
w drugiej fazie tego taktu jest zatrzaskiwany w rejestrze sygnałem ALE. Na wyjście portu P2
jest podawany starszy bajt adresu. W pierwszej fazie pierwszego taktu S1P1 drugiego cyklu
maszynowego wykonywanie operacji dostępu do XRAM, jeden z sygnałów

WR

lub RD

(w zależności od kierunku przesyłania danej) przechodzi w stan niski uaktywniając pamięć.
Następuje odczyt lub zapis, który kończy się w pierwszej fazie czwartego taktu S4P1.

Rys. 8. Sygnały sterujące i zegarowe przy dostępie do zewnętrznej pamięci danych [2, s.44 ]




background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

24

Pamięć programu
Obszar pamięci programu o maksymalnej objętości 64 kB może składać się z dwóch

części:
− pamięci wewnętrznej o pojemności 4kB lub 8kB,

− pamięci zewnętrznej.

Jeżeli mikrokontroler posiada wewnętrzną pamięć programu to zmieniając stan sygnału

EA można wybierać między pamięciami wewnętrzną ( EA =1 i adres mieszczący się

w wewnętrznej pamięci programu) i zewnętrzną ( EA =1 i adres przekraczający obszar
wewnętrznej pamięci programu lub EA =0). Sposób dołączenia pamięci zewnętrznej
programu został przedstawiony na rysunku 7.

Przy pobieraniu rozkazów i danych z zewnętrznej pamięci programu jest generowany

sygnał PSEN. Podczas pobierania rozkazu z pamięci zewnętrznej w takcie S5 przez port P0
wysyłany jest mniej znaczący bajt adresu. W drugiej fazie tego taktu (S5P2) sygnał ALE
zatrzaskuje ten bajt w rejestrze. Równocześnie na wyjście portu P2 jest wysyłany starszy bajt
adresu. W pierwszej fazie szóstego taktu (S6P1) sygnał PSEN zmieniając swój stan na niski
uaktywnia pamięć programu i zostaje wystawiony bajt rozkazu.

Rys. 9. Sygnały sterujące i zegarowe przy dostępie do zewnętrznej pamięci programu [2, s.43 ]


Adresowanie różnych typów pamięci
Ponieważ mikrokontroler nie posiada osobnych rozkazów do dostępu do urządzeń

wejścia/wyjścia, to w obszarze adresowym 64kB zewnętrznej pamięci danych mogą być
również umieszczane rejestry dołączanych do systemu urządzeń we/wy.

Ponadto adresy wewnętrznej pamięci danych RAM pokrywają się z adresami

zewnętrznej pamięci danych RAM i pamięci programu, zatem, aby rozróżnić typ adresowanej
pamięci, stosuje się odpowiednie rozkazy:
− MOV dla adresowania wewnętrznej pamięci RAM

− MOVX dla adresowania zewnętrznej pamięci RAM

− MOVC dla adresowania wewnętrznej i zewnętrznej pamięci programu (rozróżniane

stanem wyprowadzenia EA oraz zakresem adresów).

Stany z obniżonym poborem mocy
Mikrokontrolery rodziny 51 mają mechanizmy pozwalające wprowadzić układ w stan,

w którym nie jest wykonywany program, a pobór prądu zasilania jest ograniczony. W stanie
jałowym (Idle) zegar taktujący zostaje odłączony, procesor jest zatrzymany (nie są
wykonywane żadne rozkazy), normalnie pracują układ czasowo-licznikowy i port szeregowy
oraz system przerwań, jeżeli był wcześniej odblokowany. Zawartość wszystkich rejestrów
i pamięci wewnętrznej nie ulega zmianie. Pobór prądu zasilania jest 8 razy mniejszy niż
w czasie normalnej pracy. Wyjście z tego stanu jest możliwe przez zerowanie systemu
lub przerwanie zewnętrzne, jeżeli było wcześniej odblokowane. W stanie obniżonego poboru
mocy Power Down następuje odłączenie zasilania od wszystkich bloków funkcjonalnych

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

25

z wyjątkiem pamięci wewnętrznej danych. Pobór prądu zasilania jest około 500 razy mniejszy
niż w czasie normalnej pracy. Wyjście z tego trybu jest możliwe tylko na skutek wyzerowania
mikrokontrolera.

4.3.2. Pytania sprawdzające


Odpowiadając na pytania, sprawdzisz, czy jesteś przygotowany do wykonania ćwiczenia.

1. Dlaczego mikroprocesory rodziny ’51 nazywamy mikrokontrolerami?
2. Jakie zasoby wewnętrzne posiadają mikrokontrolery rodziny ’51?
3. Jakie typy pamięci występują w mikrokontrolerze 8051. Do czego stosowany jest każdy

z typów?

4. Czy w mikrokontrolerze 8051 jest zastosowana jednolita, czy rozdzielona przestrzeń

adresowa?

5. Jakie obszary wyróżniamy w obrębie pamięci IRAM? W jaki sposób można adresować

każdy z tych obszarów?

6. Ile portów równoległych posiada mikrokontroler 8051? Jakie jest ich przeznaczenie?
7. Jakie znaczenie mają poszczególne bity rejestru PSW?
8. Jaką rolę pełni każdy z sygnałów: PSEN, ALE, EA , RST?
9. Które rozkazy zmieniają znaczniki w rejestrze PSW?
10. Gdzie znajduje się wynik operacji arytmetycznej?

4.3.3. Ćwiczenia

Ćwiczenie 1

Dobierz tryby adresacji do wybranych obszarów pamięci.
IRAM [0–7]

rejestrowa

IRAM [0–127]

rejestrowa pośrednia

XRAM [0–65535]

bezpośrednia

SFR


Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) przeanalizować podane informacje,
2) dopasować metody adresacji do odpowiednich obszarów pamięci, ten sam tryb adresacji

może się odnosić do więcej niż jednego obszaru,

3) zaprezentować wykonane ćwiczenie,
4) dokonać oceny poprawności wykonanego ćwiczenia.


Wyposażenie stanowiska pracy:

− treść zadania dla każdego ucznia,

− zeszyt przedmiotowy,

− literatura z rozdziału 6.



background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

26

Ćwiczenie 2


Wypełnij tabelę, wpisując, jakie będą wartości rejestrów A i B (szesnastkowo) oraz flag

po wykonaniu poleceń, jeżeli realizacja polecenia nie ma wpływu na zmianę wartości
wpisz „–„:
Program A

B

C

Z

załaduj do akumulatora liczbę 255
inkrementuj akumulator
prześlij zawartość akumulatora do rejestru B

wyzeruj flagę przeniesienia C
załaduj do akumulatora liczbę 7
przesuń zawartość akumulatora o 1 bit w prawo
prześlij zawartość akumulatora do rejestru B

załaduj do akumulatora liczbę 0Fh
prześlij zawartość akumulatora do rejestru B
wykonaj iloczyn logiczny zawartości akumulatora z liczbą
F0h


Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) przeanalizować każdy z zestawów poleceń,
2) obliczyć wartości, które zostaną umieszczone w rejestrach A i B po wykonaniu poleceń,
3) zastanowić się, które z poleceń mogą wpływać na zmiany flag C i Z, oraz ustalić jaką

będą mieć wartość,

4) zaprezentować wykonane ćwiczenie,
5) dokonać oceny poprawności wykonanego ćwiczenia.


Wyposażenie stanowiska pracy:

− treść zadania dla każdego ucznia,

− literatura z rozdziału 6.

4.3.4. Sprawdzian postępów


Czy potrafisz:

Tak Nie

1) omówić budowę mikrokontrolera 8051 na podstawie schematu

blokowego?

…

…

2) omówić zasoby wewnętrzne

mikrokontrolera?

…

…

3) wymienić wszystkie typy pamięci i omówić ich rolę?

…

…

4) omówić sposób dołączenia pamięci zewnętrznych danych

i programu do mikrokontrolera?

…

…

5) scharakteryzować wybrane rejestry mikrokontrolera?

…

…

6) podać znaczenie sygnałów sterujących w mikrokontrolerze?

…

…

7) omówić sposoby obniżania poboru mocy mikrokontrolera

i sposoby wychodzenia z tych stanów?

…

…

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

27

4.4. Programowanie mikrokontrolera w języku asemblera

4.4.1. Materiał nauczania

Lista rozkazów mikrokontrolerów rodziny ‘51
Oznaczenia:
R

r

− rejestry R0–R7,

direct

− adres w IRAM/ SFR,

R

i

− rejestry R0 lub R1 (używane w adresacji rejestrowej pośredniej),

Bit

− bity adresowalne w IRAM/ SFR,

data

− dana 8–bitowa,

data16

− dana 16–bitowa,

addr16

− adres w 64k,

addr11

− adres na stronie 2k,

Rel

− adres względny,

/bit

− negacja bitu.


Tabela 4 Operacje arytmetyczne i logiczne:

Tryb adresacji

Flagi

mnem
onik

rejestr. bezpośr. rej.

pośr. natychm.

C AC

OV

operacje arytmetyczne
Dodaj A

←A+

ADD A,R

r

A,dir A,@R

i

A,#data x x x

Dodaj A

←A+ +C

ADDC A,R

r

A,dir A,@R

i

A,#data x x x

Odejmij A

←A+ +C SUBB A,R

r

A,dir A,@R

i

A,#data x x x

Inkrementuj INC

A/R

r

/

DPTR

dir @R

i

Dekrementuj DEC

A/R

r

dir @R

i

Mnóż A*B

MUL AB– wynik w B‚A 0

x

Dziel

DIV AB– wynik: A– wynik, B– reszta

0

x

Poprawka dziesiętna DA

A

x

operacje logiczne

Iloczyn log. AND

ANL

A,R

r

dir,A

A,dir A,@R

i

A,#data
dir,#data

Suma log. OR

ORL

A,R

r

dir,A

A,dir A,@R

i

A,#data
dir,#data

Modulo 2 XOR

XRL

A,R

r

dir,A

A,dir A,@R

i

A,#data
dir,#data

Neguj

CPL

A

Zeruj

CLR

A

Obrót w prawo

RR

A

Obrót w lewo

RL

A

Obrót w prawo z C

RRC

A

x

Obrót w lewo z C

RLC

A

x

Zamień 4 bity

SWAP A


background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

28

Tabela 5 Operacje przesłań danych:

Kopiuj A

MOV A,R

r

A,dir A,@R

i

A,#data

Kopiuj R

r

MOV R

r

,A R

r

,dir

R

r

,#data

Kopiuj dir

MOV dir,A

dir,R

r

dir,dir dir,@R

i

dir,#data

Kopiuj @R

i

MOV @R

i

,A @R

i

,dir

@R

i

,#data

Kopiuj DPTR

MOV

DPTR,#data16

Kopiuj z pamięci
programu

MOVC A,@A+DPTR

A,@A+DPTR

Kopiuj z/do zewn.
pam. danych

MOVX A,@R

i

A,@DPTR

@R

i

,A @DPTR,A

Zamień

XCH

A,R

r

A,dir A,@R

i

Zamień mł. 4 bity

XCHD

A,@R

i

Zapisz na stos

PUSH

dir SP=SP+1, (SP)

←dir

Odczytaj ze stosu

POP

dir dir

←(SP), SP=SP–1

Tabela 6 Operacje na bitach:

Zeruj CLR

C

bit

Ustaw SETB

C

bit

Neguj CPL

C

bit

Iloczyn logiczny

ANL

C,bit

C,/bit

Suma logiczna

ORL

C,bit

C,/bit

Kopiuj MOV

C,bit

bit,C

Tabela 7 Skoki

Wywołanie podprogramu

LCALL addr16 ACALL addr11

Powrót z podprogramu

RET

Powrót z podprogramu
obsługi przerwania

RETI

Skok

LJMP addr16 AJMP addr11 SJMP rel JMP @A+DPTR

Skok warunkowy

JC rel

JNC rel

JZ rel

JNZ rel

Skok warunkowy od bitu

JB bit,rel

JNB bit,rel

JBC bit,rel (po skoku bit=0)

CJNE A,dir,rel

CJNE A,#data,rel

Porównaj, skocz jeśli

CJNE R

r

,#data,rel CJNE

@R

i

,#data,rel

Zmniejsz, skocz jeśli

0 DJNZ

R

r

,rel DJNZ

dir,rel

Nic nie rób

NOP


Każdy mikrokontroler działa zgodnie z programem umieszczonym w pamięci programu.

Do napisania programu niezbędna jest znajomość języka niskiego poziomu – kodzie
asemblera.
W przypadku mikrokontrolerów rodziny 51 można zastosować środowisko programowe
m535 firmy Kail.


Etapy pisania i kompilowanie programu:

1. Przygotowanie algorytmu programu np. w postaci schematu blokowego.
2. Napisanie programu. Program należy napisać w edytorze tekstowym (np. notatniku)

i zapisać pod nazwą składającą się z maksymalnie 8 znaków (bez spacji)

z rozszerzeniem asm np. program.asm. Wielkość liter nie ma znaczenia zarówno
w nazwie jak i w kodzie programu.

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

29

3. Linia programu ma postać:

[etykieta:] mnemonik rozkazu [operand],[operand] [;komentarz]

Liczby przedstawiamy dziesiętnie, binarnie – wówczas liczbę należy zakończyć literą
b lub szesnastkowo – liczbę należy zakończyć literą h. Argument szesnastkowy
rozpoczynający się od litery musi być poprzedzony cyfrą 0.

4. Program powinien rozpoczynać się od dyrektywy org (np. org 0– kompilator umieści

program od adresu 0), a kończyć dyrektywą end (do tego miejsca program będzie
kompilowany).

5. Po napisaniu programu należy go skompilować a51.exe nazwa_programu.asm.

Asembler sprawdza, czy zbiór źródłowy nie ma błędów w składni, za nazwy stałych
podstawia odpowiednie wartości liczbowe, za etykiety – adresy. Następnie generuje dwa
zbiory wynikowe:

nazwa_programu.lst

, w którym zbiór źródłowy jest rozszerzony o adresy

i kody rozkazów, numerację wierszy, tablicę symboli wraz z wartością
lub adresem pod którym występują, wskazane są również ewentualne błędy,

nazwa_programu.obj

, który jest plikiem wejściowym dla linkera lub konwertera

INTEL–HEX.

6. Jeżeli program wynikowy ma być w standardzie INTEL–HEX należy wywołać

konwerter ohs51.exe nazwa_programu.obj, wynikiem będzie plik nazwa_programu.hex.

7. Program może być podzielony na segmenty związane z obszarem pamięci, w którym

mają być umieszczone. Segmenty mogą być absolutne (czyli takie, których adresy są
ustalone przez programistę) lub relokowalne (czyli takie, których adresy są ustalane na
etapie łączenia modułow programu)

8. Jeżeli program wynikowy ma być połączony z wielu modułów należy zastosować linker,

który połączy relokowalne segmenty w jeden segment, ustali adresy absolutne
i utworzy zbiór wyjściowy zawierający cały program. Wywołanie linkera odbywa się
przez podanie jego nazwy (l51.exe), listy nazw zbiorów wejściowych w kolejności,
w jakiej mają być łączone moduły i opcjonalnie nazwy zbioru wyjściowego. Jeżeli nie
podamy nazwy zbioru wyjściowego to zostanie nadana nazwa pierwszego wejściowego:

l51.exe zb1.obj, zb2,obj,….[to zb_wy.abs]

9.

Dyrektywy asemblera:

1. Dyrektywy definiujące symbole

Dyrektywa SEGMENT

Dyrektywą tą można zadeklarować nazwy symboliczne segmentów relokowalnych i ich

typ (tzn. w obszarze jakiego typu pamięci ma być umieszczony) oraz ewentualnie sposób
relokacji. Nazwa segmentu jest nazwą symboliczną – oznacza adres, od którego rozpoczyna
się ten segment

Postać ogólna dyrektywy:
nazwa _ segmentu SEGMENT typ _ segmentu [ sposób _ relokacji ]
np: PROG_1 SEGMENT CODE

Typ segmentu określa obszar pamięci, gdzie deklarowany segment ma być

umieszczony:

CODE

– obszar pamięci programu ( PGM ),

XDATA

– obszar zewnętrznej pamięci danych,

DATA

– obszar wewnętrznej pamięci danych adresowany bezpośrednio (adres 0

÷127),

IDATA

– obszar wewnętrznej pamięci danych adresowanych pośrednio (adres 0

÷127),

BIT

– obszar wewnętrznej pamięci danych adresowany bitowo (32 47– adresy bitów 0 127).

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

30

Sposób relokacji – dotyczy sposobu zapisu pliku po linkowaniu w pamięci CODE. Bez

podania sposobu relokacji pliki są umieszczane w pamięci kolejno, bez odstępów, w pamięci
CODE. Podając sposób relokacji można wprowadzać odstępy. Możliwości relokacji:
INPAGE

– na stronie

INBLOCK

– w bloku,

BITADDRESSABLE

– w obszarze pamięci adresowanej bitowo,

UNIT

– bez odstępów – domyślnie, jeżeli nie podany inny sposób relokacji.

Dyrektywa EQU

Dyrektywa ta pozwala na nadawanie symbolowi (nazwie symbolicznej) wartości.

Definiuje ona tzw. stałe kompilacji tzn. wartość danego symbolu nadana dyrektywą EQU
nie może zostać zmieniona ani taką samą dyrektywą, ani żadną inną w całym programie.
Ogólna postać: nazwa_symbolu EQU wartość_symbolu
Nadawanie symbolowi wartości może być dokonywane jednym z trzech sposobów:

podanie konkretnej wartości np:

LIMIT EQU 1200
R8 EQU 08

podanie symbolu wcześniej znanego np:

KONIEC EQU LIMIT+5
WARTOSC EQU KONIEC+’A’

podanie symbolu znanego asemblerowi (np. symbolicznej nazwy rejestru z SFR) np:

SERIAL EQU SBUF
LICZNIK EQU R5
BUSY EQU ACC.7

Dyrektywa SET
Dyrektywa ta nadaje wartości symbolowi (nazwie symbolicznej). Pozwala ona

na zdefiniowanie tzw. zmiennych kompilacji tzn. takich symboli, których wartości można
zmieniać w programie inną dyrektywą SET powołując się na nazwę (symbolu).
Ogólna postać: nazwa_ symbolu SET wartość_symbolu
Nadanie wartości symbolowi jest możliwe na 3 różne sposoby:

przez podanie konkretnej wartości np:

VALUE SET 100

przez podanie symbolu wcześniej znanego np:

LIMIT EQU 1200
VALUE SET LIMIT–200

przez podanie symbolu znanego asemblerowi np:

COUNTER SET R1

Dyrektywa SET odnosząca się do jednej nazwy symbolicznej może wystąpić

wielokrotnie w danym programie. Dyrektywy SET i EQU definiują nazwy symboliczne
w tym obszarze pamięci, na który jest nastawiony wskaźnik w momencie ich występowania
w programie.


Dyrektywa BIT
Dyrektywa BIT pozwala na zdefiniowanie nazwy symbolicznej bitu i podanie jego adresu

tzn. przyporządkowuje nazwie bitu adres z przestrzeni pamięci danych adresowanej bitowo.

Postać ogólna: Nazwa_bitu BIT adres_bitu
Adres bitu może być podany w następujący sposób:

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

31

jako adres absolutny bitu, przy czym może on być podany jako adres kolejnego bitu
w przestrzeni adresowej lub jako numer bitu w komórce pamięci adresowanej bitowo.
Komórka ta musi leżeć w obszarze wewnętrznej pamięci danych adresowanym bitowo tzn.
w obszarze 32

÷47 (20

H

÷2F

H

) np.:

X_OFF BIT 24H.2

jako adres w postaci symbolicznej zdefiniowany wcześniej poprzez symbol
(tzn. nazwę symboliczną bitu ) np.:.

ALARM BIT X_OFF+1

jako adres w postaci symbolicznej poprzez symbol znany asemblerowi np.:

KLAWISZ BIT P1.0

ZNACZNIK BIT C
BSY BIT ACC.7

Dyrektywy DATA ( IDATA, XDATA, CODE ).
Są to dyrektywy definiujące wartość symbolu (nazwy symbolicznej) w obszarach

pamięci danych i programu:

DATA

– wewnętrzna pamięć danych,

IDATA

– wewnętrzna pamięć danych,

XDATA

– zewnętrzna pamięć danych,

CODE

– pamięć programu.

Postać ogólna: Nazwa symbolu DATA wartość
Wartość może być podana jako :

wartość bezwzględna np:

RESULT DATA 40H

symbol (nazwa symboliczna) zdefiniowana poprzednio np:

WYNIK DATA RESULT+1

symbol znany asemblerowi (z zasobów programowych) np:

REJ_SZER DATA SBUF

Analogicznie dla pozostałych obszarów pamięci np.:

BUFFER IDATA 60H
TIME XDATA 100H
RESTART CODE 00H
INT_VEC_1 CODE RESTART+0BH

Dyrektywy DATA, IDATA, XDATA, CODE pozwalają na nadanie symbolowi wartości

oraz atrybutu umieszczenia go w odpowiedniej przestrzeni adresowej (tzn. w odpowiednim
typie pamięci).


Dyrektywy rezerwacji i inicjacji pamięci (w aktywnym segmencie).
Dyrektywa DS

– define storage, dyrektywa ta pozwala na rezerwację określonej ilości

bajtów pamięci

Ogólna postać: [ etykieta: ] DS ilość_bajtów
np: GAP: DS 20
DS 5
Dyrektywa DB

– define bajt

Dyrektywa DB inicjuje (bajtowo) poszczególne komórki pamięci tzn. pozwala zapisać

w nich liczby lub znaki.

Ogólna postać: [ etykieta ] DB wartość [, wartość1, ... , ] np.:

LAB: DB ‘WCIŚNIJ DOWOLNY KLAWISZ’,0

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

32

REG: DB 0, 1, 8, ‘A’, ‘0’, ‘; ‘

Dyrektywa DW – define word.
Definicja pozwala inicjować 2 kolejne komórki pamięci np.:

TAB: DW 5AF3H

LICZBY: DW 1, 2, 3 – zapis każdej liczby w pamięci na 2 bajtach będzie miał

postać 0001H, 0002H itd.

Dyrektywa ta często stosowana jest do definiowania adresów programów.
Dyrektywa DBIT

pozwalająca na określenie wartości bitu.

Postać ogólna: [ etykieta: ] DBIT wartość
Wartość bitu można określić 3 sposobami, a mianowicie:

wartość konkretna ( domyślnie tylko 0 lub 1 ) np:

KOD: DBIT 0, 1, 1, 0,

poprzez nazwę symboliczną wcześniej zdefiniowaną np:

PAL EQU 1b
TEN_BIT DBIT PAL
DBIT NOT ( PAL )

nazwę znaną asemblerowi np:

INNY_BIT DBIT P0.0

Dyrektywy udostępniające nazwy
Dyrektywy udostępniające nazwy to: PUBLIC, EXTERN, NAME . wykorzystywane

one są w programach wielomodułowych.

Dyrektywa PUBLIC

(upubliczniona)

Służy do przekazania nazwy symbolicznej do innego modułu, aby nazwa ta była

widoczna na zewnątrz i można było wykorzystać jej wartość w innym module.

Postać ogólna: PUBLIC symbol [, symbol ] np :

PUBLIC PRINT_STR

Dyrektywa EXTERN
Dyrektywa ma zastosowanie, gdy używamy w pliku symboli zdefiniowanych w innych

plikach (upublicznionych dyrektywą PUBLIC). Używając symbolu z zewnątrz należy
zapewnić tzw. zgodność atrybutów to znaczy, że zapis danego symbolu jest w tym samym
obszarze pamięci (taki sam typ), w którym będzie szukana.

Postać ogólna: EKSTERN Typ_segmentu ( lista_symbol ) np:

EKSTERN CODE (A2B, B2A )
EKSTERN DATA ( FLAGI )

Dyrektywa NAME
Dyrektywa NAME służy do deklaracji nazwy modułu.
Postać ogólna: NAME nazwa_obiektu
Nazwa obiektu może posiadać do 40 znaków.

Dyrektywy sterujące.
Dyrektywami sterującymi są: END, USING, ORG, RSEG, CSEG, DSEG, XSEG,

ISEG

, BESEG.


Dyrektywa END
Dyrektywa ta określa koniec modułu programu. Musi nią być zakończony moduł. Po

identyfikacji dyrektywy END w pliku źródłowym kompilator kończy tłumaczenie programu.


background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

33

Dyrektywa USING
Służy ona do wyboru bieżącego rejestru. Adresy tych rejestrów są określone przez nazwy

symboliczne AR0

÷ AR7. Dzięki temu można jednocześnie wykorzystywać 2 banki rejestru

(jeden wynikający z USING a drugi z PSW (RS1,RS0).

Dyrektywa ORG
Nadaje ona wartość wskaźnika w bieżąco rozpatrywanym segmencie.
Postać ogólna: ORG argument
Argument ma tu znaczenie adresu pamięci (bajtowo) np.:
ORG 100H
moduł zostanie skompilowany i umieszczony w pamięci programu od adresu 100H.

Dyrektywa RSEG
Kompilator umieści wszystkie segmenty relokowalne o danym typie w tym samym typie

pamięci.

Postać ogólna: RSEG nazwa_symbol_segment_relokowalny np.:
DATA_SEG SEGMENT DATA – określenie segmentu w pamięci DATA
RSEG DATA_SEG
CODE_SEG SEGMENT CODE – określenie segmentu w pamięci DATA
RSEG CODE_SEG

Dyrektywy ustalające absolutny segment
CSEG

– segment pamięci programu jako bieżący,

DSEG

– segment pamięci danych adresowanych bajtów,

XSEG

– segment pamięci zewnętrznej danych,

ISEG

– segment pamięci danych adresowanych pośrednio,

BSEG

– segment pamięci danych dostępnych bitowo.


Makrodefinicje
Makro to zestaw instrukcji asemblera. Ciąg instrukcji występujący po linii zawierającej

dyrektywę MACRO, aż do najbliższej dyrektywy ENDM, tworzy makro o określonej nazwie.
Po zdefiniowaniu cały taki zestaw może być włączony w kod źródłowy programu poprzez
wywołanie makra. W treści makr mogą występować bez ograniczeń wywołania innych makr,
ale nie może wystąpić definicja innego makra. Makro jest wywoływane poprzez umieszczenie
jego nazwy w polu rozkazu danej linii programu. Przy wywołaniu podawane są parametry
aktualnego makra. W czasie wstawiania makra w kod programu asembler zastępuje wszystkie
parametry formalne parametrami aktualnymi.

Postać ogólna: Nazwa_makro MACRO [ parametry]
Przykład:
CLEAR MACRO G1, G2 – makrodefinicja – zapis pod adres G1 wartości G2
MOV R0, # G1
MOV A, # G2
MOV @ R0, A

tzw. ciało makrodefinicji

ENDM

Wywołanie:
CLEAR 20H,0
CLEAR 5,’A’

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

34

Instrukcje sterujące języka asembler 51
Są to instrukcje umieszczone w pliku źródłowym programu, służące do określenia

dodatkowych warunków tłumaczenia (kompilacji) programu. Instrukcje te są poprzedzone
znakiem $.

$ INCLUDE

– pozwala na włączenie do tłumaczonego pliku innego pliku źródłowego

np:

$ INCLUDE ( REG.535.INC )
$ DEBUG / NODEBUG

($DB/ NDB)– dodawanie do pliku objaśnień wszystkich nazw

symbolicznych (lokalnych i publicznych)

$ ERRORPRINT/NOERRORPRINT

($EP, $NEP) wskazanie nazwy pliku, w którym

mają być umieszczane błędy i opisy błędów np:

$ EP ( BLEDY.ERR )

4.4.2. Pytania sprawdzające


Odpowiadając na pytania, sprawdzisz, czy jesteś przygotowany do wykonania ćwiczeń.

1. W jaki sposób zmieniają się zawartości rejestrów, komórek pamięci i znaczniki na skutek

wykonania poszczególnych rozkazów (przeanalizuj na kilku przykładach)?

2. Jaki będzie wynik działania analizowanego fragmentu programu?
3. Jakie są zasady pisania programu w języku asemblera?
4. W jaki sposób skompilować program i poprawić ewentualne błędy?
5. W jaki sposób uruchomić program używając zestawu uruchomieniowego korzystając

z pracy krokowej, ciągłej i pułapek?

6. Jak wykorzystywać w programach istniejące podprogramy?
7. Do czego służą dyrektywy asemblera, na przykład ORG, DB, END, EQU, SET?

4.3.3. Ćwiczenia

Ćwiczenie 1

Napisz i uruchom programy przemieszczania tablic pomiędzy różnymi typami pamięci:

− W pamięci IRAM od adresu 20h znajduje się tablica 30 danych. Napisz i uruchom

program, który przepisze tablicę do pamięci XRAM od adresu 0.

− W pamięci programu znajduje się tablica zakończona znacznikiem końca – liczbą FFH.

Napisz i uruchom program, który przepisze tablicę do pamięci

IRAM od adresu 20H.

− Napisz i uruchom program, który przepisze z tablicy w pamięci XRAM od adresu 0 do

IRAM od adresu 20.

Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) opracować algorytm każdego programu i przedstawić go w postaci schematu blokowego,
2) napisać programy w języku asemblera,
3) skompilować programy, poprawić ewentualne błędy,
4) uruchomić programy używając zestawu uruchomieniowego,
5) sprawdzić poprawność działania programów,
6) zaprezentować wykonane ćwiczenie,
7) dokonać oceny poprawności wykonanego ćwiczenia.


background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

35

Wyposażenie stanowiska pracy:

− komputer PC,

− oprogramowanie umożliwiające kompilowanie i debbugowanie programu,

− zestaw uruchomieniowy z oprogramowaniem,

− literatura z rozdziału 6.

Ćwiczenie 2

W pamięci IRAM znajdują się dwie tablice danych: TAB1 od adresu 20h i TAB2 od

adresu 30h. Obie tablice zawierają po 10 danych jednobajtowych liczb dziesiętnych. Napisz
program, który obliczy iloczyny par liczb pobranych z obu tablic, a wyniki w postaci
dwubajtowych liczb dziesiętnych zapisze do pamięci XRAM od adresu 0. Wyniki zapisać w
kolejności: starszy bajt – młodszy bajt.

Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) opracować algorytm programu i przedstawić go w postaci schematu blokowego,
2) w celu konwersji liczb z postaci dziesiętnej na szesnastkową i konwersji wyniku

z szesnastkowego na dziesiętny wykorzystać gotowe programy konwersji lub napisać
własne podprogramy,

3) napisać program w języku asemblera,
4) skompilować program, poprawić ewentualne błędy,
5) uruchomić program używając zestawu uruchomieniowego,
6) sprawdzić poprawność działania programu,
7) zaprezentować wykonane ćwiczenie,
8) dokonać oceny poprawności wykonanego ćwiczenia.

Wyposażenie stanowiska pracy:

− komputer PC,

− oprogramowanie umożliwiające kompilowanie i debbugowanie programu,

− zestaw uruchomieniowy z oprogramowaniem,

− literatura z rozdziału 6.

Ćwiczenie 3

W parach rejestrów R4–R5 i R6–R7 znajdują się liczby dwubajtowe. Napisz program,

który, w zależności od zawartości rejestru R4, wykona odpowiednie działanie na liczbach
dwubajtowych i wynik działania umieści w pamięci XRAM od adresu 0.

Działania:
R4=0 – dodawanie,
R4=1 – odejmowanie,
R4=2 – mnożenie,
R4=3 – dzielenie (część całkowita i reszta z dzielenia).
* wykonaj zadanie dla liczb w zapisie znak– moduł (pierwszy bajt– bajt znaku

0– dodatni, 1– ujemny, bajty drugi i trzeci– wartość bezwzględna liczby), wyniki zapisz
w postaci liczb pięciobajtowych (1 bajt–znak, cztery następne– wartość bezwzględna liczby).

Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) opracować algorytm programu i przedstawić go w postaci schematu blokowego,
2) napisać program w języku asemblera,

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

36

3) skompilować program, poprawić ewentualne błędy,
4) uruchomić program używając zestawu uruchomieniowego,
5) sprawdzić poprawność działania programu,
6) zaprezentować wykonane ćwiczenie,
7) dokonać oceny poprawności wykonanego ćwiczenia.


Wyposażenie stanowiska pracy:

− komputer PC,

− oprogramowanie umożliwiające kompilowanie i debbugowanie programu,

− zestaw uruchomieniowy z oprogramowaniem,

− literatura z rozdziału 6.

Ćwiczenie 4

Przy pomocy dyrektyw asemblera zadeklaruj 16 bajtów w pamięci IRAM jako obszar

stosu, a następnie ustal wskaźnik stosu i wypróbuj działanie w programie zawierającym
wywołanie podprogramu i instrukcje PUSH i POP.


Sposób wykonania ćwiczenia

Aby wykonać ćwiczenie powinieneś:

1) zadeklarować stos jako segment w pamięci IRAM,
2) określić jego rozmiar – zarezerwować 16 bajtów,
3) ustalić wskaźnik stosu rozkazem MOV SP,#…. pamiętając, że przed złożeniem danej

na stos wskaźnik jest inkrementowany,

4) napisać prosty program zawierający co najmniej jedno wywołanie podprogramu i parę

instrukcji PUSH i POP,

5) skompilować program, poprawić ewentualne błędy,
6) uruchomić program używając zestawu uruchomieniowego,
7) sprawdzić poprawność działania programu,
8) zaprezentować wykonane ćwiczenie,
9) dokonać oceny poprawności wykonanego ćwiczenia.

4.3.4. Sprawdzian postępów


Czy potrafisz:

Tak Nie

1) omówić działanie poszczególnych rozkazów z listy rozkazów?

…

…

2) dobrać odpowiednie rozkazy do zaplanowanego działania?

…

…

3) napisać program w języku

asemblera?

…

…

4) skompilować program i poprawić błędy?

…

…

5) uruchomić program używając zestawu uruchomieniowego,

poprawić jego działanie?

…

…

6) stosować dyrektywy asemblera w pisanych programach?

…

…

7) używać podprogramów, definiować makrodefinicje?

…

…

8) stosować linker do łączenia segmentów programu?

…

…

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

37

5. SPRAWDZIAN OSIĄGNIĘĆ

INSTRUKCJA DLA UCZNIA

1. Przeczytaj uważnie instrukcję.
2. Podpisz imieniem i nazwiskiem kartę odpowiedzi.
3. Zapoznaj się z zestawem zadań testowych.
4. Test zawiera 20 zadań o różnym stopniu trudności. Zadania: 1–14 są zadaniami

wielokrotnego wyboru i tylko jedna odpowiedź jest prawidłowa; zadania: 15–20
to zadania wymagające udzielenia krótkiej odpowiedzi.

5. Udzielaj odpowiedzi tylko na załączonej karcie odpowiedzi:

− w zadaniach wielokrotnego wyboru zaznacz prawidłową odpowiedź X (w przypadku

pomyłki należy błędną odpowiedź zaznaczyć kółkiem, a następnie ponownie

zakreślić odpowiedź prawidłową),

− w zadaniach do uzupełnienia wpisz rozwiązania.

6. Test składa się z dwóch części o różnym stopniu trudności: I część – poziom

podstawowy, II część – poziom ponadpodstawowy.

7. Pracuj samodzielnie, bo tylko wtedy będziesz miał satysfakcję z wykonanego zadania.
8. Kiedy udzielenie odpowiedzi będzie Ci sprawiało trudność, wtedy odłóż jego

rozwiązanie na później i wróć do niego, gdy zostanie Ci czas wolny.

Trudności mogą

przysporzyć Ci zadania: 15– 20, gdyż są one trudniejsze niż pozostałe. Przeznacz na ich
rozwiązanie więcej czasu.

9. Na rozwiązanie testu masz 90 min.

Powodzenia

ZESTAW ZADAŃ TESTOWYCH

I część

1. Wskaźnik stosu przechowuje:

a) adres powrotu z podprogramu,
b) adres ostatniej zajętej warstwy stosu,
c) daną ostatnio złożoną na stosie,
d) adres początku wywoływanego podprogramu.

2. Inna grupa rozkazów odnosi się do komunikacji z pamięcią, a inna do układów wejścia

wyjścia, gdy zastosowano adresację:
a) rozdzieloną,
b) jednolitą,
c) natychmiastową,
d) bezpośrednią.

3. Mikroprocesor z wielopoziomowym systemem przerwań realizuje podprogram obsługi

przerwania i w tym czasie zgłasza się inne przerwanie. Warunkiem jego przyjęcia
bezpośrednio po zakończeniu bieżącego cyklu rozkazowego jest:
a) wyższy priorytet od aktualnie obsługiwanego przerwania,
b) wyższy poziom od aktualnie obsługiwanego przerwania,
c) realizowany podprogram obsługi przerwania musi się zakończyć,
d) zgłoszenie zawsze zostanie przyjęte do obsługi.

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

38

4. Argument operacji arytmetycznej został pobrany z pamięci programu. Jakiego trybu

adresacji użyto?
a) bezpośredniego,
b) natychmiastowego,
c) rejestrowego,
d) pośredniego.

5. Odczyt rozkazu z zewnętrznej pamięci programu jest możliwy, gdy:

a) ALE=1,
b) ALE=0,
c) EA =1,
d)

EA =0.

6. Odczyt zawartości rejestru roboczego nie jest możliwy używając adresacji:

a) natychmiastowej,
b) bezpośredniej,
c) rejestrowej,
d) rejestrowej pośredniej.

7. Mikrokontroler ma 4kB pamięci wewnętrznej programu i 32 kB pamięci zewnętrznej.

Rozkaz będzie pobrany z wewnętrznej pamięci programu jeżeli:
a) PC=1000H i EA =1,
b) PC=5000H i EA =1,
c) PC=1000H i EA =0,
d) PC=5000H i EA =0.

8. Jaka będzie zawartość licznika rozkazów po wykonaniu następujących rozkazów:

PC Rozkaz:
0000H MOV

A,#35H

0002H RRC

A

0003H JNC

10H

a) PC=0004H,
b) PC=0005H,
c) PC=0010H,
d) PC=0013H.

9. Jaka będzie szesnastkowa zawartość A i B po wykonaniu następujących rozkazów:

MOV

A,#100

MOV

B,#2

MUL

AB

a) A=64 B=2,
b) A=C8 B=0,
c) A=0 B=C8,
d) A=1 B=C8.

10. Jakie będą flagi C i Z po wykonaniu następujących rozkazów

MOV

A,#127

RL

A

INC

A

JZ

OMIN

INC

A

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

39

OMIN: MOV

R0,A

a) C=1 Z=1,
b) C=0 Z=1,
c) C=0 Z=0,
d) C=1 Z=0.

11. Który z rozkazów jest nieprawidłowy:

a) MOV R0,20,
b) MOV R0,#20,
c) MOV R0,R1,
d) MOV R0,A.

12. Jaka wartość zostanie zapamiętana na stosie wskutek wykonania rozkazu:

1000: LCALL 2000?

a) 1000,
b) 1003,
c) 2000,
d) 2003.

13. Dyrektywa R8 EQU 08 spowoduje:

a) wpisanie wartości 08 do rejestru R8,
b) zmianę nazwy rejestru R0 z pierwszego banku pamięci na rejestr R8,
c) wpisanie zawartości komórki 08 do rejestru R8,
d) nie spowoduje żadnego działania, ponieważ składnia dyrektywy jest nieprawidłowa.

14. Która z dyrektyw jest nieprawidłowa:

a) FLAGA DBIT ACC.0,
b) FLAGA DBIT 2,
c) FLAGA DBIT F0,
d) FLAGA DBIT 1.

II część

15. Schemat blokowy przedstawia fragment algorytmu. Zapisz go w postaci programu

w języku asemblera.

16. Napisz program, wysyłania zawartości tablicy DANE do tablicy w pamięci IRAM

od adresu 30H. Tablica DANE została określona następująco: DANE DB ‘TABLICA’


T

N

A=0

A=A-100

A=A+1

A=100

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

40

17. Przeanalizuj fragment programu i uzupełnij zdanie wartościami szesnastkowymi:

Po skompilowaniu programu nazwie symbolicznej DANA została nadana wartość …..H,

a SKOK ……..H Podczas wykonywania rozkazu NOP zawartość licznika rozkazów wynosi
………H, a akumulatora……..H.


DANA EQU 10
ORG 100H

MOV A,#100

SKOK: ADD A,#DANA

JNC SKOK

NOP

18. Poniżej znajduje się fragment pliku lst. Zmień ten fragment programu tak, aby usunąć

wskazany błąd kompilacji:

19. Napisz program mnożenia dwubajtowej liczby znajdującej się w rejestrach R6R7 przez

liczbę jednobajtową znajdującą się w rejestrze R5, wynik w rejestrach R2R3R4.

20. Napisz program wyzerowania 1000 komórek w pamięci XRAM począwszy od komórki

o adresie 0.

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

41

KARTA ODPOWIEDZI


Imię i nazwisko ……………………………………………………..


Pisanie i uruchamianie programów w asemblerze


Zakreśl poprawną odpowiedź lub wpisz rozwiązania.

Nr

zadania

Odpowiedź

Punkty

1.

a b c d

2.

a b c d

3.

a b c d

4.

a b c d

5.

a b c d

6.

a b c d

7.

a b c d

8.

a b c d

9.

a b c d

10.

a b c d

11.

a b c d

12.

a b c d

13.

a b c d

14.

a b c d

15.






16.





background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

42

17.





18.





19.





20.





Razem:

background image

Projekt współfinansowany ze środków Europejskiego Funduszu Społecznego”

43

6. LITERATURA

1. Dyrcz K., Kowalski C. T., Zarczyński Z.: Podstawy techniki mikroprocesorowej, Oficyna

Wydawnicza Politechniki Wrocławskiej, 1999.

2. Janiczek J., Stępień A.: Mikrokontroler 80(C)51/52, Wydawnictwo Elektronicznych

Zakładów Naukowych, Wrocław 1995.

3. Janiczek J., Stępień A.: Laboratorium systemów mikroprocesorowych cz. I i II,

Wydawnictwo Elektronicznych Zakładów Naukowych, Wrocław 1995.

4. Lipowski J., Małysiak H., Pochopień B., Podsiadło P., Wróbel E.: Modułowe systemy

mikrokomputerowe, Wydawnictwa Naukowo– Techniczne, Warszawa 1984.

5. Rydzewski A.: Mikrokomputery jednoukładowe rodziny MCS–51,Wydawnictwa

Naukowo– Techniczne, Warszawa 1992.

6. Starecki T.: Mikrokontrolery 8051 w praktyce, Wydawnictwo BTC, Warszawa 2000
7. http://zsk.tech.us.edu.pl.


Wyszukiwarka

Podobne podstrony:
21.1 Tablice - wprowadzenie, Programowanie, Klasa II
Programowanie w asemblerze
Blokowanie użytkownikom możliwości uruchamiania programów za pomocą atrybutów NTFS
Pisanie i stosowanie programow wsadowych
Groźna luka w Windows 7 pozwala uruchamiać programy na zablokowanym ekranie
1 Interfejs systemu Windows oraz sposoby uruchamiania programów
Programowanie w asemblerze
Mini kurs pisania programów TSR w asemblerze
Asembler Kurs Programowania Dla Srednio Zaawansowanych S Kruk www !OSIOLEK!com
Nowy Dokument programu Microsoft Word (21)
Programowanie w języku asemblera
Asembler wykład 16-10-2000, Zaczynamy (pracę) z programem Turbo Assembler, Rozdział 1
Asembler programy1
Asembler Sztuka programowania Wydanie II asesz2
21-25, pliki, Korzystanie z plików i rekordów w programach
21-25, tablice, Potrafisz już przechowywać w programie liczby całkowite, rzeczywiste, znaki i napisy
PROGRAM ZESPOŁU WYRÓWNAWCZEGO Z JĘZYKA POLSKIEGO DLA UCZNIÓW MAJĄCYCH TRUDNOŚCI W CZYTANIU I PISANI
Asembler programy4

więcej podobnych podstron