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

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.