Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Отчет по лабораторной работе по курсу Микропроцессорные системы АРИФМЕТИЧЕСКАЯ ОБРАБОТКА ДАННЫХ

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

«Московский государственный технический университет имени Н.Э. Баумана»

(МГТУ им. Н.Э. Баумана)

Факультет «Информатика и системы управления»

Кафедра «Компьютерные системы и сети»

Отчет по лабораторной работе

по курсу «Микропроцессорные системы»

АРИФМЕТИЧЕСКАЯ ОБРАБОТКА ДАННЫХ

Исполнители

студ. гр. ИУ 6-71 ___________ М.И. Жильников

студ. гр. ИУ 6-71 ___________ В.Э. Подольский

Преподаватель

___________ В.Я. Хартов

2011

Цель работы – изучение способов представления числовых данных в микроконтроллерах, алгоритмов арифметических операций, программирование арифметических процедур.

Практическая часть.

Задание 1:

Выполнить операцию сложения двоичных чисел, задавая слагаемые А и В числами без знака, затем числами со знаком. В последнем случае ввод отрицательных чисел выполнить в дополнительном коде.

Результат вычислений приведен в таблице 1.

Таблица 1 – Таблица результатов операции сложения

А10

А2

В10

В2

R10

R2

Признаки:

H  S  V N Z C

122

01111010

64

01000000

186

10111010

0  0  1 1  0  0

+105

01101001

+106

01101010

-45

11010011

1  0  1 1  0  0

-118

10001010

+112

01110000

-6

11111010

0  1  0 1  0  0

-42

11010110

+120

01111000

+78

01001110

0  0  0 0  0  1

-90

10100110

-32

11100000

-122

10000110

0  1  0 1  0  1

Для отображения признаков результата используются флаги :

C – перенос при сложении (заем при вычитании), Z – признак нулевого результата,

N – знак результата при операциях с числами со знаком, V – переполнение разрядной сетки, S=NV – знак результата вне зависимости от переполнения, H  – межтетрадный перенос (заем).

122 01111010

64 01000000 C=0, Z=0, N=1, V=P6P7=1, S=N+V=0, H=0

186 10111010 (флаги N и V учитываются для операций со знаками)

+105  01101001

+106 01101010 C=0, Z=0, N=1, V=P6P7=1, S=N+V=0, H=1

-45 11010011

-118  10001010

+112 01110000 C=0, Z=0, N=1, V=P6P7=0, S=N+V=1, H=0

-6 11111010

-42  11010110

+120 01111000 C=1, Z=0, N=0, V=P6P7=0, S=N+V=0, H=0

+78 01001110

-90  10100110

-32 11100000 C=1, Z=0, N=1, V=P6P7=0, S=N+V=1, H=0

-122 10000110

Задание 2:

Выполнить операцию вычитания двоичных чисел, задавая слагаемые А и В числами без знака, затем числами со знаком. В последнем случае ввод отрицательных чисел выполнить в дополнительном коде.

Результат вычислений приведен в таблице 2.

Таблица 2 – Таблица результатов операции вычитания

А10

А2

В10

В2

R10

R2

Признаки:

H  S  V N Z C

122

01111010

64

01000000

58

00111010

0  0  0 0  0  0

+105

01101001

+106

01101010

-1

11111111

1  1  0 1  0  1

-118

10001010

+112

01110000

+26

00011010

0  1  1 0  0  0

-42

11010110

+120

01111000

+94

01011110

1  1  1 0  0  0

-90

10100110

-32

11100000

-58

11000110

0  1  0 1  0  1

Для отображения признаков результата используются флаги :

C – перенос при сложении (заем при вычитании), Z – признак нулевого результата,

N – знак результата при операциях с числами со знаком, V – переполнение разрядной сетки, S=NV – знак результата вне зависимости от переполнения, H  – межтетрадный перенос (заем).

C=0, Z=0, N=0, V=P6P7=0, S=N+V=0, H=0

(флаги N и V учитываются для операций со знаками)

C=1, Z=0, N=1, V=P6P7=0, S=N+V=1, H=1

C=0, Z=0, N=0, V=P6P7=1, S=N+V=1, H=0

C=0, Z=0, N=0, V=P6P7=1, S=N+V=1, H=1

C=1, Z=0, N=1, V=P6P7=0, S=N+V=1, H=0

Задание 3:

Выполнить ряд примеров умножения 8-разрядных двоичных чисел

Результат вычислений приведен в таблице 3.

Таблица 3 - Таблица результатов операции умножения

А10

А2

В10

В2

RH

RL

0

00000000

8

00001000

00000000

00000000

120

01111000

10

00001010

00000100

10110000

127

01111111

127

01111111

00111111

00000001

255

11111111

255

11111111

11111110

00000001

Задание 4:

Выполнить деление чисел с восстановлением остатка при условии, что делитель больше 0 и его значение не вызовет переполнения. Результат вычислений приведен в таблице 4.

Таблица 4 - Таблица результатов операции деление

А10

АH

AL

В10

B2

Частное

Остаток

100

00000000

01100100

50

00110010

