4668


Laboratorium Podstaw Systemów Mikroprocesorowych

Nazwisko i imię wykonawców:

Czuryło Paweł ,Banach Tomasz

Symbol grupy

ED. 5.1

Data wyk. ćwiczenia

1999.10.18

Symbol ćwiczenia

3b

Temat zadania

Operacje arytmetyczne.

ZALICZENIE

Ocena

Data

Podpis

1. Cel ćwiczenia.

Celem ćwiczenia jest zapoznanie się ze sposobem wykonywania podstawowych operacji arytmetycznych na liczbach jednobajtowych oraz metod konwersji formatów stosowanych do reprezentacji danych.

2. Wykonanie ćwiczenia:

1) Dodawanie liczb zapisanych w kodzie U2.

Analizowany program:

***************************************************************

;LEKCJA 3b - OPERACJE ARYTMETYCZNE

;PRZYKŁAD 1 - LICZBY UJEMNE U2

LJMP START

ORG 100H

START:

LCALL LCD_CLR

CLR A ;zeruj A

CLR C ;zeruj C

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

MOV R0,A ;zapamiętaj w R0

LCALL WRITE_HEX

MOV A,R0 ;A <- R0=-1

ADD A,#1 ;A <- A+1 = -1+1 = 0

LCALL WRITE_HEX

SJMP $

***************************************************************************

Program zmodyfikowany:

***************************************************************************

START:

CLR A ;zeruj A

CLR C ;zeruj C

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

MOV R1,A ;zapamiętaj w R1

LCALL WRITE_HEX

LCALL WAIT_KEY ;wczytaj z klawiatury

ADD A,R1 ;A <- A+10 =-10+key

LCALL WRITE_HEX

SJMP $

***************************************************************************

0x08 graphic
Schemat blokowy algorytmu:

Wprowadź do rejestru R1

0x08 graphic
z ACC (-10)

0x08 graphic

0x08 graphic
Wczytaj liczbę z klawiatury

0x08 graphic

Dodaj do tej liczby

0x08 graphic
wartość z R1

0x08 graphic

Wynik wyprowadź na LCD

3)Mnożenie liczb w postaci BCD

1 ;************************************************

2 ;LEKCJA 3b - OPERACJE ARYTMETYCZNE

3 ;PRZYKťAD - MNOŻENIE LICZB W FORMACIE BCD

4 ;************************************************

5

6 0000: 02 01 00 LJMP START

7 0100: ORG 100H

8 0100: START:

9

10 0100: 12 81 0C LCALL LCD_CLR

11

12 0103: 12 81 1C LCALL WAIT_KEY ;pobierz pierwszy czynnik

13 0106: F8 MOV R0,A

14 0107: 12 81 04 LCALL WRITE_HEX ;wyświetl go na LCD

15 010A: 74 2A MOV A,#'*'

16 010C: 12 81 02 LCALL WRITE_DATA

17 010F: 12 81 1C LCALL WAIT_KEY ;pobierz drugi czynnik

18 0112: F9 MOV R1,A

19 0113: 12 81 04 LCALL WRITE_HEX

20 0116: 74 3D MOV A,#'='

21 0118: 12 81 02 LCALL WRITE_DATA

22 011B: E8 MOV A,R0

23 011C: 89 F0 MOV B,R1

24 011E: A4 MUL AB ;mnożenie rejestrów A i B

25

26 011F: 75 F0 0A MOV B,#10

27 0122: 84 DIV AB ;dzielenie A przez B(10)

28 ;wynik dzielenia w A

29 ;reszta z dzielenia w B

30 0123: C4 SWAP A ;zamień pół bajty

31 0124: 25 F0 ADD A,B dodaj liczbę jednostek

32 0126: D4 DA A

33 0127: 12 81 04 LCALL WRITE_HEX

34 012A: 02 01 2A LJMP $

Algorytm programu

0x08 graphic

Inna wersja programu w której wprowadzane czynniki od razu zamieniane są na postać BCD.

***************************************************************************

;LEKCJA 3b - OPERACJE ARYTMETYCZNE

; MNOŻENIE

LJMP START

ORG 100H

START:

LCALL LCD_CLR

LCALL WAIT_KEY ;pobierz pierwszy czynnik

MOV B,#10 ;zamień liczbę na BCD

DIV AB ;dzieląc przez 10

SWAP A

ADD A,B

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

MOV B,#10 ;zamień liczbą na BCD

DIV AB ;dzieląc przez 10

SWAP A

ADD A,B

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 ;mnożenia A*B

;starsza część wyniku w B

;młodsza część wyniku w A

XCH A,B

LCALL WRITE_HEX ;wypisz starszą część

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

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

SJMP $

***************************************************************************

3. Wnioski.

Rozkazy mnożenia i dzielenia są prawidłowo wykonywane tylko dla liczb binarnych. Użycie tych rozkazów dla liczb w kodzie uzupełnienia do 2 lub w BCD daje błędne wyniki.

Podsumowując, należy zauważyć, że mikrokontroler pozwala na bezpośrednią realizację następujących działań na liczbach jednobajtowych:

- odejmowanie SUBB,

- dodawanie ADD, ADDC + rozkaz korekcji dziesiętnej DAA.

Pobierz 1 czynnik

Pokaż na LCD

Wprowadź go do rejestru R0

Pobierz 2 czynnik

Pokaż na LCD LCDLC0x01 graphic
D

Wprowadź go do R1

Wprowadź R0 do akumulatora

Wprowadź R1 do rejestru B

Pomnóż A i B

Zamiana półbajtów akumulatora

Dodaj A i B

Wyświetl wynik na LCD



Wyszukiwarka

Podobne podstrony:
032 Mostek Wheatstone'a ćwiczenieid 4668
4668
4668
4668
praca-licencjacka-b7-4668, Dokumenty(8)
4668
4668
4668
4668
032 Mostek Wheatstone'a ćwiczenieid 4668
4668

więcej podobnych podstron