LABORATORIUM PODSTAW TECHNIKI MIKROPROCESOROWEJ
Imię i Nazwisko Gajdziński Radosław Czopek Michał |
Grupa ED 5.3 |
||||
Data wyk. Ćwicz
|
Numer ćwiczenia 1 i 2 |
Temat ćwiczenia: |
1.Linie wejść i wyjść mikrokontrolera 2.Porty mikrokontrolera |
Ocena |
1.Celem ćwiczeń nr1 było zapoznanie się ze sposobami sterowania urządzeniami podłączonymi bezpośrednio do portów mikrokontrolera.
Zadanie nr 1 w ćwiczeniu nr1 polegało na wprowadzeniu programu przy użyciu komputera, zapoznaniu się z podstawowymi komendami i obserwacji zmian jakie nastąpiły w listingu programu po jego asemblacji.
Wykonanie zadania:
Po asemblacji programu listing został uzupełniony o :
numerację kolejnych linii
adresy rozkazów
kody rozkazów zapisane szesnastkowo
Algorytm wykonywanego programu (program miał na celu zerowanie linii a tym samym zapalanie diody testowej)
Zadanie nr2 polegało na wprowadzeniu programu przy użyciu klawiatury systemu DSM-51.
Kod źródłowy różni się nieco od kodu wprowadzanego do komputera z uwagi na to, że nie możemy mni. wpisać komentarza oraz nie musimy umieszczać programu od adresu 100H gdyż zastaje on tam umieszczony automatycznie.
Zadanie nr3 polegało na uruchomieniu programu w trybie krokowym przy użyciu komputera.
W trybie krokowym mogliśmy badać działanie programu, obserwując jednocześnie zawartość pamięci i rejestrów mikrokontrolera.
Dzięki zastosowaniu dyrektywy EQU można było nadać symbolowi LED (oznaczenie diody świecącej) takiej samej wartości, jak P1.7 co znacznie polepszyło czytelność programu.
Poniżej przedstawiony jest algorytm przykładowego programu użytego w zadaniu nr3.
Przy wykorzystaniu podprogramu DELAY_100MS można zastosować opóźnienie od 100ms do 25,5s gdy akumulator zawiera wartości od 1 do 255 i 25,6 s 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. Analizowany program powodował mruganie diody i jednoczesne włączanie brzęczyka. W programie użyto rozkazu CPL który neguje wartość bitu. Różni on się tym od rozkazów CLR i SETB, że nie możne przewidzieć wyniku jego działania jeżeli nie znało się wartości bitu przed wykonaniem rozkazu.
Poniżej znajduje się algorytm użytego w zadaniu programu.
Poniżej znajduje się algorytm i listing programu zbliżonego do tego, który został użyty w zadaniu nr4 z tą jednak różnicą, że świecenie diody TEST odbywało się na przemian z sygnałem z BUZZERA i jej stan trwał dwukrotnie dłużej niż włączenie brzęczka
LED EQU P1.7
BUZZER EQU P1.5
LJMP START
ORG 100H
START:
CLR BUZZER
LOOP:
CPL LED
CPL BUZZER
MOV A,#20
LCALL DELAY_100MS
CPL LED
CPL BUZZER
MOV A,#10
LCALL DELAY_100MS
LJMP LOOP
Algorytm programu:
Celem ćwiczenia nr2 było zapoznanie się ze sposobami sterowania portami mikrokontrolera 8051.
Zadanie nr1 tego ćwiczenia obejmowało wpisywanie danych do portu. Przy pisaniu programu do wpisywania danych korzystaliśmy z rozkazu MOV ( MOV ładował daną do portu P1 ).
Podczas obserwacji pracy krokowej naszego programu dostępna jest jednocześnie zawartość pamięci i rejestrów mikrokontrolera. Obserwując rejestry w pracy krokowej możemy obserwować jak zmieniają się wartości bitów portów mikroprocesora i zawartość akumulatora. W zależności od zmiany konkretnej linii portu możemy określić, którymi urządzeniami steruje dany port i dana linia w tym porcie.
W zadaniu nr2 badaliśmy zerowanie i ustawianie linii portów przy pomocy logicznych operacji na parach bitów.
W przykładzie a) naszego zadania nr2 użyliśmy rozkazu ANL, który jest wykonywany zgodnie z funkcją logiczną AND. Rozkaz ten powoduje wyzerowanie linii 7, natomiast pozostałe linie portu pozostaną nie zmienione i nie trzeba wiedzieć jak były ustawione przed wykonaniem tego rozkazu. Rozkaz ANL może tylko wyzerować wybrane bity, nie może ustawić bitu na jeden jeżeli poprzednio był on zerem. W przykładzie b) obok rozkazu ANL pojawia się rozkaz ORL, który jest wykonywany zgodnie z funkcją logiczną OR. Ustawia on określone bity na wartość jeden bez względu co było w rejestrze wcześniej. Rozkazy ANL i ORL zostały umieszczone w pętli LOOP co powodowało mruganie diody. Oba wyżej wymienione rozkazy można zamienić jednym XRL i on też odpowiednio użyty będzie powodował mruganie diody. I tak też stało się w przypadku c). Rozkaz XRL wykonywany jest na parze bitów zgodnie z funkcją OR. Sterowanie z wykorzystaniem rozkazów działających na cały port jest może mniej czytelne niż sterowanie rozkazami działającymi na poszczególne linie, ale ma ono swoje zalety: można wykonywać zmianę stanów dwóch linii w jednym rozkazie i może ona nastąpić ona jednocześnie a nie kolejno po sobie. W krokowego wykonywania przykładów można zaobserwować przede wszystkim zmiany rejestrów portów i zmiany rejestrów akumulatora. Zmian wartości na liniach do których dołączone są brzęczyk i dioda jest efektem zmiany jakie nastąpiły w rejestrach portów.
Program włączający i wyłączający jednocześnie diodę świecącą LED (linia 7 port P1) i brzęczyk (linia 5 port P1) :
MASK EQU 10100000B ; maska do zmiany stanu linii 5 i 7 w porcie P1
LJMP START
ORG 100H
START:
LOOP: ; pętla
XRL P1,#MASK ; negacja zgodnie z maską portu P1
MOV A,#10 ; opóźnienie 1s
LCALL DELAY_100MS
LJMP LOOP ; od początku
Zmodyfikowaliśmy powyższy program tak, że świecenie diody odbywało się na przemian z włączeniem brzęczka.
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
XRL P1,#MASK ; negacja zgodnie z maską portu P1
MOV A,#10 ; opóźnienie 1s
LCALL DELAY_100MS
LJMP LOOP ; od początku
Schemat algorytmu programu:
Pkt 3 zadania nr3.
Aby stan portu xx00x1x1zmienić na stan xx10x0x1można użyć następujących rozkazów :
XRL P1,00100100B
lub
ANL P1,11111011B
ORL P1,00100000B