00000010

00000000

30

00000000

00011110

0

00000000

11111111

00011110

0

00000000

00000000

32

00100000

00000000

00000000


Задание 5:

Изменить программу деления, включив в нее проверку делителя на 0 и проверку на переполнение. Для обоих случаев прекратить деление, индицируя аномальный случай включением/выключением всех светодиодов.

Ниже представлен текст измененной программы :

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

;Программа эмуляции арифметического устройства

;SW0 – установка/сброс 0-ого бита

;SW1 – установка/сброс 1-ого бита

;SW2 – установка/сброс 2-ого бита

;SW3 – установка/сброс 3-ого бита

;SW4 - обмен местами младшей и старшей тетрады

;SW5 - запись кода операции, 2-х (а при делении 3-х) байтов операндов   

;и выполнение операции при третьем нажатии кнопки (или 4-ом при делении)

;SW6 - показ байта суммы или разности, или младшей части произведения,

;   или частного при делении

;SW7 - показ байта  признаков результата сложения или вычитания,

;   или старшего байта произведения, или остатка при делении

;Соединения шлейфами: порт PB-LED, порт PD-SW

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

;.include "8515def.inc" ;файл определений для AT90S8515

.include "m8515def.inc" ;файл определений для ATmega8515

.def temp = r16   ;временный регистр

.def sw_cod = r17  ; код состояния замкнутой кнопки

.def operand = r18  ;операнд

.def count = r22   ;счётчик  ввода

.def count_bit = r23  ;счетчик циклов умножения (деления)

.def cop = r24   ;код операции

.def semafor = r25

.def op_A = r1   ;операнд А

.def op_B = r2   ;операнд В

.def op_AH = r3   ;старший байт делимого

.def mul_l = r4   ;младший байт произведения

.def mul_h = r5   ;старший байт произведения

.def res = r6   ;частное

.def show1 = r19   ;1-й выводимый байт результата

.def show2 = r20   ;2-й выводимый байт

;***Выводы порта PD***

.equ SW_SWAP = 4   ;кнопка обмена

.equ SW_WR = 5   ;кнопка записи операндов

.equ SW6 = 6   ;кнопки просмотра результатов

.equ SW7 = 7  

.macro  test_sw     

sbic PIND, @0  ;проверка кнопки SWx(x=0,1,2,3)

rjmp quit   ; и установка

 bld sw_cod, @0  ; бита замкнутой кнопки

 eor operand, sw_cod ;переключение бита

 com operand  ;инвертирование для вывода

 out PORTB,operand ; на СД

com operand  ;инвертирование

clr sw_cod   ;очистка кода кнопки

 rcall DELAY  ;задержка

wait: sbis PIND, @0

rjmp wait

quit: nop

.endmacro ;test_sw

.macro  test_show

sbic PIND, @0  ;проверка кнопки

rjmp quit   ;  SW6(SW7)

com @1   

out PORTB, @1  ;вывод на СД

com @1   

rcall DELAY  ;задержка

wait: sbis PIND, @0

rjmp wait

quit: nop

.endmacro ;test_show

.org $000

 rjmp init

;***Инициализация***

INIT:  ldi temp,low(RAMEND) ;установка

 out SPL,temp  ; указателя стека

 ldi temp,high(RAMEND) ; на последнюю

 out SPH,temp  ; ячейку ОЗУ

 ser temp   ;настройка

 out DDRB,temp  ; порта PB

 out PORTB,temp   ;  на вывод

 clr temp   ;настройка

 out DDRD,temp  ; порта PD

 ser temp   ; на

 out PORTD,temp  ; ввод

 clr sw_cod   ;очистка кода кнопки

 clr operand  ;очистка операнда

 set    ;SREG.Т=1

 ldi semafor,1

 ser count   ;count=0xff - для обхода подпрограммы oper  

LOOP:  test_sw 0   ;опрос кнопок 0,1,2,3

 test_sw 1

 test_sw 2    

 test_sw 3

 rcall test_SWAP  ;опрос кнопки обмена тетрадами

 rcall test_WR  ;опрос кнопки записи

 cpi count,0  ;условие перехода к обработке операндов

 brne SW_SHOW

 rcall oper   ;вызов арифметической операции

 ldi semafor,1

 ser count

SW_SHOW: test_show  SW6,show1

 test_show  SW7,show2

 rjmp LOOP

 

;Вызываемые подпрограммы

;***********модуль арифметических операций

OPER : cpi cop,1   ;анализ КОП

 brne b2

;***********сложение или вычитание 8-разрядных операндов

 add op_A,op_B  

 b0: mov show1,op_A  ; выводимые значения - сумма

 in show2,SREG  ; и признаки из регистра SREG

 andi show2,0xbf  ;обнуление флага T

 ret

 b2: cpi cop,2

 brne b3

 sub op_A,op_B  

 rjmp b0

 b3: cpi cop,3

 brne b4

