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

Лабораторная работа 2 Цель работы- изучение способов представления числовых данных в микроконтроллера

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

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

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

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

от 25%

Подписываем

договор

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

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

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

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

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

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

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

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

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

Исполнители

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

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

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

___________ В.Я. Хартов

2011

  Лабораторная работа №2

Цель работы:

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

Исходный код программы:

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

;Программа тестирования в STK500 двоичных арифметических операций

; сложения, вычитания, умножения, деления

;Порт PD - порт управления для выбора операндов и операций

;Порт PB - порт индикации исходных операндов и результатов операции

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

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

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

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

.equ SW_op_AL = 0 ;кнопка выбора операнда op_AL

.equ SW_op_AH = 1 ;кнопка выбора операнда op_AH

.equ SW_op_BL = 2 ;кнопка выбора операнда op_ВL

.equ SW_ADD = 3  ;кнопка операции сложения res=op_AL+op_ВL

.equ SW_SUB = 4  ;кнопка операции вычитания res=op_AL-op_ВL

.equ SW_MUL = 5  ;кнопка операции умножения shov.res=op_AL x op_ВL

.equ SW_DIV = 6  ;кнопка операции деления res=op_AH.op_AL/op_ВL

.equ SW_SHOW = 7  ;кнопка для просмотра признаков сложения-вычитания,

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

.def op_AL = r16  ;1-й операнд АL

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

.def op_BL = r18  ;2-й операнд ВL

