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
_________________________________________________________________________________________________
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 1
Politechnika Poznańska, Wydział Elektroniki i Telekomunikacji
Proste operacje arytmetyczne, stos mikrokontrolera 8051
_________________________________________________________________________________________________
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 SWAP A
czterema młodszymi bitami
XCH
zamienia
zawartość
dwóch
argumentów
XCH A, B
między sobą
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.
2
Politechnika Poznańska, Wydział Elektroniki i Telekomunikacji
Proste operacje arytmetyczne, stos mikrokontrolera 8051
_________________________________________________________________________________________________
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.
3