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 $
***************************************************************************
Schemat blokowy algorytmu:
Wprowadź do rejestru R1
z ACC (-10)
Wczytaj liczbę z klawiatury
Dodaj do tej liczby
wartość z R1
Wynik wyprowadź na LCD
2)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
3)Samodzielne opracowanie programu
Program dokonujący konwersji liczby zapisanej w formacie spakowane BCD do postaci binarnej
Listing programu:
***************************************************************************
; ZAMIANA BCD-BIN
LJMP START
ORG 100H
START:
LCALL LCD_CLR
CLR A
CLR C
MOV A,#114 ;WPROWADŹ LICZBĘ 72DEC = 0111 0010BCD
MOV R0,A ;R0<-R0=A=72
MOV B,#10H ;
DIV AB ;OBLICZA CYFRĘ DZIESIĄTEK
MOV B,#10 ;DO B WPROWADŹ 10 DEC
MUL AB ;OBLICZA LICZBĘ DZIESIĄTEK
MOV R1,A ;R1<-R1=A=70
MOV A,R0
SWAP A ;WYZNACZAMY
MOV B,#10H ;CYFRĘ JEDNOŚCI
DIV AB
ADD A,R1 ;DODAJEMY LICZBE DZIESIĘTNĄ DO JEDNOŚCI
LCALL WRITE_HEX ;WYPROWADŹ NA LCD W POSTACI HEX.
SJMP $
***************************************************************************
Schemat blokowy programu:
Wprowadzamy liczbę 72
w postaci spakowanego BCD
Przeliczanie liczby dziesiątek
Przeliczanie liczby jedności
Zestawienie cyfry jedności
z cyfrą dziesiątek
poprzez zsumowanie ich
wartości
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:
przy liczbach 0..255:
dodawanie ADD, ADDC,
odejmowanie SUBB,
mnożenie MUL,
dzielenie DIV,
przy liczbach -128..127 w kodzie U2;
dodawanie ADD, ADDC,
- odejmowanie SUBB,
przy liczbach 0.. 99 w kodzie BCD:
- 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 LCDLC
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