6382


Politechnika Lubelska

Laboratorium podstaw systemów mikroprocesorowych

w Lublinie

Ćwiczenie nr 3

Józwik Tomasz

Krzysztof Kadłubowski

Semestr

V

Grupa

ED 5.3

Rok akademicki

1997/98

Temat ćwiczenia:

Operacje arytmetyczne

Data wykonania

7.11.97

Ocena:

Cel ćwiczenia : Zapoznanie się z podstawowymi operacjami arytmetycznymi

wykorzystywanymi w systemie DSM51.

Modyfikacja programu dodawania liczb zapisanych w kodzie uzupełnienia do 2.

;************************************************

;LEKCJA 3B - PROSTE OPERACJE ARYTMETYCZNE

;PRZYKťAD 1 - LICZBY UJEMNE U2

;************************************************

LJMP START

ORG 100H

START:

LCALL LCD_CLR

CLR A ; zerowanie akumulatora

CLR C ; zerowanie flagi C

LCALL WAIT_KEY ; pobierz liczbę z klawiatury

MOV R0,A ; zapamiętaj w R0

MOV A,#10 ; zapisz do akumulatora liczbę 10

XCH A,R0 ; zamień argumenty A i R0

CLR C ; wyzeruj flagę C

SUBB A,R0 ; odejmij liczbę 10 od akumulatora

LCALL WRITE_HEX ; wyświetl wynik w postaci HEX

SJMP $

Program powyższy dodaje liczbę -10 do liczby pobranej z klawiatury, wynik wyświetlany jest w postaci szesnastkowej.

Ograniczenia stosowania U2 to przede wszystkim to że liczby zapisane w jednym bajcie mogą być z zakresu -128...+127 . Ograniczeniem jest również możliwość tylko dodawania i odejmowania liczb w tej postaci. Jeśli wynik dodawania przekracza zakres -128...+127 to ósmy bit ustawiany jest na 1 co w kodzie U2 oznacza że mamy do czynienia z liczbą ujemną co jest błędem . By ustrzec się takich błędów istnieje w mikrokontrolerze specjalna flaga przepełnienia OV, która sygnalizuje wystąpienie tego typu procesów i którą należy kontrolować po każdej operacji odejmowania bądź dodawania.

Modyfikacja programu sumowania liczb w postaci BCD tak by program dokonywał mnożenia liczb w postaci BCD a powtarzające się sekwencje instrukcji umieszczone zostały w podprogramach.

;************************************************

; PROSTE OPERACJE ARYTMETYCZNE

; MNOŻENIE BCD

;************************************************

LJMP START

ORG 100H

START:

LCALL LCD_CLR

LCALL WAIT_KEY ; pobierz pierwszy czynnik

MOV R0,A ; zapisz w R0

ACALL HEX_BCD

MOV A,#'*'

LCALL WRITE_DATA ; wyświetl jako znak

LCALL WAIT_KEY ; pobierz drugi czynnik

MOV R1,A ; zapamiętaj w R1

ACALL HEX_BCD

MOV A,#'='

LCALL WRITE_DATA ; wyświetl jako znak

MOV A,R0 ; pierwszy czynnik do A

MOV B,R1 ; drugi czynnik do B

MUL AB ; wymnożenie A*B

XCH A,B ; zamiana A i B

LCALL WRITE_HEX ; wypisz starszą część wyniku na LCD

MOV A,B ; zapisz młodszą część do A

LCALL WRITE_HEX ; wypisz młodszą część wyniku na LCD

SJMP $

; Podprogram zamieniający liczby z postaci HEX na BCD

HEX_BCD:

MOV B,#100 ; liczba 100 do B

DIV A,B ; dzielenie liczby w A przez 100

JZ SKOK ; skocz jeśli nie ma setek

LCALL WRITE_HEX ; wypisz jeśli są w postaci BCD

SKOK:

MOV A,B ; reszta z dzielenia do A

MOV B,#10 ; liczba 10 do B

DIV AB ; podziel A przez 10

SWAP A ; zamień młodszą część bajtu ze starszym

ORL A,B ; dodaj dziesiątki i jednostki

LCALL WRITE_HEX ; wypisz dziesiątki i jednostki na LCD

RET

Powyższy program mnoży dwie liczby pobrane z klawiatury, wypisuje całe działanie na LCD - mnożna i mnożnik w postaci BCD, wynik w postaci szesnastkowej niestety.

Podprogram dokonujący zamiany liczby w formacie spakowane BCD znajdującej się w rejestrze R0 na postać binarną.

BCD_BIN:

MOV A,R0 ; zapisanie liczby do akumulatora

ANL A,#11110000b ; wyzerowanie młodszej cz. bajtu

SWAP A ; zamiana części bajtu

MOV B,#10

MUL AB ; wymnożenie pierwszej liczby przez 10

XCH A,B ; przechowanie wyniku w B

MOV A,R0 ; ponowne zapisanie liczby do acc.

ANL A,#00001111b ; wyzerowanie starszej części bajtu

ADD A,B ; dodanie obu wyników

MOV R0,A ; zapisanie ponownie do R0

RET



Wyszukiwarka

Podobne podstrony:
6382
6382
praca-magisterska-6382, Dokumenty(8)
6382
6382
CERBERUS P 6382 1 Manual EN
6382
6382
CERBERUS P 6382 1 Manual PL
6382
akumulator do mercedes benz v classe 6382 200 cdi 220 cdi
akumulator do mercedes benz v classe 6382 200 230 280
akumulator do mercedes benz v classe 6382 230 td

więcej podobnych podstron