Самостоятельная программа 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. Процессор обладает очень простой и небольшой по количеству системой команд и малым числом способов адресации. С одной стороны это упрощает его программирование, с другой стороны это ограничивает программиста в использовании более сложных команд, таких, например, как умножение и деление.