Politechnika Poznańska
Wydział Elektroniki i Telekomunikacji
MIKROKONTROLER 8051
Proste operacje arytmetyczne,
stos mikrokontrolera 8051
Poznań 2009
Politechnika Poznańska, Wydział Elektroniki i Telekomunikacji
Proste operacje arytmetyczne, stos mikrokontrolera 8051
_________________________________________________________________________________________________
1
Wstęp teoretyczny
Mikrokontroler 8051 jest wyposażony w jednostkę arytmetyczno-logiczną (ALU), która potrafi
wykonywać podstawowe operacje arytmetyczne na liczbach jednobajtowych.
W systemie DSM-51 istnieje kilka standardowych podprogramów służących do czytania danych
z klawiatury matrycowej i wyświetlania informacji na wyświetlaczu LCD.
nazwa
funkcja
LCD_CLR
czyści wyświetlacz LCD
WRITE_HEX
wypisuje na wyświetlaczu LCD bajt z
akumulatora w postaci szesnastkowej
WRITE_TEXT
wypisuje na wyświetlaczu LCD tekst wskazany
rejestrem DPTR
WRITE_DATA
wypisuje znakowo bajt z akumulatora na
wyświetlaczu LCD
WRITE_INSTR
wysyła
na
wyświetlacz
LCD
rozkaz
z
Akumulatora
WAIT_ENTER
na
wyświetlaczu
informacja
„PRESS
ENTER...”; czeka na naciśnięcie klawisza
[Enter]
WAIT_KEY
program czeka na dowolny klawisz z klawiatury
matrycowej;
nr
klawisza
zwraca
w
akumulatorze
WAIT_ENT_ESC
czeka na [Enter] lub [Esc]; zwraca informację:
C=0 - [Enter], C=1 - [Esc]
GET_NUM
wczytuje liczbę BCD (4 cyfry) z klawiatury pod
adres @R0; koniec wpisywania: [Enter] (C=0),
po 4 cyfrze również [Esc] (C=1)
Wszystkie te podprogramy zmieniają zawartość rejestrów A i PSW oraz wykorzystują rejestr R0.
W systemie DSM-51 klawisze [0] ... [9] ponumerowane są odpowiednio od 0 do 9, a pozostałe
mają kolejne wartości 10 ... 15, czyli 0AH ... 0FH.
Kolejność klawiszy jest następująca: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
←, →, ↑, ↓,
ESC, Enter.
Do realizacji podstawowych operacja arytmetycznych służą instrukcje
Politechnika Poznańska, Wydział Elektroniki i Telekomunikacji
Proste operacje arytmetyczne, stos mikrokontrolera 8051
_________________________________________________________________________________________________
2
nazwa
funkcja
przykład
ADD
dodawanie
A
←Α +
ADD A, B
ADD A, #1
ADDC
dodawanie z przeniesieniem A
←Α + +
C
ADDC A, B
MUL
mnożenie
A*B
MUL A, B
SUBB
odejmowanie
A
←Α −
- C
SUBB A, #1
INC
zwiększ o jeden
INC A
DEC
zmniejsz o jeden
DEC A
DIV
dzielenie
A/B
DIVA, B
SWAP
zamienia miejscami cztery starsze bity z
czterema młodszymi bitami
SWAP A
XCH
zamienia
zawartość
dwóch
argumentów
między sobą
XCH A, B
DA
poprawka dziesiętna
DA A
W mikrokontrolerze 8051 istnieje możliwość zapamiętywania danych na stosie. W tym celu
programista musi zarezerwować pewną część pamięci RAM. Obszar ten musi być obszarem
ciągłym i nie można wykorzystywać go do innych celów. Adres wierzchołka stosu jest
wskazywany przez rejestr SP umieszczony w obszarze rejestrów specjalnych. Po sygnale RESET
wskaźnik stosu w 8051 jest ustawiony na 7.
Wskaźnik stosu można przestawić na inny obszar w pamięci RAM np. rozkazem:
MOV SP, #60H.
Dane wpisywane są na stos przy pomocy instrukcji PUSH, a odczytywane ze stosu poprzez
rozkaz POP.
Politechnika Poznańska, Wydział Elektroniki i Telekomunikacji
Proste operacje arytmetyczne, stos mikrokontrolera 8051
_________________________________________________________________________________________________
3
Przebieg ćwiczenia
1.
Napisz program, który będzie dodawał dwie liczby. Liczby mają być wczytywane z
klawiatury (wykorzystaj podprogram WAIT_KEY) a wynik i znaki +, = powinny być
wyświetlane na wyświetlaczu LCD.
2.
Napisz program, który będzie realizował konwersję liczby binarnej mniejszej od 100 na
liczbę w kodzie BCD. Liczba binarna ma być wpisana do akumulatora a wynik
wyświetlony na wyświetlaczu LCD.
3.
Napisz program realizujący odejmowanie dwóch liczb jednobajtowych. Wynik
odejmowania ma być wyświetlany na wyświetlaczu.
4.
Napisz program realizujący mnożenie dwóch liczb binarnych jednobajtowych
umieszczonych w rejestrach A i B. Wynik mnożenia wyświetl na wyświetlaczu LCD.
5.
Napisz program, który będzie dodawał numery kolejno wciskanych klawiszy i wynik
wyświetlał na wyświetlaczu. Liczby powinny być przedstawione w kodzie BCD.
6.
Napisz program mnożący liczby reprezentowane w kodzie BCD.
7.
Napisz program, złożony z podprogramów, który będzie korzystał ze stosu. Niech
wyświetla liczbę zawartą w akumulatorze najpierw w formacie dziesiętnym a następnie w
postaci szesnastkowej wykorzystując do tego celu procedurę zamiany liczby binarnej
większej od 100 na liczbę w kodzie BCD.