Mikroprocesory, MIKROP3B, POLITECHNIKA LUBELSKA


POLITECHNIKA LUBELSKA

KATEDRA ELEKTRONIKI

LABORATORIUM PODSTAW SYSTEMÓW MIKROPROCESOROWYCH

SPRAWOZDANIE Z ĆWICZENIA NR. 3B

„OPERACJE ARYTMETYCZNE.”

Wykonali: Remigiusz Gwiazda ED 5.4

Paweł Luty ED 5.4

Cel ćwiczenia:

Celem ćwiczenia było zapoznanie się z ze sposobami wykonywania podstawowych operacji arytmetycznych oraz konwersji formatów stosowanych w mikroprocesorach rodziny 8051.

Zadanie 1.

W zadaniu został uruchomiony program dodający liczby zapisane w kodzie U2:

LJMP START

ORG 100H

START: LCALL LCD_CLR

CLR A

CLR C

SUBB A,#1

MOV R0,A

LCALL WRITE_HEX

MOV A,R0

ADD A,#1

LCALL WRITE_HEX

SJMP $

a) Modyfikacja powyższego programu polegająca na tym, że dodaje on liczbę -10 do wartośći pobranej z klawiatury:

LJMP START

ORG 100H

START:

LCALL LCD_CLR

LOOP:

CLR A ;zeruj A

CLR C ;zeruj C

SUBB A,#10 ;A <- 0-10 = -10

MOV R0,A ;zapamiętaj w R0

LCALL WAIT_KEY

ADD A,R0 ;dodaj liczbę z klawiatury do -10

LCALL WRITE_HEX ;wyświetl wynik

LJMP LOOP

Powyższy program najpierw zapisuje do akumulatora liczbe -10 poprzez odjecie liczby 10 od 0, a następnie po zachowaniu tej liczby w R0 dodaje ją do drugiej liczby pobranej z klawiatury. Wskaźnik C jest zerowany ponieważ instrukcja SUBB używa tego wskaźnika i gdyby był ustawiony to wynik odejmowania byłby zły.

b) Reprezentacja danych w postaci U2 umożliwia co prawda zapisywanie liczb ujemnych , ale ma swoje wady. Mianowicie poprzez zastosowanie tego zapisu zakres używanych liczb zmniejsza się dwukrotnie, np. jeżeli w naturalnym kodzie binarnym można zapisać na jednym bajcie liczbę z zakresu 0-255, to w kodzie U2 można zapisać liczbę z zakresu -128-127. Aby więc nie popełnić błędu podczas programowania należy pamiętać w jakiej postaci dane są zapisane tzn. jak ma traktować je dany program.

Zadanie 2.

Przeanalizowany został następujący program sumujący liczby w postaci BCD:

LJMP START

ORG 100H

START: LCALL LCD_CLR

LCALL WAIT_KEY

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R0,A

LCALL WRITE_HEX

MOV A,#'+'

LCALL WRITE_DATA

LCALL WAIT_KEY

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R1,A

LCALL WRITE_HEX

MOV A,#'=`

LCALL WRITE_DATA

MOV A,R0

ADD A,R1

DA A

LCALL WRITE_HEX

SJMP $

a) Podczas wykonywania programu rejestry po wykonywaniu instrukcji DIV w akumulatorze pojawia się wynik dzielenia ,a w rejestrze B reszta z dzielenia. Dla liczb 0-9 zawsze więc będzie to 0 w ACC, a w B wpisana liczba.Pozostałe instrukcje modyfikuja obydwa rejestry w sposób nie wymagający komentarza.

b) Modyfikacja programu polegająca na tym ,że program mnoży liczby w postaci BCD:

LJMP START

ORG 100H

START:

LCALL LCD_CLR

LCALL WAIT_KEY ;pobierz pierwszy czynnik

ACALL TOBCD ;zamień na BCD

MOV R0,A ;zapamiętaj w R0 (BCD)

LCALL WRITE_HEX ;wypisz na LCD

MOV A,#'*' ;znak mnożenia

LCALL WRITE_DATA ;wyświetl jako znak

LCALL WAIT_KEY ;pobierz drugi czynnik

ACALL TOBCD :zamień na BCD

MOV R1,A ;zapamiętaj w R1 (BCD)

LCALL WRITE_HEX ;wypisz na LCD

MOV A,#'=' ;znak równości

LCALL WRITE_DATA ;wyświetl jako znak

MOV A,R0 ;pierwszy czynnik do A

MOV B,R1 ;dodaj drugi czynnik

MUL AB ;mnóż

ACALL TOBCD ;zamień na BCD

LCALL WRITE_HEX ;wypisz wynik na LCD

LCALL WAIT_KEY

LJMP START

TOBCD: ;podprogram zamiany na BCD

MOV B,#10

DIV AB

SWAP A

ADD A,B

RET

