Katowice dn. 15.V.2010 r
Sprawozdanie z ćwiczenia laboratoryjnego pt.
MIKROKONTROLERY – cz. 1
Sekcja laboratoryjna:
1.
Dariusz Walencik – odpowiedzialny
2.
Bartosz Stołtny
3.
Robert Tasak
1.
Opis teoretyczny urządzenia – mikrokontroler 8051:
Jest jednym z najpopularniejszych mikrokontrolerów 8-bitowych. Na jego bazie powstała
duża rodzina mikrokontrolerów. Poszczególne układy rodziny różnią się między sobą
zestawem scalonych razem z procesorem urządzeń peryferyjnych..
a) struktura:
Rys 1: Układ wyprowadzeń mikrokontrolera.
Porty są to wyprowadzenia 8-bitowe. Port może pełnić role wyjścia informacji
binarnej. Tak więc, jeżeli zachodzi potrzeba procesor może wpisać do portu dowolną
liczbę binarną z zakresu 0...255, np. 48 (binarnie 48=00110000). Końcówki dowolnego
portu procesora mogą pełnić zarówno rolę wejść jak i wyjść.
Poszczególne wyprowadzenia:
1. PORT 1 (P1) to końcówki o numerach 1...8
- Oznaczenia poszczególnych końcówek portu P1 wskazują nam kolejną pozycje bitu. Istotną
zaletą portów uniwersalnych procesora (w tym także P1) jest możliwość indywidualnego
ustawiania poziomu logicznego na każdym wyprowadzeniu nie zależnie. Nie trzeba zatem
zapisywać całej liczby do portu aby np. zmienić stan tylko na jednym wyprowadzeniu,
wystarczy ustawić w (rozkazem SETB) lub wyzerować (rozkazem (CLR)odpowiedni bit
rejestru portu P1.
2. PORT 3 (P3) to końcówki o numerach 10...17
- podobnie jak w przypadku portu P1, port P3 może być wyjściem lub wejściem..
- pinyP3.0(RXD) i P3.1(TXD) mogą pełnić rolę portu transmisji szeregowej.
W praktyce poprzez te dwa wyprowadzenia można przesłać informację (bajty i bity) z i do
procesora z innych układów cyfrowych w sposób szeregowy, tzn. bit po bicie.
- alternatywną funkcją końcówek P3.2 (INTO\ ) oraz P3.3 (INT1) jest funkcja detekcji
przerwań zewnętrznych. Przerwanie w tym przypadku odnosi się do zmiany stanu logicznego
( na omawianym wyprowadzeniu P3.2 lub P3.3) z "1" na "0". W efekcie "we wnętrzu"
procesora 8051 została ustawiona tak zwana flaga - znacznik zgłoszenia przerwania.
3. PORT 2 (P2) to końcówki o numerach 21...28
- są to wyprowadzenia drugiego 8- bitowego portu procesora.
- port P2 spełnia wszystkie funkcje podobnie jak P1.
- dodatkowo przez końcówki portu P2 podawane jest w razie potrzeby starsza część adresu
(A8...A15) przy dostępie do zewnętrznej pamięci danych (SRAM) a także programu (np.
EPROM).
4. PORT 0 (P0) to końcówki o numerach 32...39
- podstawowe funkcje portu jako dwukierunkowej bramy do wymiany danych są takie same
jak w przypadku portów P1 i P2
- różnicą jest zwiększona obciążalność tego portu oraz fakt nie posiadania wbudowanych
rezystorów podciągających końcówki portu do plusa zasilania w wypadku odczytu.. Bardzo
ważną rolę jaką pełni P0, jest funkcja multipleksowanej magistrali danych i młodszej części
adresu. multipleksowanej w praktyce znaczy przełączalnej czyli raz na końcówkach portu P0
procesor może wystawić bajt danych np. do zapisu zewnętrznej pamięci danych, w innym
przypadku adres w celu wybrania potrzebnej komórki pamięci SRAM do której ma być
zapisana.
5. Końcówka 9 (RST) czyli reset.
- powoduje skasowanie układu, a więc natychmiastowe przerwanie wykonywanych czynności
i rozpoczęcie cyklu działania procesora od samego początku (od włączenia zasilania układu).
Czas trwania dodatniego impulsu kasującego zależy od częstotliwości z jaką pracuje
mikroprocesor. Z reguły w typowych zastosowaniach czas 1ms zupełnie wystarczy. W
układach praktycznych RST dołączamy układ który generuje wymagany impuls zerujący.
6. Końcówki 18 i 19 (XTAL1 i XTAL2)
- końcówki te służą do łączenia zewnętrznego rezonatora kwarcowego o częstotliwości
zależnej od potrzeb użytkownika, ale także od wersji układu 8051. W praktyce częstotliwość
ta może wynosić od 1,2MHz do 12...16MHz. dołączony do tych pinów rezonator kwarcowy
umożliwia pracę wbudowanemu w 8051 generatorowi, który "napędza" cały mikroprocesor.
Od częstotliwości rezonatora ściśle zależy szybkość działania mikrokontrolera .
7. Końcówka 20 (Vss)
- końcówka ujemnego napięcia zasilającego - masy (GND)
8. Końcówka 29 (PSEN\)
- w przypadku pracy procesora z zewnętrzną pamięcią programu (np. EPROM) końcówka ta
wysyła sygnał odczytu z tej pamięci. W praktyce jest dołączona do wejścia OE\
współpracującej pamięci EPROM. Procesor chcąc odczytać kolejne rozkazy z zewnętrznej
pamięci programu podaje poziom niski na końcówkę "PSEN" a następnie dokonuje odczytu .
9. Końcówka 30 (ALE)
- sygnał pojawiający się na tym wyprowadzeniu można nazwać "sygnałem zapisu adresu" do
dodatkowego zewnętrznego układu.
10. Końcówka 31 (EA\)
- powinna być dołączona do masy jeżeli mikroprocesor pobiera rozkazy w zewnętrznej
pamięci programu lub do plusa zasilania (+5V) jeżeli z wewnętrznej.
stan na tym wejściu
określa sposób współpracy z pamięcią programu.
11. Końcówka 40 (Vcc)
- końcówka zasilania mikroprocesora 8051. Napięcie względem końcówki Vss (czyli masy) z
reguły nie może przekroczyć 6,5V .Dlatego układ mikrokontrolera zasilany jest napięciem
5V.
b) schemat blokowy:
Rys 2; Schemat blokowy mikrokontrolera.
Mikrokontroler 8051 złożony jest z następujących elementów:
• Generatora sygnałów zegarowych i układów kontrolno-taktujących
• Pamięci programu ROM lub EPROM (4kB w wersji podstawowej) - jest to pamięć ustalana
przy produkcji mikrokontrolera
• 128-bajtowej pamięci danych w obszarze wewnętrznej pamięci RAM (adresy 00...7Fh)
• zespołu rejestrów specjalnych (SFR-Special Function Registers) umieszczonych w
wydzielonym obszarze pamięci wewnętrznej RAM (adresy 80h...0FFh), poprzez które
możliwe jest sterowanie urządzeniami wewnętrznymi
• 16-bitowego licznika rozkazów (PC)
• 8-bitowej ALU (jednostki arytmetyczno-logicznej)
• Czterech grup rejestrów (R0-R7), z których każda zawiera osiem 8-bitowych rejestrów
umieszczonych w wewnętrznej pamięci danych RAM
• 16-bitowego wskaźnikowego rejestru danych DPTR (rejestr SFR o adresie 82h)
• 8- bitowego wskaźnika stosu SP (rejestr SFR o adresie 81h)
• czterech 8-bitowych portów we-wy PO-P3 (bufory w bloku SFR pod adresami 80h,90h,A0h
i B0h)
• dwóch 16-bitowych układów czasowo-licznikowych TIMER 0 i TIMER 1 . Układy te mogą
zlicza impulsy zegarowe lub impulsy przychodzące z zewnątrz.
• sterownika szeregowej transmisji danych pozwalającego na zorganizowanie transmisji w
standardzie RS232 w dwu kierunkach jednoczenie
• sterownika przerwań przyjmującego przerwania z pięciu źródeł - dwa z układów
zegarowych (timerów), jedno ze sterownika transmisji szeregowej i dwa z linii zewnętrznych
2.
Część praktyczna – programowanie:
a) program 1 – zapalenie diody (włącznik):
Opis programu: Program ten ma za zadanie zapalenie diody. Następuje wyzerowanie
bitu b7 w porcie P1.7 , następnie zapalenie diody. W kodzie programu wstawiona jest
pętla – przez co program nie pozwala zakończyć działania bez ingerencji użytkownika z
zewnątrz. Dioda pozostaje zapalona. Wstawienie tego polecenia powoduje brak
możliwości przejścia do polecenia END bez ingerencji użytkownika.
Kod programu:
Opis działania poszczególnych
poleceń:
CLR P 1.7
L00
LJMP L00
END
Następuje wyzerowanie bitu 7 portu P1,
następnie zapalenie się diody.
Wstawienie etykiety
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
Wyzerowanie bitu P
1.7, zapalenie diody
Etykieta L00
Koniec
(po RESET RAM)
b) program 2 – zgaszenie diody (wyłącznik):
Opis programu: Zadaniem programu jest wyłączenie palącej się diody po pewnym czasie
opóźnienia. Po upływie wyznaczonego czasu musi nastąpić przypisanie bitowi 7 z portu
P 1.7 stanu wysokiego, co doprowadza do wygaszenia diody. Potem wprowadzona zostaje
pętla, której działanie skutkuje tym, że dioda pozostaje wyłączona, aż do momentu
ręcznego wyłączenia programu.
Kod programu:
Opis działania poszczególnych
poleceń:
CLR P 1.7
MOV A, #10H
LCAL DEL_100
SETB P1.7
L00
LJMP L00
END
Następuje wyzerowanie bitu 7 portu P1,
następnie zapalenie się diody.
Wprowadzenie do akumulatora A liczby 16.
Wywołanie opóźnienia odpowiadającego
krotności [A]*100ms
Przypisanie bitowi 7 portu P1.7 stanu
wysokiego 1. Skutkuje to zgaszeniem diody.
Wstawienie etykiety
Skok do etykiety, wykonanie pętli.
Zakończenie działania programu. Z powodu
wstawienia pętli koniec programu należy
wywołać ręcznie poprzez polecenie RESET
RAM
Schemat blokowy programu:
START
Wprowadzenie do akumulatora
A liczby 16
Opóźnienie (wartość A*100ms)
Stan wysoki dla bitu
7 portu P1.7
(zgaszenie diody)
Etykieta L00
Koniec
(po RESET RAM)
c) program 3 – układ migającej diody:
Opis programu: Zadaniem programu jest włączenie i wyłączenie diody. W kodzie
programu wykorzystano pętlę zawierająca instrukcję zapalanie i wyłączania diody. Okres
świecenia diody odpowiada jej czasowi wygaszenia z powodu jednakowo
zadeklarowanych wartości opóźnienia. Dioda świeci się przez 1 s (10*100ms) oraz
pozostaje zgaszona również przez 1s.
Kod programu:
Opis działania poszczególnych
poleceń:
L00
MOV A, #0AH
LCAL DEL_100
CLR P 1.7
MOV A, #0AH
LCAL DEL_100
SETB P1.7
LJMP L00
END
Wstawienie etykiety
Wprowadzenie do akumulatora A liczby 10.
Wywołanie opóźnienia odpowiadającego
krotności [A]*100ms
Następuje wyzerowanie bitu 7 portu P1,
następnie zapalenie się diody.
Wprowadzenie do akumulatora A liczby 10.
Wywołanie opóźnienia odpowiadającego
krotności [A]*100ms
Przypisanie bitowi 7 portu P1.7 stanu
wysokiego 1. Skutkuje to zgaszeniem diody.
Skok do etykiety, wykonanie pętli.
Zakończenie działania programu. Z powodu
wstawienia pętli koniec programu należy
wywołać ręcznie poprzez polecenie RESET
RAM
Schemat blokowy programu:
START
Wprowadzenie do akumulatora
A liczby 10
Opóźnienie (wartość A*100ms)
Wyzerowanie bitu P 1.7,
zapalenie diody
Etykieta L00
Wprowadzenie do akumulatora
A liczby 10
Opóźnienie (wartość A*100ms)
Stan wysoki dla bitu
7 portu P1.7
(zgaszenie diody)
Koniec
(po RESET RAM)
d) program 4 – układ migającej diody z diodą włączoną na początku:
Opis programu: Zadanie programu jest niemalże identyczne jak w programie 3. Różnica
polega na tym, że w programie 4 działanie programu rozpoczyna się od zapalenia diody.
Kod programu:
Opis działania poszczególnych
poleceń:
L00
CLR P 1.7
MOV A, #0AH
LCAL DEL_100
SETB P1.7
MOV A, #0AH
LCAL DEL_100
CLR P 1.7
LJMP L00
END
Wstawienie etykiety
Następuje wyzerowanie bitu 7 portu P1,7
następnie zapalenie się diody.
Wprowadzenie do akumulatora A liczby 10.
Wywołanie opóźnienia odpowiadającego
krotności [A]*100ms
Przypisanie bitowi 7 portu P1.7 stanu
wysokiego 1. Skutkuje to zgaszeniem diody.
Wprowadzenie do akumulatora A liczby 10.
Wywołanie opóźnienia odpowiadającego
krotności [A]*100ms
Następuje wyzerowanie bitu 7 portu P1,
następnie zapalenie się diody.
Skok do etykiety, wykonanie pętli.
Zakończenie działania programu. Z powodu
wstawienia pętli koniec programu należy
wywołać ręcznie poprzez polecenie RESET
RAM
Schemat blokowy programu:
START
Etykieta L00
Wyzerowanie bitu P 1.7,
zapalenie diody
Wprowadzenie do akumulatora
A liczby 10
Opóźnienie (wartość A*100ms)
Stan wysoki dla bitu
7 portu P1.7
(zgaszenie diody)
Wprowadzenie do akumulatora
A liczby 10
Opóźnienie (wartość A*100ms)
Wyzerowanie bitu P 1.7,
zapalenie diody
Koniec
(po RESET RAM)
e) program 5 – układ migającej diody – różne okresy zapalanie i wygaszania
(zapalanie – 1,5s, wygaszanie – 0,5s) – przerywacz sterowany czasowo:
Opis programu: Głównym zadaniem programu jest włączanie oraz wyłączanie diody –
podobnie jak to miało miejsce w programie 3. Aby spełniać stawiane nam wymagania,
musimy jednak zmodyfikować czas opróżnień. Aby wydłużyć czas zaświecania diody
modyfikujemy następującą część kodu: MOV A, #0FH ; LCALL DEL_100.
Liczba F w zapisie heksadecymalnym jest odpowiednikiem liczby 15 w zapisie
dziesiętnym. Modyfikacja ta pozwala na wydłużenie czasu zapalania się diody do 1,5s
(15*100ms). Następnie dokonano modyfikacji czasu wygaszania diody. Tutaj jednak
wartość heksadecymalna A została zastąpiona wartością 5 poprzez polecenie: MOV A,
#05H co daje po wykonaniu obliczeń oczekiwaną wartość 0,5s.
Kod programu:
Opis działania poszczególnych
poleceń:
L00
MOV A, #05H
LCAL DEL_100
CLR P 1.7
MOV A, #0FH
LCAL DEL_100
SETB P1.7
LJMP L00
END
Wstawienie etykiety
Wprowadzenie do akumulatora A liczby 5.
Wywołanie opóźnienia odpowiadającego
krotności [A]*100ms
Następuje wyzerowanie bitu 7 portu P1,
następnie zapalenie się diody.
Wprowadzenie do akumulatora A liczby 15.
Wywołanie opóźnienia odpowiadającego
krotności [A]*100ms
Przypisanie bitowi 7 portu P1.7 stanu
wysokiego 1. Skutkuje to zgaszeniem diody.
Skok do etykiety, wykonanie pętli.
Zakończenie działania programu. Z powodu
wstawienia pętli koniec programu należy
wywołać ręcznie poprzez polecenie RESET
RAM
Schemat blokowy programu:
3.
Wnioski:
- Program I – włącznik : może zostać wykorzystany jako włącznik urządzeń
np. wciskając kontrolkę od telewizora powodujemy zapalenie się diody, która pozostaje
włączona, aż do ingerencji użytkownika(program działa w pętli)
-Program II – wyłącznik: jest przeciwieństwem programu I – może zostać wykorzystany
jako wyłącznik np. podczas gdy telewizor jest w stanie czuwania(świeci się kontrolka) to
po naciśnięciu przycisku – następuje jej zgaszenie i pozostaje zgaszona, aż do kolejnej
ingerencji osoby obsługującej(program działa w pętli)
- Program III - przerywacz: zapalanie i gaszenie diody co 1s – taki program może być
wykorzystany do sterowania sygnalizacją świetlna migającą – np. często zdarza się na
przejazdach kolejowych ,ze sygnalizator migając ostrzega nas o niebezpieczeństwie
START
Etykieta L00
Wprowadzenie do akumulatora
A liczby 5
Opóźnienie (wartość A*100ms)
Wyzerowanie bitu P 1.7,
zapalenie diody
Wprowadzenie do akumulatora
A liczby 15
Opóźnienie (wartość A*100ms)
Stan wysoki dla bitu
7 portu P1.7
(zgaszenie diody)
Koniec
(po RESET RAM)
- Program IV: jest on modyfikacją programu 3-go: może zostać wykorzystany
również w sygnalizacji świetlnej podczas gdy sygnalizacja przechodzi w tryb pracy
nocnej – najpierw pali się światło – następnie przechodzi do trybu migającego kolorem
pomarańczowym(miganie pozostaje, aż do porannego włączenia sygnalizacji)
- Program V - przerywacz sterowany czasowo: program ten może być wykorzystany do
sterowania długościami faz sygnalizacji świetlnej, która jak wiemy pracuje fazowo –
poprzez zmianę wartości wprowadzanej do akumulatora – możemy wpływać na czas
poszczególnej fazy – zapalanie i gaszenia diody/światła
- zestaw rozkazów wykorzystany w mikrokontrolerach został dobrany pod kątem
wykorzystania w układach sterujących
- poprzez wprowadzanie do akumulatora odpowiedniej liczby w zapisie
heksadecymalnym możemy wpływać na krotność opóźnienia wywołania danej funkcji
(procedury) – liczba wprowadzona do akumulatora jest mnożnikiem naszego opóźnienia
deklarowanego za pomocą komendy: LCAL DEL_100 – powoduje to krotność
krotności [A]*100ms
- modyfikowane programy działają w pętli, więc polecenie END nie powoduje ich
zakończenia – w celu zakończenia musimy skorzystać z polecenie RESET RAM