Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчетК580.doc
Скачиваний:
8
Добавлен:
16.04.2015
Размер:
624 Кб
Скачать
☆

6. Самостоятельная программа 1

Задание:Написать программу сложения двух матриц размерностью 4X4.

Текст программы представлен в Таблице 16.

Таблица 16

000

LXI H

041

001

B2

200

002

B3

000

003

LXI B

001

004

B2

220

005

B3

000

006

LDAX B

012

007

ADD M

206

010

STAX B

002

011

INX H

043

012

INX B

003

013

MVI A

076

014

B2

239

015

SUB C

221

016

JC

332

017

B2

006

020

B3

000

021

HLT

166

Описание программы:

Программа производит поэлементное суммирование двух матриц AиB, записанных по адресам 000 300 и 000 320 следующим образом:

адрес

элемент матрицы

300

a11

301

a12

302

a13

303

a14

304

a21

…

…

307

a24

310

a31

…

…

313

a34

314

a41

…

…

317

a44

Результат записывается по адресу матрицы А.

Проверка работы программы осуществлялась со следующими данными:

Формула 1

Полученный результат:

Формула 2

7. Самостоятельная программа 2

Задание:

Вывести на семисегментную индикацию массив из 20 чисел

Текст программы представлен в Таблице 17.

Таблица 17

Основная программа отображения массива из 20 чисел

0

0

0

 

0

6

1

lxi sp

инициализация стека по адресу 000277

0

0

1

2

7

7

 

 

0

0

2

 

0

0

0

 

 

0

0

3

 

0

7

6

mvi a

инициализация вывода

0

0

4

 

2

0

0

 

 

0

0

5

 

3

2

3

out

 

0

0

6

 

0

0

3

 

 

0

0

7

 

0

4

1

lxi h

загрузка в ячейку памяти по адресу 000320 значения 020

0

1

0

3

2

0

 

это счетчик элементов

0

1

1

 

0

0

0

 

массива

0

1

2

 

0

6

6

mvi m

 

0

1

3

 

0

2

0

 

 

0

1

4

 

0

4

1

lxi h

переход к ячейке памяти, предшествующей данным массива

0

1

5

2

7

7

 

 

0

1

6

 

0

0

0

 

 

0

1

7

 

0

5

4

inr l

** HL++

0

2

0

 

3

4

5

push h

запись в стек адреса элемента

0

2

1

 

0

3

6

mvi e

Е = 020 - число отображений элемента

0

2

2

 

0

2

0

 

 

0

2

3

 

3

1

5

call

* вызов подпрограммы отображения элемента

0

2

4

0

4

3

 

 

0

2

5

0

0

0

 

 

0

2

6

 

0

3

5

dcr e

E--

0

2

7

 

3

0

2

jnz

если Е!=0 переход к *

0

3

0

0

2

3

 

 

0

3

1

 

0

0

0

 

 

0

3

2

 

0

4

1

lxi h

переход к счетчику неотображенных элементов

0

3

3

3

2

0

 

 

0

3

4

 

0

0

0

 

 

0

3

5

 

0

6

5

dcr m

уменьшение этого счетчика на 1

0

3

6

 

3

4

1

pop h

востановление из стека адреса элемента

0

3

7

 

3

0

2

jnz

переход к **, если счетчик элементов != 0

0

4

0

0

1

7

 

 

0

4

1

 

0

0

0

 

 

0

4

2

1

6

6

hlt

конец программы

Подпрограмма отображения числа

0

4

3

0

2

6

mvi d

D = 377 - число отображений цифр

0

4

4

3

7

7

 

 

0

4

5

 

3

4

5

push h

запись в стек адреса элемента

0

4

6

 

1

7

6

mov a, m

запись в аккумулятор отображаемого числа

0

4

7

 

3

4

6

ani

запись в аккумулятор трех младших разрядов числа -

0

5

0

 

0

0

7

 

первой восьмиразрядной цифры

0

5

1

 

3

0

6

adi

получение адреса семисегментного кода цифры

0

5

2

 

1

2

1

 

 

0

5

3

 

1

5

7

mov l, a

переход к ячейке памяти, содержащей семисегментный код цифры

0

5

4

 

1

7

6

mov a, m

запись в аккумулятор семисегментного кода цифры

0

5

5

 

3

2

3

out

вывод цифры на индикацию

0

5

6

 

0

0

0

 

 

0

5

7

 

3

4

1

pop h

востановление из стека адреса элемента

0

6