Powyższ program działa w sposób bardzo podobny do poprzedniego przykładu. Pobiera obydwa czynniki z klawiatury i od razu zamienia je na kod BCD za pomocą podprogramu TOBCD. Podprogram ten ma strukturę taką samą jak część kodu w poprzednim przykładzie. W miedzyczasie obydwa czynniki są zapamiętywane w rejestrach, a na końcu wykonuje się ich mnożenie po czym znów zamienia się na BCD. Program działa tylko dla liczb 0-9 co jest zrozumiałe ,gdyż nie można zapisać w postaci BCD dwucyfrowej liczby na jednym półbajcie.

Zadanie 3.

Program dokonujący konwersji z BCD do BIN:

BCD EQU 20H ; komórka zawierająca daną w kodzie BCD

BIN EQU 21H ; komórka zawierająca daną w kodzie NB (wynik wykonania

; programu)

LJMP START

ORG 100H

START: LCALL LCD_CLR

MOV BCD,#00111001B ; przykładowo konwersja będzie dokonana na liczbie 39

MOV A,BCD

LCALL WRITE_HEX

MOV R0,#BCD ; do R0 adres komórki z daną wejsciową

MOV R1,#BIN ; do R1 adres komórki z daną wyjsciową

ACALL BCD2BIN ; zamień na postać binarną

MOV A,#'='

LCALL WRITE_DATA

MOV A,BIN

LCALL WRITE_HEX

SJMP $

BCD2BIN:

MOV @R1,#0 ; wyczyść komórkę BIN

MOV A,@R0 ; BCD do ACC

SWAP A ; zamień połówki

ANL A,#0FH ; wyzeruj mniej znaczącą cyfrę

JZ BCD2BIN1 ; jeśli starsza cyfra jest zerem to skocz dalej

MOV R2,A ; w R2 ilość powtórzeń

CLR C

BCD2BIN2:

MOV A,@R1 ; BIN do ACC

ADDC A,#10

MOV @R1,A ; wynik do BIN

DJNZ R2,BCD2BIN2 ; dodawaj 10 tyle razy ,ile wynosi starsza cyfra

BCD2BIN1:

MOV A,@R0 ;BCD do ACC

ANL A,#0FH ; wyzeruj starszą cyfrę

ADD A,@R1 ; dodaj do BIN

MOV @R1,A ; wynik do BIN

RET

Zasada działania programu jest bardzo prosta. Program pobiera daną w postaci BCD , a następnie wydziela z niej starszą cyfrę i sprawdza czy jest ona różna od 0. Jeśli tak to dodaje do siebie tyle razy liczbę 10 ile wynosi starsza cyfra danej wejściowej . Natomiast jeśli starsza cyfra jest zerem to program bezpośrednio zajmuje się tylko młodsza cyfrą i zapisuje ją do komórki BIN jako wynik.



Wyszukiwarka

Podobne podstrony:
Mikroprocesory, MIKROP10, POLITECHNIKA LUBELSKA
Mikroprocesory, MIKROPR3, POLITECHNIKA LUBELSKA
Mikroprocesory, 1,2', Politechnika Lubelska
Budowa mikroprocesora, Politechnika Lubelska, Studia, Semestr 6, sprawka 6 sem moje
Laboratorium budowy urządzeń mikrokomputerowych, Sprzęganie urządzeń zewnętrznych i peryferyjnych mi
Labolatorium komputerowych systemów automatyki, Regulatory mikroprocesorowe, Politechnika Lubelska
Labolatorium Urządzeń mikrokomputerowych, Badanie zasilacza ukł. mikroprocesor., Politechnika Lubel
Mikroprocesory, MIKROP4, POLITECHNIKA LUBELSKA
LAB6MICR, Politechnika Lubelska, Studia, semestr 5, Sem V, Sprawozdania, Elektryczny, MIKROPROCESORY
MICRO7~1, Politechnika Lubelska, Studia, semestr 5, Sem V, Sprawozdania, Elektryczny, MIKROPROCESORY
Mikroprocesory, Micro 3, Politechnika Lubelska
Mikroprocesory, moje9, POLITECHNIKA LUBELSKA
Mikroprocesory, Micro10, Politechnika Lubelska
Mikroprocesory, Micro10, Politechnika Lubelska
PROCES5, Politechnika Lubelska, Studia, semestr 5, Sem V, Sprawozdania, Elektryczny, MIKROPROCESORY
M7, Politechnika Lubelska, Studia, semestr 5, Sem V, Sprawozdania, Elektryczny, MIKROPROCESORY LABOL
Mikroprocki 1kl, Politechnika Lubelska, Studia, semestr 5, Sem V, Sprawozdania, Elektryczny, MIKROPR
PROC7, Politechnika Lubelska, Studia, semestr 5, Sem V, Sprawozdania, Elektryczny, MIKROPROCESORY LA
Badanie zasilacza ukł. mikroprocesor, Studia, sprawozdania, sprawozdania od cewki 2, Dok 2, Dok 2, P

więcej podobnych podstron