Politechnika Lubelska
Sprawozdanie
Z laboratorium Podstaw techniki mikroprocesorowej
Tytuł ćwiczenia: Pamięć wewnętrzna RAM. Organizacja i wykorzystanie stosu.
Imię i nazwisko:
Nr ćwiczenia:C2
Grupa: Mechatronika
Rok akademicki 2014/15
Kod programu:
LJMP START
ORG 100H
START:
LCALL LCD_CLR ;wyczyść wyświetlacz LCD
MOV A,#10H ;wpisz liczbę do A
LCALL WRITE_HEX ;podprogram systemuDSM-51
;liczba z akumulatora
;na wyświetlacz LCD
MOV ACC,#20H ;wpisz liczbę do ACC
LCALL WRITE_HEX ;akumulator na LCD
LJMP $
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 | - |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 102 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 102 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1020 |
Kod programu:
Na wyświetlaczu LCD: 35, po zmianie na poniższy kod na LCD: 36.
LJMP START
ORG 100H
START:
LCALL LCD_CLR ;wyczyść wyświetlacz LCD
MOV A,#30H ;wpisz liczbę do A
LCALL WRITE_HEX ;podprogram systemuDSM-51
;liczba z akumulatora
;na wyświetlacz LCD
SETB ACC.2
SETB ACC.2
MOV ACC,#20H ;wpisz liczbę do ACC
LCALL WRITE_HEX ;akumulator na LCD
LJMP $
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 | - |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | - | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 3 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 3 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 3 | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 34 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 34 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 34 |
W mikrokontrolerach '51 akumulator dostępny jest jako rejestr specjalny w instrukcjach arytmetyczno-logicznych i ma oznaczenie A, lub jako komórka o jakimś adresie w obszarze pamięci RAM (blok rejestrów specjalnych SFR) dostępna w trybie adresacji bezpośredniej, która ma oznaczenie ACC. Ponadto można uzyskać dostęp do poszczególnych bitów w operacjach bitowych, które mają własne adresy o oznaczeniu od ACC.0 do ACC.7.
Kod programu:
Na wyświetlaczu LCD: 00010302
B0R7 EQU 7 ;rejestr R7 z banku 0
B1R7 EQU 8+7 ;rejestr R7 z banku 1
B2R7 EQU 10H+7 ;rejestr R7 z banku 2
B3R7 EQU 18H+7 ;rejestr R7 z banku 3
LJMP START
ORG 100H
START:
MOV B0R7,#0 ;wpisz numer banku
MOV B1R7,#1 ;do rejestru R7
MOV B2R7,#2
MOV B3R7,#3
LCALL LCD_CLR ;wyczyść wyświetlacz LCD
;bank 0
MOV A,R7 ;A <- R7=0
LCALL WRITE_HEX ;akumulator na LCD
SETB RS0 ;bank 1
MOV A,R7 ;A <- R7=1
LCALL WRITE_HEX
SETB RS1 ;bank 3
MOV A,R7 ;A <- R7=3
LCALL WRITE_HEX
CLR RS0 ;bank 2
MOV A,R7 ;A <- R7=2
LCALL WRITE_HEX
LJMP $
Bit | ACC | 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 | - |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
21 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | - | |
00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
0F | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
21 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
21 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
30 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - | |
01 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | |
02 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 00 | |
21 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 00 | |
19 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 00 | |
03 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 000 |
Kod programu:
LJMP START
ORG 100H
START:
LCALL LCD_CLR ;wyczyść wyświetlacz LCD
MOV R0,#55H ;do R0 wpisz liczbę 55H
;która będzie adresem
MOV @R0,#0EEH ;wpisz liczbę EEH pod adres
;umieszczony w R0
MOV A,#55H ;wpisz liczbę do ACC
LCALL WRITE_HEX ;akumulator na wyświetlacz LCD (wyświetli "EE")
LJMP $
Na wyświetlaczu nastąpiła zmiana z 5500 na 55EE
Kod programu
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV 21H,#0 ;zeruj komórkę 21H
;(21H) <- 0
MOV A,21H ;A <- (21H)=3
LCALL WRITE_HEX
SETB 21H.0 ;ustaw bit 0 komórki 21H
SETB 9 ;ustaw bit 1 komórki 21H
MOV A,21H ;A <- (21H)=3
LCALL WRITE_HEX
LJMP $
Kod programu:
LJMP START
ORG 100H
START:
LCALL LCD_CLR
MOV A,#'D' ;wpisz do A kod litery D
PUSH ACC ;przechowaj akumulator na stosie
LCALL WRITE_DATA ;wyświetl jako znak
;czyli litera D
MOV A,#'=' ;wpisz znak równości
LCALL WRITE_DATA
POP ACC ;pobierz wartość ze stosu
;do akumulatora
LCALL WRITE_HEX ;wyświetl jako liczbę
;- kod litery D = 44H
SJMP $
Na wyświetlaczu LCD: D=44