LABORATORIUM PODSTAW SYSTEMÓW MIKROPROCESOROWYCH
Imię i Nazwisko: Piotr Jurek & Tadeusz Klukowski |
Grupa: ED 5.1 |
||||
Data wyk. ćwicz. 5.10.98 12.10.98 |
Numer ćwiczenia 1 i 2 |
Temat ćwiczenia: Linie wejść i wyjść mikrokontrolera. Porty mikrokontrolera. |
Ocena: |
1.W ćwiczeniu nr1 mieliśmy za zadanie zapoznać się ze sposobami sterowania urządzeniami podłączonymi bezpośrednio do portów mikrokontrolera.
W zadaniu nr 1 tego ćwiczenia zapoznaliśmy się z wprowadzeniem programu przy użyciu komputera, poznaniu jego podstawowych komend i obserwowaliśmy zmiany jakie nastąpiły w listingu programu po jego asemblacji.
Wykonanie zadania:
Po asemblacji programu listing został poszerzony o następujące pozycje:
numerację kolejnych linii
adresy rozkazów
kody rozkazów zapisane szesnastkowo
Zadaniem programu było zerowanie linii 7 w porcie P1 ,co powodowało zapalenie diody testowej.
Schemat algorytmu programu:
Celem zadania nr2 było wprowadzenie programu przy użyciu klawiatury systemu DSM-51.
Najważniejsze różnice ,które pojawiły się podczas tworzenia programu źródłowego w wewnętrznym edytorze DSM−51 to:
brak możliwości wpisania komentarzy
automatyczne umieszczanie programu pod adresem 100H
możliwość użycia jedynie etykiet o nazwach:L00...L3F
W zadaniu nr3 uruchamialiśmy program w trybie krokowym przy użyciu komputera.
W trybie krokowym mogliśmy obserwować działanie programu, z jednoczesnym śledzeniem zawartości pamięci i rejestrów mikrokontrolera.
Zastosowanie symbolu LED, który jest przyporządkowany dla wartości P1.7 ( dzięki dyrektywie EQU) polepszyło przejrzystość programu.
Schemat algorytmu programu w zadaniu nr3:
Wykorzystując podprogram DELAY_100MS można zastosować opóźnienie od 100ms do 25,5s w przypadku, gdy akumulator zawiera wartości 1 oraz 25,6s, gdy akumulator zawiera wartość 0. Dzieje się tak ponieważ akumulator jest rejestrem 8 bitowym i może zawierać wartości od 0 do 255.
Zadanie nr4 polegało na modyfikacji i analizie przykładowego programu. Działanie programu opierało się na jednoczesnym mruganiu diody i włączaniu brzęczyka. Celem rozkazu CPL wykorzystanego w programie była negacja wartość bitu. W przeciwieństwie do rozkazów CLR i SETB, gdzie z góry znany jest wynik ich działania wynik działania rozkazu CPL zależy od stanu danego bitu przed wykonaniem rozkazu. Wartość tego bitu jest negowana, tzn. 0→1, 1→0.
Schemat algorytmu wykorzystanego w zadaniu programu:
Poniżej przedstawiony został listing programu zmodyfikowanego na przykładzie zadania nr4. Jego działanie sprowadza się do tego, że świecenie diody TEST odbywa się na przemian z sygnałem z BUZZERA i jej stan trwa dwukrotnie dłużej niż włączenie brzęczyka.
LED EQU P1.7 ;Dioda TEST podłączona do P1.7
BUZZER EQU P1.5 ;Brzęczyk podłączony doP1.5
LJMP START
ORG 100H
START:
CLR BUZZER ;Włącz brzęczyk
LOOP: ;Pętla sterowań diody i brzęczyka
CPL LED ;Zapal diodę
CPL BUZZER ;Wyłącz brzęczyk
MOV A,#20 ;Czekaj czas 20∗100ms
LCALL DELAY_100MS ;Program z EPROMu
CPL LED ;Zgaś diodę
CPL BUZZER ;Włącz brzęczyk
MOV A,#10 ;Czekaj czas 10∗100ms
LCALL DELAY_100MS ;Program z EPROMu
LJMP LOOP ;Powtórz
Schemat algorytmu programu:
2.Celem ćwiczenia nr2 było zapoznanie się ze sposobami sterowania portami mikrokontrolera 8051.
W zadaniu nr1 tego ćwiczenia wpisywaliśmy dane do portu. W programie przy wpisywaniu danych korzystaliśmy z komendy MOV, która ładowała daną do portu P1 ustawiając poszczególne linie portu w stan 1 lub 0.
Podczas obserwacji pracy krokowej naszego programu dostępna była jednocześnie zawartość pamięci i rejestrów mikrokontrolera. Obserwując rejestry w pracy krokowej mogliśmy śledzić jak zmieniają się wartości bitów portów mikroprocesora i zawartość akumulatora. W zależności od zmiany konkretnej linii portu mogliśmy określić, którymi urządzeniami steruje dany port i dana linia w tym porcie.
W zadaniu nr2 zajęliśmy się zerowaniem i ustawianiem linii portów przy pomocy logicznych operacji na parach bitów.
W tym przykładzie użyliśmy rozkazu ANL, który jest wykonywany zgodnie z funkcją logiczną AND. Komenda ta powoduje wyzerowanie linii 7, natomiast pozostałe linie portu pozostawi bez zmian i nie trzeba wiedzieć, jak były one ustawione jej wykonaniem. Rozkaz ANL może tylko wyzerować wybrane bity, nie może ustawić bitu na jeden jeżeli poprzednio był on zerem.
Rozkaz ORL, który pojawił się w przykładzie, jest wykonywany zgodnie z funkcją logiczną OR. Ustawia on określone bity na wartość jeden bez względu na to, co było w rejestrze wcześniej. Rozkazy ANL i ORL umieszczone w pętli LOOP powodowały mruganie diody.
Rozkaz XRL wykonywany jest na parze bitów zgodnie z funkcją OR. Może on zastąpić oba wymienione wyżej rozkazy.
Sterowanie z wykorzystaniem rozkazów działających na cały port posiada tą zaletę , że zmiany na poszczególnych liniach następują praktycznie równocześnie. Przy sterowaniu poszczególnymi liniami zmiany te następują kolejno. Można to obserwować podczas pracy programu w trybie krokowym.
Program włączający i wyłączający jednocześnie diodę świecącą LED (linia 7 portu P1) i brzęczyk (linia 5 portu P1) :
MASK EQU 10100000B ;Maska do zmiany stanu linii 5 i 7 w porcie P1
LJMP START
ORG 100H
START:
LOOP: ;Pętla zmiany stanu
XRL P1,#MASK ;Negacja linie portu P1 zgodnie z maską MASK
MOV A,#10 ;Czekaj czas 1s
LCALL DELAY_100MS ;Podprogram z EPROMu
LJMP LOOP ;Powtórz
Po przekształceniu powyższego programu uzyskaliśmy nowy program powodujący ,że świecenie diody i włączenie brzęczka odbywało się na zmianę:
MASK EQU 10100000B ;Maska do zmiany stanu linii 5 i 7 w porcie P1
LED EQU 01111111B ;Maska włączenia diody
LJMP START
ORG 100H
START:
ANL P1,#LED ;Włączenie diody
LOOP: ;Pętla zmiany stanu
XRL P1,#MASK ;Negacja zgodnie z maską portu P1
MOV A,#10 ;Opóźnienie 1s
LCALL DELAY_100MS
LJMP LOOP ;Powtórz
Schemat algorytmu programu:
Aby stan portu xx001x1 zmienić na stan xx10x0x1 można wykorzystać następujące rozkaz:
XRL P1,00100100B
lub
ANL P1,11111011B
ORL P1,00100000B
Na koniec można dodać, że na cztery istniejące porty dwa z nich: P0 i P2 pełnią rolę układów we/wy, które umożliwiają zapis hak i odczyt danych.