Sprawozdanie Asambler
Jacek Hrynowiecki
Program klawiatura:
NAME klawiatura1
SPR0: MOV C,P0.0 ;Wpisanie do znacznika przeniesienia wartości jednobitowej z portu P0 bitu zerowego.
JC SPR1 ;Skok do etykiety SPR0 programu jeśli znacznik jest ustawiony (wartość 1)
MOV P2,#cyfra0 ;Wypisanie na porcie P2 wartości zadeklarowanej pod etykietą cyfra0
SPR1: MOV C,P0.1 ;Wpisanie do znacznika przeniesienia wartości jednobitowej z portu P0 bitu pierwszego.
JC SPR2 ;Skok do etykiety SPR1 programu jeśli znacznik jest ustawiony (war. 1)
MOV P2,#cyfra1 ;Wypisanie na porcie P2 wartości zadeklarowanej pod etykietą cyfra 1
SPR2: MOV C,P0.2 ;Wpisanie do znacznika przeniesienia wartości jednobitowej z portu P0 bitu drugiego.
JC SPR3 ;Skok do etykiety SPR1 programu jeśli znacznik jest ustawiony (war. 1)
MOV P2,#cyfra2 ;Wypisanie na porcie P2 wartości zadeklarowanej pod etykietą cyfra 2
SPR3: MOV C,P0.3 ;Wpisanie do znacznika przeniesienia wartości jednobitowej z portu P0 bitu trzeciego.
JC SPR4 ;Skok do etykiety SPR1 programu jeśli znacznik jest ustawiony (war. 1)
MOV P2,#cyfra3 ;Wypisanie na porcie P2 wartości zadeklarowanej pod etykietą cyfra 3
SPR4: MOV C,P0.4 ;Wpisanie do znacznika przeniesienia wartości jednobitowej z portu P0 bitu czwartego.
JC SPR5 ;Skok do etykiety SPR1 programu jeśli znacznik jest ustawiony (war. 1)
MOV P2,#cyfra4 ;Wypisanie na porcie P2 wartości zadeklarowanej pod etykietą cyfra 4
SPR5: MOV C,P0.5 ;Wpisanie do znacznika przeniesienia wartości jednobitowej z portu P0 bitu piątego.
JC SPR6 ;Skok do etykiety SPR1 programu jeśli znacznik jest ustawiony (war. 1)
MOV P2,#cyfra5 ;Wypisanie na porcie P2 wartości zadeklarowanej pod etykietą cyfra 5
SPR6: MOV C,P0.6 ;Wpisanie do znacznika przeniesienia wartości jednobitowej z portu P0 bitu szóstego.
JC SPR7 ;Skok do etykiety SPR1 programu jeśli znacznik jest ustawiony (war. 1)
MOV P2,#cyfra6 ;Wypisanie na porcie P2 wartości zadeklarowanej pod etykietą cyfra6
SPR7: MOV C,P0.7 ;Wpisanie do znacznika przeniesienia wartości jednobitowej z portu P0 bitu siódmego.
JC SPR0 ;Skok do etykiety SPR1 programu jeśli znacznik jest ustawiony (war. 1)
MOV P2,#cyfra7 ;Wypisanie na porcie P2 wartości zadeklarowanej pod etykietą cyfra 7
cyfra0 equ 0C0h ;Deklaracja stałej cyfra 0 o wartości 0C0H
cyfra1 equ 0F9h ;Deklaracja stałej cyfra 1 o wartości 0F9H
cyfra2 equ 0A4h ;Deklaracja stałej cyfra 2 o wartości 0A4H
cyfra3 equ 0B0h ;Deklaracja stałej cyfra 3 o wartości 0B0H
cyfra4 equ 099h ;Deklaracja stałej cyfra 4 o wartości 099H
cyfra5 equ 0921h ;Deklaracja stałej cyfra 5 o wartości 0921H
cyfra6 equ 082h ;Deklaracja stałej cyfra 6 o wartości 082H
cyfra7 equ 0F8h ;Deklaracja stałej cyfra 7 o wartości 0F8H
end ;Zakończenie programu
Program przerwania:
ORG 0 ;Zarezerwowanie X komórki pamięci
SJMP POCZ ;
ORG 0Bh ;Rezerwuje pamięć do komórki 0BH
PUSH ACC ;Odłożenie na stos 8 bitowego akumulatora
PUSH PSW ;Odłożenie na stos rejestru słowa ośmiobitowego
DJNZ R0,WPISZ ;Porównanie - zminejsz wartość o jeden pierwszego argumentu i skocz jeśli w
rejestrze R0 jest wartość różna od zera kodu programu pod etykietą WPISZ
MOV TH0,#0FFh ;Wczytanie do bardziej znaczącej części licznika T0 liczby 0FFH
MOV ACC,P2 ;Wstawienie do akumulatora wartości z portu P2
MOV TL0,ACC ;Wstawienie wartości akumulatora do mniej znaczącej części licznika T0
SETB P3.1 ;Ustawienie bitu pierwszego na porcie P3 poprzez wstawienie 1.
MOV R0,#TIME ;Wpisanie do rejestru R0 wewnętrznej pamięci RAM mikrokontrolera
SJMP DALEJ ;Skok do kodu z pod etykiety Dalej
WPISZ: MOV TH0,#0FFh ;Wczytanie do bardziej znaczącej części licznika T0 liczby 0FFH
MOV ACC,P1 ;Załadowanie do rejestru A wartości z portu P1
MOV TL0,ACC ;Załadowanie do mniej znaczących 4 bitów licznika T0 rejestru A
CLR P3.1 ;Zerowanie bitu pierwszego, portu P3
DALEJ: POP PSW ;Zdjęcie ze stosu wartości rejestru PSW
POP ACC ;Zdjęcie ze stosu wartości rejestru akumulatora
RETI ;Powrót z podprogramu obsługi przerwania, rozkaz ten ponadto powoduje
przepisanie dwóch bajtów ze szczytu stosu do rejestru rozkazów PC.
POCZ: MOV TMOD,#1h ;Wpisanie wartości 1H do rejestru TMOD
MOV TH0,#0ffh ;Wczytanie do bardziej znaczących 8 bitów licznika T0 liczby 0FFH
MOV TL0,#WART_A ;Wczytanie do mniej znaczących 8 bitów licznika T0 liczby pod etykietą
WART_A
SETB TR0 ;Ustawienie znacznika TR0 w celu odblokowania licznika T0
MOV R0,#TIME ;Wpisanie do rejestru R0 (wykorzystywanym przy adresowaniu pośrednim)
wartości 02H
SETB EA ;Wstawienie do EA bitu o wartości 1
SETB ET0 ;Wstawienie do ET0 bitu o wartości 1
SJMP $ ;Skok do końca programu
WART_A EQU 256-20 ;Przypisanie wartości 256-20 symbolowi WART_A, w programie odwołanie
do wartości tegoż symbolu zostanie wykonane poprzez podanie jego nazwy.
WART_L EQU 256-30 ;Przypisanie wartości 256-30 symbolowi WART_L
TIME EQU 02H ;Przypisanie wartości 02H symbolowi TIME
END ;Zakończenie pogramu
Znaczniki
NAME cwicz2
CSEG AT 0 ;określa od której komórki pamięci zaczyna się kod programu
MOV A, #WAR1 ;Wpisanie do akumulatora liczby z pod etykiety WAR1
ADD A, #WAR2 ;Dodanie dwóch wartości z tym że wynik zostaje przypisany do pierwszej (do
rejestru A)
MOV A, #ABCD1 ; Wpisanie do rejestru A liczby 22H
ADD A, #ABCD2 ; Dodanie do wartości 22H liczby z pod etykiety ABCD2 i umieszczenie wyniku
w akumulatorze
DA A ;Korekcja dziesiętna liczb zapisanych w BCD
SETB C ;Ustawia znacznik przeniesienia (wartością 1)
MOV A, #DANA ;Wpisanie do akumulatora wartości z pod etykiety DANA
RLC A ;Przesunięcie w lewo wartości akumulatora
RRC A ;Przesunięcie w prawo wartości akumulatora
MOV A, #ABCD1 ;Wpisanie do rejestru A wartości z pod etykiety ABCD1
ADD A, #ABCD2 ;Ponowne dodanie liczby 88H do 22H i umieszczenie wyniku w pierwszym
operandzie
DA A ;Korekcja dziesiętna liczb zapisanych w ABCD
MOV B, #WAR1 ;Kopiowanie liczby etykietowanej WAR1 do rejestru B
MOV A, #WAR2 ; Kopiowanie liczby etykietowanej WAR2 do rejestru akumulatora
MUL AB ; Wymnożenie dwóch stałych A*B-> BA czyli po wymnożeniu liczb zapisane
wynik mniej znaczących bitów zapisywany jest w rejestrze A, za to bardziej
znaczących bitów w B, znacznik przeniesienia C i parzystości P wynoszą 0.
POWT:
CLR A ;Ustawienie bitu ACC na wartość 0
MOVC A,@A+DPTR ;Wstaw do rejestru A wartość 8-bitowego rejestru A i wskaźnikowego
rejestru danych
JNB P,BEZPAR ;Jeśli bit znacznika P wynosi 0 to skocz do programu pod etykietą BEZPAR
ORL A,#80H ;Suma logiczna wartości 80H i wartości ACC, wynik umieszczany jest w
pierwszym operandzie czyli w akumulatorze.
BEZPAR:
INC DPTR ;Zwiększ wskaźnikowy rejestr danych o 1
MOV @R1,A ;Wstaw wartość akumulatora do wartości rejestru R1
INC R1 ;Zwiększ rejestr R1 o 1
DJNZ R0, POWT ;Jeśli wartość rejestru R0 jest różna od 0 to skok do kodu o etykiecie POWT
SJMP $ ;Skok do końca programu
TXT: DB 'PPROGRAM TESTOWY' ;Deklaracja zmiennej
KASA EQU 16 ;Przypisanie wartości 16 symbolowi KASA
WAR1 EQU 68 ;Przypisanie wartości 68 symbolowi WAR1
WAR1 EQU 199 ;Przypisanie wartości 199 symbolowi WAR2
ABCD1 EQU 22H ;Przypisanie wartości 22H symbolowi ABCD1
ABCD2 EQU 88H ;Przypisanie wartości 88H symbolowi ABCD2
DANA EQU 0A5H ;Przypisanie wartości 0A5H symbolowi DANA
END ;Zakończenie program