POLITECHNIKA LUBELSKA
WYDZIAŁ ELEKTRYCZNY
Nazwisko i imię studenta Janusz Buchoski Robert Czechoński
|
Symbol grupy ED. 5.3 |
||||||
Data wyk. Ćwiczenia
99.X.18 |
Numer ćwiczenia
3
|
Temat zadania : Pamięć wewnętrzna RAM. Organizacja i wykonanie stosu |
|||||
|
ZALICZENIE |
|
|
Ocena |
Data |
Podpis |
|
Cel ćwiczenia :
Celem ćwiczenia jest poznanie organizacji pamięci wewnętrznej RAM oraz sposobu organizacji i wykorzystania stosu mikrokontrolera 8051.
ZADANIE 1:
Stosując pracę krokową przy użyciu komputera wpisać wartość rejestru PSW oraz stan wyświetlacza LCD.
Bit |
PSW.7 |
PSW.6 |
PSW.5 |
PSW.4 |
PSW.3 |
PSW.2 |
PSW.1 |
PSW.0 |
LCD |
Flaga |
CY |
AC |
F0 |
RS1 |
RS0 |
OV |
--- |
P |
-- |
LCALL LCD_CLR |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
--- |
MOV A,#10H |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
--- |
LCALL WRITE_HEX |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
10 |
MOV ACC.#20H |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
10 |
LCALL WRITE_HEX |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1020 |
LJMP $ |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1020 |
ZADANIE 3:
W jaki sposób rozróżnia się adres akumulatora od adresu poszczególnych bitów.
Standardowo akumulator ma adres 0E0H. Dostęp do poszczególnych bitów akumulatora uzyskujemy dodając numer bitu do tego adresu. Np. bit 3 ma adres 0E0H+3H.
Adresując akumulator: MOV ACC,#20
A jego poszczególne bity: SETB ACC.3 dla bitu 3
ZADANIE 4:
Wykonaj przykład 3.3. stosując pracę krokową zaobserwować stan akumulatora, rejestru PSW oraz stan wyświetlacza LCD na przykładzie zawartości rejestru R7 w bankach 0,1,2,3.
Bit |
PSW.7 |
PSW.6 |
PSW.5 |
PSW.4 |
PSW.3 |
PSW.2 |
PSW.1 |
PSW.0 |
LCD |
A |
Flaga |
CY |
AC |
F0 |
RS1 |
RS0 |
OV |
--- |
P |
-- |
--- |
LCALL LCD_CLR |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
--- |
21 |
MOV A,R7 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
--- |
00 |
LCALL WRITE_HEX |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00 |
21 |
SETB RSO |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
00 |
21 |
MOV A.R7 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
00 |
01 |
LCALL WRITE_HEX |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0001 |
19 |
SETB RS1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0001 |
19 |
MOV A.R7 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0001 |
03 |
LCALL WRITE_HEX |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
000103 |
FF |
CLR RS0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
000103 |
FF |
MOV A.R7 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
000103 |
02 |
LCALL WRITE_HEX |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
00010302 |
00 |
Wpisz zawartość rejestrów R7 w poszczególnych bankach.
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Bank 1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Bank 1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Bank 2 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
Bank 3 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
ZADANIE 5:
Modyfikując przykład 4 wykorzystując adresowanie pośrednie zapełnić zawartością EEH wybraną przestrzeń adresową. Podać listing programu.
30H→7FH 8OH→FFH rejestry specjalne SFR
Przestrzeń adresowa dostępna bez ograniczeń dla użytkownika to komórki 30H→7FH.
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV R0,#30H
MOV R2,#79
LOOP:
MOV @R0,#EEH
INC R0
DJNZ R2,LOOP
LJMP $
Bit |
ACC |
PSW.7 |
PSW.6 |
PSW.5 |
PSW.4 |
PSW.3 |
PSW.2 |
PSW.1 |
PSW.0 |
SP |
STOS |
LCALL LCD_CLR |
21 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
07 |
00 |
MOV A,#137 |
89 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
07 |
00 |
ACALL WRITE_BCD_HEX |
|
|
|
|
|
|
|
|
|
|
|
PUSH PSW |
89 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0A |
01 |
PUSH B |
89 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0B |
00 |
PUSH ACC |
89 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0C |
89 |
ACALL BIN_BCD |
37 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0C |
89 |
XCH A,B |
01 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0C |
89 |
LCALL WRITE_HEX |
21 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0C |
89 |
MOV A,B |
37 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0C |
89 |
LCALL WRITE_HEX |
21 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0C |
89 |
MOV A,#'=' |
3D |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0C |
89 |
LCALL WRITE_DATA |
21 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0C |
89 |
POP ACC |
89 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0B |
00 |
PUSH ACC |
89 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0C |
89 |
LCALL WRITE_HEX |
21 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0C |
89 |
MOV A,#'H' |
48 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0C |
89 |
LCALL WRITE _DATA |
21 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0C |
89 |
POP ACC |
89 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0B |
00 |
POP B |
89 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0A |
01 |
POP PSW |
89 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
07 |
00 |
RET |
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
|
SJMP $ |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
|
ZADANIE 7:
Modyfikując przykład 4 wykorzystując adresowanie indeksowe dokonać zapełnienia obszaru pamięci wartością ABH - przeanalizować status wykorzystywanych zasobów (rejestrów) procesora, zamieścić listing programu.
LJMP START
ORG 100H
START
MOV A,#30#
MOV R0,#79
MOV DPTR,#0001H
LOOP
MOV @A,#ABH
MOV A, @A+DPTR
DJNZ R0,LOOP
LJMP $
3
3
LABORATORIUM TECHNIKI MIKROPROCESOROWEJ
3