.def res = r1  ;результат операции (сумма, разность,

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

.def show = r31  ;регистр признаков сложения-вычитания,

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

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

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

.def copy_AH = r23 ;копия старшего байта делимого

.def copy_AL = r24 ;копия младшего байта делимого

.def copy_BL = r25 ;копия множителя

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

.def sw_reg = r27 ;регистр состояния кнопок

.def count = r28  ;число операндов в таблице операндов

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

.def temp = r30

.macro vvod   ;ввод операнда

lpm    ;считывание байта из flash-памяти в r0

mov @0,r0   ; и пересылка в регистр операнда

mov res, r0

adiw zl, 1   ;увеличение указателя адреса на 1

dec count

brne exit

ldi ZL,low(tabl_op*2)  ;перезагрузка начала таблицы операндов

 ldi ZH,high(tabl_op*2) ; в регистр Z

ldi count, 16

exit: nop

.endmacro

.org $000

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

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   ; ввод

ldi ZL,low(tabl_op*2)  ;загрузка адреса таблицы операндов

ldi ZH,high(tabl_op*2) ; в регистр Z

ldi count,16   ;число операндов 16

;Опрос кнопок и выполнение заданных действий

LOOP: in sw_reg,PIND   

sbrs sw_reg,0

rjmp f_op_AL    

sbrs sw_reg,1

rjmp f_op_AH    

sbrs sw_reg,2

rjmp f_op_BL    

sbrs sw_reg,3

rjmp add_bin    

sbrs sw_reg,4

rjmp sub_bin    

sbrs sw_reg,5

rjmp mul_bin    

sbrs sw_reg,6

rjmp div_bin    

sbrc sw_reg,7

rjmp loop

mov res,show

 rjmp outled

;Выборка 1-го операнда из таблицы операндов  

f_op_AL: vvod op_AL

 rjmp outled

;Выборка старшего байта 1-го операнда (при делении)

f_op_AH:  vvod op_AH

 rjmp outled

;Выборка 2-го операнда 

f_op_BL:  vvod op_BL

 rjmp outled

;Сложение 8-разрядных операндов

add_bin:  mov res,op_AL

 add res,op_BL

 in show,SREG ;выборка из регистра SREG

 rjmp outled

;Вычитание 8-разрядных операндов

sub_bin:  mov res,op_AL

 sub res,op_BL

 in show,SREG ;выборка из регистра SREG

 rjmp outled

;Умножение  8-разрядных операндов

mul_bin:  clr mul_l  ;очистка младшего 

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

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

 mov copy_BL,op_BL

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

 sbrc copy_BL,0  ;проверка младшего бита множителя

add mul_h,op_AL  ;прибавление множимого AL

L2: ror mul_h   ;сдвиг вправо

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

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

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

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

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

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

rjmp outled

;Деление 16-разрядного числа на 8-разрядное

div_bin: sbrc op_AH,7  ;ошибки исходных данных

 rjmp error

sbrc op_BL,7

 rjmp error

tst op_BL   ;ошибка при делении на 0

brsh error

cp op_AH,op_BL  ;ошибка при переполнении

 brge error

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

ldi c_bit,8  ; число итераций

mov copy_AH,op_AH

mov copy_AL,op_AL

L4: clc

rol copy_AL  ;сдвиг

rol copy_AH  ; делимого

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

sub copy_AH,op_BL ;вычитание делителя

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

inc res   ; иначе добавить 1 в частное

rjmp L5

recov: add copy_AH,op_BL ;восстановление остатка

L5: dec c_bit

brne L4

mov show,copy_AH  ;пересылка остатка

rjmp outled

error: clr show

out PORTB,show

rcall delay

ser show

out PORTB,show

rjmp wait

outled: com res

out portb,res

rcall delay

wait: in sw_reg,PIND  ;ждать, пока кнопка не отпущена

com sw_reg    

brne wait

rjmp loop

; Задержка

DELAY: ldi r21,8

m1: ldi r19,250

m3: ldi r20,250

m2: dec r20

brne m2

dec r19

brne m3

dec r21

brne m1

ret

; Таблица операндов 

tabl_op: .db 0xE5,0x10,0x1E,0xAA,0x6C,0xC7,0x1D,0xE2

    .db 0x15,0xD6,0x0E,0xB6,0x5D,0xB7,0x03,0xB2

1. Выполнить ряд примеров на сложение и вычитание, выбирая операнды слагаемых АL и ВL нажатием кнопок SW0 и SW2. Объяснить результаты операций при нажатиях кнопки SW3 (сложение) и SW4 (вычитание), рассматривая операнды как беззнаковые числа, затем как числа со знаком.

Сложение

Число А2/A10

Число B2/B10

А+В

Признаки:

HSVNZC

Комментарий

00010000/16

Беззнаковое

00011110/30

Беззнаковое

00101110/46

0 0 0 0 0 0

11100101/229

Беззнаковое

00010000/16

Беззнаковое

11110101/245

0 1 0 1 0 0

Так как числа беззнаковые, то флаги S и N можно проигнорировать

11100101/-27

Со знаком

00010000/16

Со знаком

11110101/-11

0 1 0 1 0 0

S = 1 – Число отрицательное

N = 1 – Число отрицательное, т.к. не было переполнения

11100010/226

Беззнаковое

01011101/93

Беззнаковое

00111111/63

0 0 0 0 0 1

С = 1 – Произошел перенос в разряд 28

28 + 63 = 319

11100010/-30

Со знаком

01011101/93

Со знаком

00111111/63

0 0 0 0 0 1

V = 0 – Переполнения нет

11100101/229

Беззнаковое

11010110/214

Беззнаковое

10111011/187

0 1 0 1 0 1

С = 1 – Произошел перенос в разряд 28

28 + 187 = 443

Так как числа беззнаковые, то флаги S и N можно проигнорировать

11100101/-27

Со знаком

11010110/-42

Со знаком

10111011/-69

0 1 0 1 0 1

V = 0 – Переполнения нет

S = 1 – Знак отрицательный

Вычитание

Число А2/A10

Число B2/B10

А-В

Признаки:

HSVNZC

Комментарий

11111111/255

Беззнаковое

01111110/126

Беззнаковое

10000001/129

0 1 0 1 0 0

Так как числа беззнаковые, то флаги S и N можно проигнорировать

11111111/-1

Со знаком

01111110/126

Со знаком

10000001/-127

0 1 0 1 0 0

S = 1 – Знак отрицательный

00000011/3

Беззнаковое

01101100/108

Беззнаковое

10010111/151

1 1 0 1 0 1 

С = 1 – Произошел перенос в разряд 28

151 -  28= - 105

00000011/3

Со знаком

01101100/108

Со знаком

10010111/-105

1 1 0 1 0 1 

S = 1 – Знак отрицательный

Флаг C игнорируем, т.к. числа со знаком

2. Выполнить ряд примеров умножения 8-разрядных двоичных чисел. Нажатие кнопки SW5 показывает младший байт произведения, SW7 – старший байт.

Число А2/A10

Число B2/B10

А*В

Комментарий

00010000/16

00000011/3

00000000 00110000/48

Верно

11100101/229

11100010/226

11001010 00101010/51754

Верно

10101010/170

00001110/14

00001001 01001100/2380

Верно

11111111/255

11111111/255

11111110 00000001/65025

Верно

3. Выполнить деление беззнаковых чисел, 16-разрядного делимого на 8-разрядный делитель, с восстановлением остатка при условиях, что делитель не равен 0 и его значение не вызовет переполнения, а также делимое и делитель заданы с нулевыми значениями старших разрядов.

Число А2/A10

Число B2/B10

А/В

Остаток

Комментарий

00010000 11111111/4351

01011101/93

00101110/46

01001001/73

Верно

00000000 00000011/3

00000011/3

00000001/1

00000000/0

Верно

01101111 11111111/28671

01110000/112

11111111/255

01111111/127

Верно

01111110 11111111/32511

01111111/127

11111111/255

01111110/126

Верно

4. Реализовать сложение двоично-десятичных чисел

;Сложение 8-разрядных операндов

add_bin:

 subi op_AL, 0x9A

 mov res, op_AL

 add res,op_BL

 MOV r17, res

 clt

 BRCC LABEL0

 set

 LABEL0:

 BRHS LABEL1

 SUBI r17, 0x06

LABEL1:

 BRTS LABEL2

 SUBI r17, 0x60

LABEL2:

 MOV res, r17

   

 in show,SREG ;выборка из регистра SREG

 rjmp outled




1. Сотрудничество Международного валютного фонда с Россией
2. 2011 т.к. я являюсь перечисляются достижения студента возможно по пунктам
3. 1 2014 г
4. социальная ответственность бизнеса
5. Искусство Древнего Египта. Древнее царство
6. доклад Исполнительного комитета касающийся этических критериев продвижения лекарственных средств на рыно
7. Мировоззренческие предпосылки аддиктивного поведения1
8. Ломоносов об обязанностях журналиста
9.  Важнейшим свойством культуры Древней Греции является существование музыки в синкретическом единен
10. Стимулы и стимулирование Стимулы от лат