- •Отчет по лабораторной работе
- •3. Система команд микропроцессора к580
- •4. Программа работы
- •5. Вводные программы
- •5.1. Программа 1
- •5.2. Программа 2
- •5.3. Программа 3
- •5.4. Программа 4
- •5.5. Программа 5
- •5.6. Программа 6
- •5.7. Программа 7
- •5.8. Программа 8
- •5.9. Программа 9
- •5.10. Программа 10
- •5.11. Программа 11
- •6. Самостоятельная программа 1
- •7. Самостоятельная программа 2
- •8. Заключение
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 чисел на семисегментную индикацию состоит из следующих частей:
основная программа, задает цикл отображения 20 чисел массива, в ней происходит инициализация стека, инициализация устройства отображения; каждый элемент в цикле отображается Е раз;
подпрограмма, реализующая цикл отображения одного числа, в этой подпрограмме происходит разбиение числа на цифры и вывод на индикацию семисегментного кода, соответствующего цифре, число отображается в цикле Dраз;
семисегментные коды цифр от 0 до 7.