Katowice dn. 16.V.2010 r
Sprawozdanie z ćwiczenia laboratoryjnego pt.
MIKROKONTROLERY – cz. 4
Sekcja laboratoryjna:
1.
Dariusz Walencik – odpowiedzialny
2.
Bartosz Stołtny
3.
Robert Tasak
1. Opis teoretyczny:
Wyświetlacz siedmio segmentowy sterowany jest za pomocą 2 buforów –
porty wyjściowe podłączone do szyny:
a)
Bufor wyboru wskaźnika: dane wpisane do tego bufora określają, który składnik
ma być aktywny w danym momencie. Stosowane SA tutaj kody 1z8 czyli każdy
bit decyduje indywidualnie o świeceniu konkretnego wskaźnika. Typowo wybrany
będzie faktycznie tylko 1 z 7 wskaźników. Ustawienie 1 na poszczególnym bicie
powoduje świecenie odpowiedniego wskaźnika. Bit 0 decyduje o świeceniu
wskaźnika 1, bit 1 o świeceniu 2-go itd. Bit 6 decyduje o świeceniu diod, które
zostały podłączone jako wskaźnik 7.
Tablica 1: Wskaźniki przypisane konkretnym bitom.
b)
Bufor danych wskaźnika: bajt umieszczony w tym buforze odpowiada za
wskazanie, które segmenty wyświetlacza będą zapalone w wybranym wskaźniku.
Jedynka umieszczona na konkretnym bicie powoduje świecenie odpowiedniego
segmentu lub diody święcącej zgodnie z opisem:
Tablica 2: Bity odpowiadające segmentom wskaźnika.
Bufor to obszar pamięci służący do przechowywania danych do komunikacji pomiędzy
dwoma systemami, np. bufor karty sieciowej przechowuje pakiety, które mają zostać
wysłane, a bufor karty graficznej – to co ma zostać wyświetlone na ekranie. Bufory
umożliwiają asynchroniczną komunikację między systemami.
Urządzenia wyjściowe w systemie komputerowym służą do przekazania
informacji wynikających z działania systemu komputerowego do świata zewnętrznego. I
znów patrząc na nasz poczciwy PC-et od razu wiemy że będzie to np. monitor lub drukarka.
W systemach zbudowanych w oparciu o mikrokontroler używa się nieco prostsze urządzenia
wyjściowe takie jak np. wyświetlacze LED lub LCD, diody LED, tzw. "buzzery",
przekaźniki, silniki itp. W komputerach osobistych sygnałami wyjściowymi są najczęściej
informacje wyświetlane na monitorze czy drukowane na papierze, a w systemach, w których
pracuje mikrokontroler są to najczęściej sygnały cyfrowe, które sterują pracą różnych
urządzenia elektrycznych.
Porty mikrokontrolera 8051 mogą być portami wejściowymi jak i wyjściowymi
– są one dwukierunkowe. Są to jednak porty pseudo-dwukierunkowe. Jeżeli pełnią rolę
wyjściowych to należy w nie wpisywać odpowiednie dane – poszczególnie linie ustawiane są
w stan 0 lub 1. Jeżeli linie te mają spełniać funkcję wejściową to należy ustawić je w stan 1.
2. Część praktyczna – programowanie:
a) program 1 – zapalenie 2 segmentów w każdej 3 sekcji wyświetlacza :
Program na celu zapalenie 2 segmentów wyświetlacza 7segmentowego w 3 sekcjach,
musimy wpierw zapisać do akumulatora wybór 3 sekcji, następnie wartość A zapisać do
bufora, a następnie wskazać na wybór sekcji a i b. Na końcu musi nastąpić odblokowanie
wyświetlacza 7segmentowego.
Efekt zaobserwowany na wyświetlaczu:
Kod programu:
Opis działania poszczególnych
poleceń:
L00
MOV DPTR, #FF30H
MOV A, #07H
MOVX @DPTR, A
MOV DPTR, #FF38H
Wstawienie etykiety
zapisanie do rejestru DPTR adresu wyboru
bufora sekcji
zapisanie do akumulatora 0000 0111
(wybór sekcji 1,2,3)
zapisanie A do bufora wyboru sekcji
(adres bufora wyboru sekcji znajduje się
w rejestrze DPTR)
zapisanie do rejestru DPTR adresu bufora
wyboru segmentu
MOV A, #03H
MOV @DPTR, A
CLR P1.6
LJMP L00
END
zapisanie do akumulatora 0000 0011
(wybór segmentu. a i b)
zapisanie A do bufora wyboru segmentu
(adres bufor wyboru sekcji znajduje się w
rejestrze DPTR)
odblokowanie wyświetlania całego
wyświetlacza 7-segm.
Skok do etykiety, wykonanie pętli.
Koniec programu, jednak z powodu
wstawienia pętli koniec programu należy
wywołać ręcznie poprzez polecenie RESET
RAM
Schemat blokowy programu:
zapisanie do rejestru DPTR adresu wyboru
bufora sekcji
zapisanie do akumulatora 0000 0111 zapisanie
do rejestru DPTR adresu wyboru bufora sekcji
zapisanie A do bufora wyboru
sekcji
zapisanie do rejestru DPTR adresu
bufora wyboru segmentu
zapisanie do akumulatora
0000 0011
zapisanie A do bufora wyboru
segmentu
odblokowanie wyświetlania
całego wyświetlacza 7-
segm.
Koniec
(po RESET RAM)
START
Etykieta L00
b) program 2 – włącznik trzech 0:
Program ten jest modyfikacją programu 1, powoduje on zapalanie się trzech 0 czyli
6segmentów każdej z 3 sekcji wyświetlacza. Po naciśnięciu klawisza 0 na
wyświetlaczu zostają wyświetlone trzy zera.
Efekt zaobserwowany na wyświetlaczu:
Kod programu:
Opis działania poszczególnych
poleceń:
MOV R0, #30H
MOV A, #3FH
MOV @R0, A
LCALL W_KEY
ADD A,#30H
MOV R1, A
L00
MOV DPTR, #FF30H
MOV A, #07H
MOVX @DPTR, A
MOV DPTR, #FF38H
MOV A, @R1
wpisanie do rejestru R0 wartości 30H
zapisanie do rejestru R1 wartości 0011 1111
kod(0)
zapisanie do komórki pamięci o adresie
zwrotnym w rejestrze R0 zawartości
akumulatora
pobranie numeru klawisza z klawiatury do
akumulatora
dodanie do akumulatora wartości 30H
zapisanie akumulatora w rejestrze R1
Wstawienie etykiety
zapisanie do rejestru DPTR adresu wyboru
bufora sekcji
zapisanie do akumulatora 0000 0111
(wybór sekcji 1,2,3)
zapisanie A do bufora wyboru sekcji
(adres bufora wyboru sekcji znajduje się
w rejestrze DPTR)
zapisanie do rejestru DPTR adresu bufora
wyboru segmentu
zapisanie do akumulatora
MOV @DPTR, A
CLR P1.6
LJMP L00
END
zapisanie A do bufora wyboru segmentu
(adres bufor wyboru sekcji znajduje się w
rejestrze DPTR)
odblokowanie wyświetlania całego
wyświetlacza 7-segm.
Skok do etykiety, wykonanie pętli.
Koniec programu, jednak z powodu
wstawienia pętli koniec programu należy
wywołać ręcznie poprzez polecenie RESET
RAM
Schemat blokowy programu:
START
wpisanie do rejestru R0
wartości 30H
zapisanie do rejestru R1
wartości 0011 1111
zapisanie do komórki pamięci o
adresie zwrotnym w rejestrze R0
zawartości akumulatora
dodanie do akumulatora
wartości 30H
Pobranie numeru
klawisza z klawiatury
zapisanie akumulatora w
rejestrze R1
Etykieta L00
zapisanie do rejestru DPTR adresu wyboru
bufora sekcji
zapisanie do akumulatora 0000 0111 zapisanie
do rejestru DPTR adresu wyboru bufora sekcji
zapisanie A do bufora wyboru
sekcji
zapisanie do rejestru DPTR adresu
bufora wyboru segmentu
zapisanie do akumulatora
0000 0011
zapisanie A do bufora wyboru
segmentu
odblokowanie
wyświetlania całego
wyświetlacza 7-segm.
Koniec
(po RESET RAM)
c) program 3: Jest to zmodyfikowany program 2-gi wzbogacony o funkcję wyświetlania
2 segmentów w 3sekcjach wyświetlacza po naciśnięciu klawisza 1.
Efekty na wyświetlaczu:
0:
1:
Przed wszystkimi komendami użytymi w programie 2-gim, należy wpisać następujące
polecenia:
Kod programu:
Opis działania poszczególnych
poleceń:
MOV R0, #31H
MOV A, #06H
MOV @R0, A
wpisanie do rejestru R0 wartości 31H
(adres pamięci wewnętrznej)
zapisanie do rejestru R1 wartości 0000
0110 (wartość 1)
zapisanie do komórki pamięci o adresie
zawartym w rejestrze R0 zawartości
akumulatora
Schemat blokowy:
START
wpisanie do rejestru R0
wartości 31H
zapisanie do rejestru R1
wartości 0000 0110
zapisanie do komórki pamięci o
adresie zawartym w rejestrze R0
zawartości akumulatora
zapisanie do rejestru R1
wartości 0011 1111
zapisanie do komórki pamięci o
adresie zwrotnym w rejestrze R0
zawartości akumulatora
Pobranie numeru
klawisza z klawiatury
dodanie do akumulatora
wartości 30H
wpisanie do rejestru R0
wartości 30H
zapisanie akumulatora w
rejestrze R1
Etykieta L00
zapisanie do rejestru DPTR adresu wyboru
bufora sekcji
zapisanie do akumulatora 0000 0111 zapisanie
do rejestru DPTR adresu wyboru bufora sekcji
zapisanie A do bufora wyboru
sekcji
zapisanie do rejestru DPTR adresu
bufora wyboru segmentu
zapisanie do akumulatora
0000 0011
zapisanie A do bufora wyboru
segmentu
odblokowanie wyświetlania
całego wyświetlacza 7-
segm
.
Koniec
(po RESET RAM)
d) program 4: Jest to kolejna modyfikacja programu 3 umożliwiająca dodatkowo
wyświetlenie trzech 2 po naciśnięciu klawisza numer 2. Jest to wyświetlanie 5
segmentów w 3 sekcjach.
Przed wszystkimi komendami użytymi w programie 3-gim, należy wpisać następujące
polecenia:
Kod programu:
Opis działania poszczególnych
poleceń:
MOV R0, #32H
MOV A, #5BH
MOV @R0, A
wpisanie do rejestru R0 wartości 32H
(adres pamięci wewnętrznej)
zapisanie do rejestru R1 wartości 0101
1011 (kod cyfry 2)
zapisanie do komórki pamięci o adresie
zawartym w rejestrze R0 zawartości
akumulatora
Efekty na wyświetlaczu po wybraniu klawisza:
0:
1:
2:
Schemat blokowy:
START
wpisanie do rejestru R0
wartości 32H
zapisanie do rejestru R1
wartości 0101 1011
wpisanie do rejestru R0
wartości 31H
zapisanie do rejestru R1
wartości 0000 0110
zapisanie do komórki pamięci o
adresie zawartym w rejestrze R0
zawartości akumulatora
zapisanie do komórki pamięci o
adresie zawartym w rejestrze R0
zawartości akumulatora
wpisanie do rejestru R0
wartości 30H
zapisanie do rejestru R1
wartości 0011 1111
zapisanie do komórki pamięci o
adresie zwrotnym w rejestrze R0
zawartości akumulatora
Pobranie numeru
klawisza z klawiatury
dodanie do akumulatora
wartości 30H
zapisanie akumulatora w
rejestrze R1
zapisanie do rejestru DPTR adresu wyboru
bufora sekcji
Etykieta L00
zapisanie do akumulatora 0000 0111 zapisanie
do rejestru DPTR adresu wyboru bufora sekcji
zapisanie A do bufora wyboru
sekcji
zapisanie do rejestru DPTR adresu
bufora wyboru segmentu
zapisanie do akumulatora
0000 0011
zapisanie A do bufora wyboru
segmentu
odblokowanie wyświetlania
całego wyświetlacza 7-
segm
.
Koniec
(po RESET RAM)
3. Wnioski:
- program I: odpowiadający za wyświetlenie 2 segmentów w 3 sekcjach wyświetlacza może
służyć nam np.: jako tester segmentów wyświetlacza – każdemu segmentowi przypisany jest
bowiem odpowiedni wskaźnik, przez co wiemy, którego segmentu zapalenia możemy się
spodziewać
- program II - wyświetlacz trzech 0: może zostać wykorzystany jako stan początkowy w
stoperach cyfrowych – bowiem odliczanie zaczyna się od 0s. Mamy z nim do czynienia
również podczas gdy zegar cyfrowy wskazuje godzinę 0:00. Program ten jednak działa w
pętli, aż do przerwania go przez użytkownika.
- program III oraz IV: programy te służą wyświetlaniu danej cyfry w trzech sekcjach, po
wyborze odpowiedniego klawisza, konstruując kolejne programy na ich bazie, widzimy, że
możemy wpływać na wyświetlanie poszczególnych cyfr programując odpowiednią cyfrę –
poprzez zapisanie jej do rejestru w postaci heksadecymalnej, rozwiązanie to może być
stosowane podczas programowanie różnego rodzaju wyświetlaczy ledowych –
wykorzystywanych jako ekrany informacyjne, reklamowe, a także jako zegary cyfrowe
- wykonane przez nas ćwiczenie obrazuje nam, że wyświetlacz siedmiosegmentowy pozwala
na graficzne przedstawienie wyniku operacji
- przechowując dane w buforze mamy możliwość komunikacji pomiędzy dwoma systemami