;***********модуль умножения  8-разрядных операндов

 mov mul_h,op_A

 mov mul_l,op_B

 

 or mul_h,mul_l  ;Установка флага Z, если один из

 tst mul_h   ; сомножителей равен 0.

 breq sh

 clr mul_l   ;очистка младшего байта произведения

 clr mul_h   ;очистка старшего байта произведения

 ldi count_bit,8  ;счетчик циклов

 L1: sbrc op_B,0  ;проверка младшего разряда множителя

 add mul_h,op_A  ;прибавление множимого А, если B0=1

 L2: ror mul_h   ;сдвиг

 ror mul_l   ; вправо 2-х байтов произведения

 lsr op_B   ;сдвиг множителя вправо на 1 разряд

 clc    ;очистка флага C 

 L3: dec count_bit  ;уменьшение счётчика циклов

 brne L1   ;если не 0, продолжаем умножение

 sh: mov show1,mul_l  ; выводимые значения - младший

 mov show2,mul_h  ; и старший байты произведения

 

 ret

 b4:  cpi cop,4

 brne b5

;**********модуль деления 16-разрядного числа на 8-разрядное

DIV:  clr res   ;обнуляем частное

 tst op_B  ;проверка делителя на ноль

 breq DIV_0  ; на ноль

 

 cp op_AH,op_B ;проверка

 brsh DIV_0  ; на переполнение

 ldi count_bit,8  ; результат 8-разрядный

 L4: rol op_A   ;сдвиг

 rol op_AH   ; делимого

 lsl res   ;сдвиг частного

 sub op_AH,op_B  ;вычитание делителя

 brcs recov   ;если остаток < 0,переход

 ldi temp,0x01  ;иначе установка

 or res,temp  ; разряда частного в 1

 rjmp L5

  recov: add op_AH,op_B  ; и восстановление остатка

 L5: dec count_bit

 brne L4

 mov show1,res  ; выводимые значения - частное

 mov show2,op_AH  ;  и остаток

DIV_0: clr op_B  ; зажигание всех светодиодов

 out PORTB,op_B ;

 b5: ret

;*** обмен тетрадами ***

test_SWAP:     

 sbic PIND,SW_SWAP ;проверка кнопки

 rjmp quit   ;  SWAP(SW4)

 swap operand  ;обмен тетрадами операнда

 com operand  ;инвертирование для вывода

 out PORTB,operand ; на СД

 com operand  ;инвертирование

 rcall DELAY  ;задержка

wait: sbis PIND,SW_SWAP

 rjmp wait

 quit: nop

 ret

;*** подпрограмма ввода байта  от кнопки с уменьшением счетчика нажатий

; после каждой записи

test_WR: sbic PIND,SW_WR  ;проверка кнопки

 rjmp w_quit  ; WR(SW5)

 rcall DELAY  ;задержка

 cpi semafor,1

 brne w3   ;переход для загрузки операндов

 clr semafor  ;сброс после 1-го входа

 mov cop,operand  ;запись кода операции

 cpi cop,4   ;деление?

 breq w_div 

 ldi count,3  ;если нет, счетчик записи = 3

 rjmp clear

  w_div: ldi count,4  ;иначе счетчик записи = 4

 rjmp clear

w3: cpi count,3   

 brne w2   ;переходы по значению счетчика

 mov op_AH,operand ;запись первого операнда

 rjmp clear

w2:  cpi count,2

 brne w1

 mov op_A,operand  ;запись первого операнда

 rjmp clear

 w1: mov op_B,operand  ;запись второго операнда

  clear: dec count   

 clr operand  ;очистка для записи новых значений

 ser temp   ;гашение

 out PORTB,temp  ; светодиодов

  wait5: sbis PIND, SW_WR

 rjmp wait5

 w_quit:  nop

 ret

;*** Задержка ***

DELAY: ldi r26,10

 ldi r27,255

 ldi r21,255

dd:  dec r21

 brne dd

 dec r27

 brne dd

 dec r26

 brne dd

 ret




1. Subject over from the Continent when they invded Britin nd it ws mde into poem somewhere bout the 7th century
2. Петр Яковлевич Чаадаев
3. Лекция 1 ИНФОРМАЦИОННЫЕ ТЕОРИИ СОВРЕМЕННОГО ОБЩЕСТВА План [1] 2
4. Древнейшие политико-правовые учения
5. Оценка недвижимости
6. Какие методы применяются для отражения последующих затрат по текущему ремонту основных средств с образ
7. Гипотеза лингвистической относительности Сепира Уорфа
8.  Назначение и область применения трансформаторов
9. Конструкции и расчёт объёмных гидромашин и элементов гидропривода
10. Тема- Эволюция коллизионного метода
11. Георгий Валентинович Плеханов
12. Тема 2. Объекты конфигурации Лекция 5
13. I Организационный момент
14. Антропогенез Кафедра биологи МГМСУ А
15. Вильгельм Оранский
16. Методы диагностики структурных единиц группы и уровня её развития
17. Восточно Сибирский экономический район
18. Электростатическое поле создано бесконечной заряженной плоскостью с поверхностной плотностью заряда 1 м
19. на тему - Расчет и проектирование электрического манометра с дистанционной передачей.
20. тематики и классификации микроорганизмов