Самостоятельная программа 2
Задание:
Вывести на семисегментную индикацию массив из 20 чисел
Текст программы представлен в Таблице 17.
Таблица 17
Основная программа отображения массива из 20 чисел | ||||||||
lxi sp | инициализация стека по адресу 000277 | |||||||
mvi a | инициализация вывода | |||||||
out | ||||||||
lxi h | загрузка в ячейку памяти по адресу 000320 значения 020 | |||||||
это счетчик элементов | ||||||||
массива | ||||||||
mvi m | ||||||||
lxi h | переход к ячейке памяти, предшествующей данным массива | |||||||
inr l | ** HL++ | |||||||
push h | запись в стек адреса элемента | |||||||
mvi e | Е = 020 - число отображений элемента | |||||||
call | * вызов подпрограммы отображения элемента | |||||||
dcr e | E-- | |||||||
jnz | если Е!=0 переход к * | |||||||
lxi h | переход к счетчику неотображенных элементов | |||||||
dcr m | уменьшение этого счетчика на 1 | |||||||
pop h | востановление из стека адреса элемента | |||||||
jnz | переход к **, если счетчик элементов != 0 | |||||||
hlt | конец программы | |||||||
Подпрограмма отображения числа | ||||||||
mvi d | D = 377 - число отображений цифр | |||||||
push h | запись в стек адреса элемента | |||||||
mov a, m | запись в аккумулятор отображаемого числа | |||||||
ani | запись в аккумулятор трех младших разрядов числа - | |||||||
первой восьмиразрядной цифры | ||||||||
adi | получение адреса семисегментного кода цифры | |||||||
mov l, a | переход к ячейке памяти, содержащей семисегментный код цифры | |||||||
mov a, m | запись в аккумулятор семисегментного кода цифры | |||||||
out | вывод цифры на индикацию | |||||||
pop h | востановление из стека адреса элемента | |||||||
push h | запись в стек адреса элемента | |||||||
mov a, m | запись в аккумулятор отображаемого числа | |||||||
rrc | сдвиг числа на три разряда вправо | |||||||
rrc | ||||||||
rrc | ||||||||
ani | запись в аккумулятор трех младших разрядов полученного числа - | |||||||
второй восьмиразрядной цифры | ||||||||
adi | получение адреса семисегментного кода цифры | |||||||
mov l, a | переход к ячейке памяти, содержащей семисегментный код цифры | |||||||
mov a, m | запись в аккумулятор семисегментного кода цифры | |||||||
out | вывод цифры на индикацию | |||||||
pop h | востановление из стека адреса элемента | |||||||
push h | запись в стек адреса элемента | |||||||
mov a, m | запись в аккумулятор отображаемого числа | |||||||
rlc | сдвиг числа на три разряда влево | |||||||
rlc | ||||||||
nop | ||||||||
ani | запись в аккумулятор трех младших разрядов полученного числа - | |||||||
второй восьмиразрядной цифры | ||||||||
adi | получение адреса семисегментного кода цифры | |||||||
mov l, a | переход к ячейке памяти, содержащей семисегментный код цифры | |||||||
mov a, m | запись в аккумулятор семисегментного кода цифры | |||||||
out | вывод цифры на индикацию | |||||||
pop h | востановление из стека адреса элемента | |||||||
dcr d | D-- | |||||||
jnz | переход к началу цикла индикации трех цифр отображаемого числа, | |||||||
если D!= 0 | ||||||||
ret | Возврат из подпрограммы | |||||||
Семисегментные коды | ||||||||
семисегментный код 0 | ||||||||
семисегментный код 1 | ||||||||
семисегментный код 2 | ||||||||
семисегментный код 3 | ||||||||
семисегментный код 4 | ||||||||
семисегментный код 5 | ||||||||
семисегментный код 6 | ||||||||
семисегментный код 7 |
Обмен информацией между микропроцессором и периферийным устройством осуществляется через специальные схемы сопряжения, или интерфейсные схемы. В данном случае роль интерфейсной схемы выполняет БИС программируемого параллельного интерфейса КР580ВВ55, включающей в себя 3 8-разрядных порта А, В и С для подключения периферийных устройств к системным шинам.
Структурная схема БИС приведена на Рис. 7. Она включает в себя двунаправленный буфер ШД, три информационных регистра каналов А, В и С и схему выбора канала и управления, содержащую регистр управляющего слова. Входы А0 и А1 данной схемы задают внутренний регистр (А, В, С или регистр управления).
Рис. 7
Режим работы каналов задается с помощью управляющего слова; задать можно один из трех режимов:
- режим 0: синхронный обмен по всем трем каналам;
- режим 1: асинхронный обмен или обмен по готовности по каналам А и В;
- режим 2: стробируемый двунаправленный обмен только через канал А.
В программе используется режим 0.
Программа вывода 20 чисел на семисегментную индикацию состоит из следующих частей:
1. основная программа, задает цикл отображения 20 чисел массива, в ней происходит инициализация стека, инициализация устройства отображения; каждый элемент в цикле отображается Е раз;
2. подпрограмма, реализующая цикл отображения одного числа, в этой подпрограмме происходит разбиение числа на цифры и вывод на индикацию семисегментного кода, соответствующего цифре, число отображается в цикле D раз;
3. семисегментные коды цифр от 0 до 7.
8. Заключение
Процессор К580 является прототипом процессора 8080 фирмы Intel. Процессор обладает очень простой и небольшой по количеству системой команд и малым числом способов адресации. С одной стороны это упрощает его программирование, с другой стороны это ограничивает программиста в использовании более сложных команд, таких, например, как умножение и деление.