Задание 1. Составить программу для микро-ЭВМ «Энерго» генерации импульсов частотой 1 кГц на выходе порта В (разряд 0) параллельного периферийного адаптера (ППА) КР 580 ВВ 55.
Схема включения ППА КР 580 ВВ 55 представлен на рис.4.5. На схеме показаны только те выводы ППА, которые использованы при составлении программы.
1. Расчёт заданного времени задержки.
Генерация импульсов представляет собой чередование логических единиц и нулей с задержкой, которая вычисляется по формуле:
t = 1 / f, (4.1)
где t – время задержки, с; f – частота генерации импульсов, Гц.
Получаем:
t = 1 / (1 * 103 ) = 0,001 c.
2. Составление программы вывода логических единиц и нулей в младший разряд порта В ППА КР 580 ВВ 55.
2.1. Программирование ППА в соответствующий режим работы заключается в записи управляющего слова в регистр управляющего слова CW ППА КР 580 ВВ 55. В данном случае необходимо построить ППА в режим со следующей конфигурацией.
Порт В – вывод в режиме «0» (то есть вывод без сигналов квитирования).
Управляющее слово (УС) имеет вид:
Значения разрядов 3, 2, 1, 0 безразлично для определённости примем их равными 0, тогда управляющее слово примет вид:
10000000 В или 80Н.
Адрес регистра управляющего слова FB H, адрес порта В – F9 H.
2.2. Программа поочередного вывода логических единиц и нулей в младший разряд порта B ППА.
Адрес | OBJ | Метка | КОП | Операнды | Комментарий: |
1000H | 3E | MVI | A, 80H | :запись УС в аккумулятор | |
1001H | |||||
1002H | D3 | OUT | 0FBH | :запись УС в регистр CW | |
1003H | FB | : ППА | |||
1004H | 3E | MVI | A, 01H | :загрузка в аккумулятор начального значения для последующего вывода в порт B | |
1005H | |||||
1006H | D3 | GEN: | OUT | 0F9H | : port B <= A |
1007H | F9 | ||||
1008H | CD | CALL | TIME | : задержка 0,001 с. | |
1009H | |||||
100AH | |||||
100BH | EE | XRI | 01H | :инвертирование младшего разряда аккумулятора | |
100CH | CMP | C | |||
100DH | C2 | JNZ | COUNT | :генерация нового импульса | |
100EH | |||||
100FH |
3. Подпрограмма, вырабатывающая временную задержку длительностью 0,001 с, имеет вид
CALL | TIME | 17 тактов | |
TIME: | MVI | B, i | 7 тактов |
NEXT: | DCR | B | 5 тактов |
JNZ | NEXT | 10 тактов | |
RET | 11 тактов |
Длительность такта определяется тактовой частотой, которая для микро-ЭВМ «Энерго» равна 1,4 МГц и составляет 0,7 микросекунд.
Основной задачей является правильный расчет величин i, т.е. числа, которое будет предварительно загружаться в регистр B, выполняющий функцию счетчика, i рассчитывается по формуле
где tз – заданная величина задержки, равная 1000 мкс; tо – время, требуемое для однократного выполняемых команд, мкс; tц – время выполнения цикла NEXT, мкс; [ ] – означает целую часть результата.
К однократным выполняемым командам в данном случае относятся:
OUT | 0F9H | 10 тактов |
CALL | TIME | 17 тактов |
MVI | B, i | 7 тактов |
RET | 11 тактов | |
XRI | 01H | 7 тактов |
JMP | GEN | 10 тактов |
Общее время, требуемое на выполнение этих команд равно
Время цикла складывается из времени выполнения команд, входящих в цикл,
DCR | B | 5 тактов |
JNZ | NEXT | 10 тактов |
и составляет tц = (5 + 10) * 0,7 = 10,5 мкс.
Тогда
Для i = 91 из формулы (4.1) получим
tз = 43,4 + 91 10,5 = 998,9 мкс.
Такой точности вполне достаточно. Но для нормальной работы подпрограммы необходимо число 91 перевести в HEX число,
91: 16 = | 5 остаток 11 = B H ===================> B | получаем 5 B H |
5: 16 = 0 остаток 5 = 5 H ==============> 5 |
Программа, вырабатывающая временную задержку 0,001 с, имеет вид:
Адрес | OBJ | Метка | КОП | Операнды | Комментарий: |
1100H | TIME | MVI | B, 5BH | : запись УС в аккумулятор | |
1101H | 5B | ||||
1102H | NEXT: | DCR | B | : B <= B - 1 | |
1103H | C2 | JNZ | NEXT | : переход если z = 0 | |
1104H | |||||
1105H | |||||
1106H | C9 | RET | : возврат из программ |
Блок - схема программы:
Варианты заданий.
1. По одной букве с 5ю градациями яркости появляется имя на экране.
2. По 2 буквы постепенно загорается имя на экране.
3. По 3 буквы постепенно загорается имя на экране.
4. Загорается имя на экране. Постепенно с 5ю градациями яркости гаснет.
5. Загорается имя на экране. Постепенно по одной букве с 5ю градациями яркости гаснет.
6. Загорается имя на экране. Постепенно по 2 буквы с 5ю градациями яркости гаснет.
7. Загорается имя на экране. Постепенно по 3 буквы с 5ю градациями яркости гаснет.
8. На 1ой позиции постепенно загорается последняя буква имени, перескакивает на 8ю позицию, потом предпоследняя буква и т.д.
9. На 8ой позиции постепенно загорается первая буква имени, перескакивает на 0ую позицию и т.д.
10. Загорается имя на экране слева. Последняя буква перескакивается на 8ую позицию и постепенно загорается, потом предпоследняя и т.д.
11. Загорается имя на экране слева. Первая буква перескакивает на 0ую позицию и постепенно загорается, потом вторая буква и т.д.
12. Загорается имя на экране слева. Последние буквы перескакивают на последние позиции и постепенно загорается, потом следующие и т.д.
13. Загорается имя на экране слева. Три буквы перескакивают на конец и постепенно загораются, потом следующие.
14. Загорается имя на экране справа. Первые 2 буквы перескакивают на нулевую и первую позиции и постепенно загораются и т.д.
15. Загорается имя справа. Первые 3 буквы перескакивают на нулевую, первую и вторую позиции и постепенно загораются и т.д.
16. Загорается имя на экране. Постепенно гаснут буквы с чётными номерами, а потом с нечётными.
17. Загорается имя на экране. Постепенно гаснут буквы с нечётными номерами, а потом с чётными.
18. Загорается имя на экране. Постепенно гаснет первая буква, загорается, потом постепенно гаснет 2ая буква и загорается и т.д.
19. Загорается имя на экране. Постепенно гаснет первые 2 буквы, загораются и т.д.
20. Загорается имя на экране. Постепенно гаснет первые 3 буквы, загораются и т.д.
21. Постепенно загорается первая буква на экране, гаснет, потом вторая и т.д.
22. Постепенно загорается первые 2 буквы имени, гаснут, а потом следующие.
23. Загорается имя на экране посередине. Первая буква уходит на нулевую позицию и постепенно загорается, потом последняя буква уходит на 8ую позицию и постепенно загорается, потом вторая и т.д.
24. Загорается имя посередине. Первые 2 буквы уходят на нулевую и первую позиции и постепенно загораются, потом последние 2 буквы уходят на 8ую и 7ую позиции и постепенно загораются и т.д.
25. Постепенно загораются посередине 2 буквы, потом соседние и т.д.
26. Загорается имя на экране. Постепенно гаснут 2 буквы посередине. Потом соседние буквы и т.д.
27. Постепенно загорается имя на экране, гаснет, сдвигается направо на одну позицию и постепенно загорается и т.д.
28. Постепенно загорается имя на экране справа, гаснет, сдвигается на одну позицию влево и опять загорается постепенно и т.д.
29. Постепенно загорается первая половина имени, потом вторая.
30. Имя на экране. Постепенно гаснет первая половина имени, потом вторая.