0

 

3

4

5

push h

запись в стек адреса элемента

0

6

1

 

1

7

6

mov a, m

запись в аккумулятор отображаемого числа

0

6

2

 

0

1

7

rrc

сдвиг числа на три разряда вправо

0

6

3

 

0

1

7

rrc

 

0

6

4

 

0

1

7

rrc

 

0

6

5

 

3

4

6

ani

запись в аккумулятор трех младших разрядов полученного числа -

0

6

6

 

0

0

7

 

второй восьмиразрядной цифры

0

6

7

 

3

0

6

adi

получение адреса семисегментного кода цифры

0

7

0

 

1

2

1

 

 

0

7

1

 

1

5

7

mov l, a

переход к ячейке памяти, содержащей семисегментный код цифры

0

7

2

 

1

7

6

mov a, m

запись в аккумулятор семисегментного кода цифры

0

7

3

 

3

2

3

out

вывод цифры на индикацию

0

7

4

 

0

0

1

 

 

0

7

5

 

3

4

1

pop h

востановление из стека адреса элемента

0

7

6

 

3

4

5

push h

запись в стек адреса элемента

0

7

7

 

1

7

6

mov a, m

запись в аккумулятор отображаемого числа

1

0

0

 

0

0

7

rlc

сдвиг числа на три разряда влево

1

0

1

 

0

0

7

rlc

 

1

0

2

 

0

0

0

nop

 

1

0

3

 

3

4

6

ani

запись в аккумулятор трех младших разрядов полученного числа -

1

0

4

 

0

0

3

 

второй восьмиразрядной цифры

1

0

5

 

3

0

6

adi

получение адреса семисегментного кода цифры

1

0

6

 

1

2

1

 

 

1

0

7

 

1

5

7

mov l, a

переход к ячейке памяти, содержащей семисегментный код цифры

1

1

0

 

1

7

6

mov a, m

запись в аккумулятор семисегментного кода цифры

1

1

1

 

3

2

3

out

вывод цифры на индикацию

1

1

2

 

0

0

2

 

 

1

1

3

 

3

4

1

pop h

востановление из стека адреса элемента

1

1

4

 

0

2

5

dcr d

D--

1

1

5

 

3

0

2

jnz

переход к началу цикла индикации трех цифр отображаемого числа,

1

1

6

0

4

5

 

если D!= 0

1

1

7

 

0

0

0

 

 

1

2

0

3

1

1

ret

Возврат из подпрограммы

Семисегментные коды

1

2

1

0

7

7

 

семисегментный код 0

1

2

2

 

0

0

6

 

семисегментный код 1

1

2

3

1

3

3

 

семисегментный код 2

1

2

4

 

1

1

7

 

семисегментный код 3

1

2

5

1

4

6

 

семисегментный код 4

1

2

6

 

1

5

5

 

семисегментный код 5

1

2

7

1

7

5

 

семисегментный код 6

1

3

0

 

0

0

7

 

семисегментный код 7

Обмен информацией между микропроцессором и периферийным устройством осуществляется через специальные схемы сопряжения, или интерфейсные схемы. В данном случае роль интерфейсной схемы выполняет БИС программируемого параллельного интерфейса КР580ВВ55, включающей в себя 3 8-разрядных порта А, В и С для подключения периферийных устройств к системным шинам.

Структурная схема БИС приведена на Рис. 7. Она включает в себя двунаправленный буфер ШД, три информационных регистра каналов А, В и С и схему выбора канала и управления, содержащую регистр управляющего слова. Входы А0 и А1 данной схемы задают внутренний регистр (А, В, С или регистр управления).

Рис. 6

Режим работы каналов задается с помощью управляющего слова; задать можно один из трех режимов:

  • режим 0: синхронный обмен по всем трем каналам;

  • режим 1: асинхронный обмен или обмен по готовности по каналам А и В;

  • режим 2: стробируемый двунаправленный обмен только через канал А.

В программе используется режим 0.

Программа вывода 20 чисел на семисегментную индикацию состоит из следующих частей:

  1. основная программа, задает цикл отображения 20 чисел массива, в ней происходит инициализация стека, инициализация устройства отображения; каждый элемент в цикле отображается Е раз;

  2. подпрограмма, реализующая цикл отображения одного числа, в этой подпрограмме происходит разбиение числа на цифры и вывод на индикацию семисегментного кода, соответствующего цифре, число отображается в цикле Dраз;

  3. семисегментные коды цифр от 0 до 7.