Sprawozdanie03 04 Brociek Zemsta


Brociek Adrian
Zemsta Paweł
Grupa 21A
Sprawozdanie nr 3+4
Obsługa portów wejścia/wyjścia mikrokontrolerów 8051
Opis:
Akumulator - jest rejestrem roboczym, najbardziej uniwersalnym ponieważ może być
argumentem wielu rozkazów, w których użycie innego rejestru nie jest możliwe. Nie
powinien być on używany do przechowywania danych w dłuższych sekwencjach programu,
gdy prawdopodobnie będzie potrzebny do bieżących operacji w kolejnych rozkazach.
PROG SEGMENT CODE - Definiuje segment o nazwie PROG w klasie pamięci CODE, czyli w
pamięci programu. Wszystko co pojawi się w tym segmencie będzie umieszczone w jego pamięci .
Po zdefiniowaniu nazwy segmentu należy go wybrać, używając dyrektywy RSEG.
CSEG AT nr  powoduje, że napisany niżej kod ma być umieszczony w pamięci programu
począwszy od podanego adresu  nr .
RSEG nazwa - rozpoczyna segment zdefiniowany przy pomocy PROG SEGMENT CODE (w
przypadku naszego programu ma on nazwę PROG). Od tego momentu, znajdujący się
poniżej kod zostanie umieszczony w pamięci programu. Raz rozpoczęty segment jest
ważny do czasu rozpoczęcia nowego.
JMP nazwa  powoduje przemieszczenie się (skok) do miejsca oznaczonego jako  nazwa .
MOV gdzie,skąd  kopiuje wartość z komórki o adresie zastąpionym tekstem  skąd do komórki o
adresie zastąpionym tekstem  gdzie .
CLR  wyzerowanie.
END - dyrektywa musi być umieszczona w ostatniej linii programu zródłowego, jest warunkiem
zakończenia programu.
SJMP a- przejście do etykiety o nazwie a
Program cw2p1
Kod programu:
PROG SEGMENT CODE ;definiuje segment nazwie PROG w klasie pamięci CODE
CSEG AT 0 ;kod programu będzie umieszczony w jego pamięci począwszy od adresu  0
JMP start ;skok do miejsca oznaczonego etykietą start
RSEG PROG ;rozpoczyna segment, od którego, znajdujący się poniżej kod zostanie umieszczony w
pamięci programu
start:
CLR P2.5 ;wyzerowanie 5 bitu w porcie P2
;MOV P2,#0AAh ;przypisanie do portu P2 wartości AA w kodzie szesnastkowym, czyli 10101010 w
kodzie binarnym
SJMP $
END ;zakończenie wykonywania programu
Powyższy program ma za zadanie wyzerować 5 bit na porcie 2. Po wgraniu pliku hex do mikro-
kontrolera zaobserwujemy, że 5 dioda nie świeci się.
Po odkomentowaniu linii MOV P2,#0AAh program podobnie jak wcześniej wyzeruje 5 bit w
porcie 2. Następnie przypisze do niego wartość AAh, czyli 10101010 w kodzie binarnym. Po wgraniu
pliku hex do mikrokontrolera zaobserwujemy, że zapali się co druga dioda.
Program cw2p1
Kod programu:
PROG SEGMENT CODE ;definiuje segment nazwie PROG w klasie pamięci CODE
CSEG AT 0 ;kod programu będzie umieszczony w jego pamięci począwszy od adresu  0
JMP start ;skok do miejsca oznaczonego etykietą start
RSEG PROG ;rozpoczyna segment, od którego, znajdujący się poniżej kod zostanie umieszczony w
pamięci programu
start:
MOV P2,#0AAh ;przypisanie do portu P2 wartości AA w kodzie szesnastkowym, czyli 10101010 w ko-
dzie binarnym
ACALL CZEKAJ
MOV P2,#055h ;przypisanie do portu P2 wartości 55 w kodzie szesnastkowym, czyli 01010101 w ko-
dzie binarnym
ACALL CZEKAJ
CZEKAJ:
MOV R0,#255
ODLICZAJ2:
MOV R0,#255
ODLICZAJ1:
NOP
NOP
DJNZ R1,ODLICZAJ1 ;dekrementacja rejestru R1 i wykonywanie ODLICZAJ1, jeśli po dekrementa-
cji wartość niezerowa
DJNZ RO,ODLICZAJ2 ;dekrementacja rejestru R0 i wykonywanie ODLICZAJ2,jeśli po dekrementacji
wartość niezerowa
RET
END ;zakończenie wykonywania programu
Powyższy program ma za zadanie naprzemiennie, po ustalonym opóznieniu czasowym wyświe-
tlać na porcie 2 wartość AAh (10101010 bin) i 55h (01010101 bin). Po wgraniu pliku hex do mikrokon-
trolera zaobserwujemy naprzemienne miganie diód.
Własny program
Kod programu:
PROG SEGMENT CODE ;definiuje segment nazwie PROG w klasie pamięci CODE
CSEG AT 0 ;kod programu będzie umieszczony w jego pamięci począwszy od adresu  0
JMP start ;skok do miejsca oznaczonego etykietą start
RSEG PROG ;rozpoczyna segment, od którego, znajdujący się poniżej kod zostanie umieszczony w
pamięci programu
start:
MOV P2,#081h
ACALL CZEKAJ
MOV P2,#042h
ACALL CZEKAJ
MOV P2,#024h
ACALL CZEKAJ
MOV P2,#018h
ACALL CZEKAJ
MOV P2,#024h
ACALL CZEKAJ
MOV P2,#042h
ACALL CZEKAJ
MOV P2,#081h
ACALL CZEKAJ
MOV P2,#0C3h
ACALL CZEKAJ
MOV P2,#0E7h
ACALL CZEKAJ
MOV P2,#0FFh
ACALL CZEKAJ
MOV P2,#07Eh
ACALL CZEKAJ
MOV P2,#03Ch
ACALL CZEKAJ
MOV P2,#018h
ACALL CZEKAJ
MOV P2,#024h
ACALL CZEKAJ
MOV P2,#05Ah
ACALL CZEKAJ
MOV P2,#0A5h
ACALL CZEKAJ
MOV P2,#05Ah
ACALL CZEKAJ
MOV P2,#024h
ACALL CZEKAJ
MOV P2,#018h
ACALL CZEKAJ
MOV P2,#024h
ACALL CZEKAJ
MOV P2,#042h
ACALL CZEKAJ
MOV P2,#081h
ACALL CZEKAJ
CZEKAJ:
MOV R0,#255
ODLICZAJ2:
MOV R0,#255
ODLICZAJ1:
NOP
NOP
DJNZ R1,ODLICZAJ1 ;dekrementacja rejestru R1 i wykonywanie ODLICZAJ1, jeśli po dekrementacji
wartość niezerowa
DJNZ RO,ODLICZAJ2 ;dekrementacja rejestru R0 i wykonywanie ODLICZAJ2, jeśli po dekrementacji
wartość niezerowa
RET
END ;zakończenie wykonywania programu
W załącznikach znajduje się plik program.gif z animacją przedstawiającą zmiany portu 2 na po-
wyższe polecenia.
Program cw2p3
Kod programu:
PROG SEGMENT CODE ;definiuje segment nazwie PROG w klasie pamięci CODE
LED BIT P2.0
SWITCH BIT P3.7
CSEG AT 0 ;kod programu będzie umieszczony w jego pamięci począwszy od adresu  0
JMP start ;skok do miejsca oznaczonego etykietą start
RSEG PROG ;rozpoczyna segment, od którego, znajdujący się poniżej kod zostanie umieszczony w
pamięci programu
start:
MOV C,SWITCH ;przeniesienie do flagi cy wartości z bitu 7 portu 3
MOV LED,C ;przeniesienie wartości z flagi cy do bitu 0 portu 2
;MOV A,P3 ;przeniesienie wartości z portu 3 do akumulatora
;ORL A,#0Fh ;ustawienie zadanych bitów
;MOV P2,A ;przeniesienie wartości z akumulatora do portu 2
SJMP start ;powrót do etykiety start
END ;zakończenie wykonywania programu
Po wciśnięciu przycisku S7 (7 bit na porcie 3) następuje wyłącznie bitu 0 na porcie 2. Do-
datkowo następuje ustawienie wartości flagi cy na 1 na czas wyłączenia 7 bitu na porcie 3.
Po odkomentowaniu trzech następnych etykiet zamiast dwóch pierwszych rozkazów, pro-
gram będzie działał w następujący sposób - po wciśnięciu przycisku S7 do S4 nastąpi wyłączenie
bitów na porcie 2 o tym samym numerze. Natomiast wciskanie pozostałych przycisków, czyli od S3
do S0 nie powoduje żadnych zmian na porcie 2. Zaobserwować możemy to w pliku program2.gif
(załącznik do sprawozdania).
Własny program
Kod programu:
PROG SEGMENT CODE ;definiuje segment nazwie PROG w klasie pamięci CODE
LED BIT P2.1
SWITCH BIT P3.0
CSEG AT 0 ;kod programu będzie umieszczony w jego pamięci począwszy od adresu  0
JMP start ;skok do miejsca oznaczonego etykietą start
RSEG PROG ;rozpoczyna segment, od którego, znajdujący się poniżej kod zostanie umieszczony w
pamięci programu
start:
JB SWITCH, skok ;skok jeśli SWITCH, czyli 0 bajt portu 3 jest ustawiony
SJMP start ;powrót do etykiety start
skok:
CPL P2.1 ;następuje negacja wartości bitu 1 w porcie 2
RET
END ;zakończenie wykonywania programu
Podczas włączonego przycisku S0 (0 bit na porcie 3) zauważymy, że zmianie ulega wartość 1
bitu w porcie 2. Po wgraniu pliku hex do mikrokontrolera zaobserwujemy naprzemienne miganie diody
D1.
Natomiast gdy zerowy bit w porcie 3 przyjmie wartość 0, to miganie diod ulegnie zaprzestaniu.
Co widzimy na rysunku poniżej.


Wyszukiwarka

Podobne podstrony:
Sprawozdanie05 Brociek Zemsta
Sprawozdanie02 Brociek Zemsta
Poprawa sprawozdanie01 Brociek Zemsta
sprawozdanie felixa2
Sprawozdanie Konduktometria
zmiany w sprawozdaniach fin
zemsta
Errata do sprawozdania
2009 03 BP KGP Niebieska karta sprawozdanie za 2008rid&657
Sprawozdanie nr 3 inz
Sprawozdanie FundacjaBioEdu2007
Sprawozdanie Ćw 2
czechow zemsta

więcej podobnych podstron