Блок-схема алгоритма выполнения задачи.
Величина |
Значение |
Тип микропроцессора |
КР1810ВМ86 |
Адрес порта ввода |
08h |
Адрес порта вывода |
1: 09h; 2: 10h |
Количество датчиков |
N = 60 |
Количество исполнительных элементов |
M = 43 |
Номер I-го датчика DI |
I = 20 |
Номер k-го датчика Dk |
k = 60 |
Номер r-го исполнительного элемента ИЭr |
r = 27 |
После опроса датчиков алгоритм анализирует состояние датчика №20, затем датчика №60. Соответственно после указанного анализа появляется возможность выбрать четыре возможных варианта развития событий, а именно:
Ничего не делать
Включить канал
Выключить канал
Запустить программу задержки и затем включить канал.
После выполнения выбранного варианта программа возвращается к опросу датчиков и все повторяется сначала.
Программа.
Поскольку адресное пространство ОЗУ начинается только с 1000h, там мы и расположим массив из 60 байт, который будет заполняться при выполнении подпрограммы опроса датчиков. Причем значению высокого уровня датчика будет соответствовать значение FFh соответствующего байта, а низкому уровню – 00h.
Программу разместим по адресу 0100h в ПЗУ устройства. Для перехода в указанный адрес в начале поставим команду «jmp 0100h». По условиям задания процедура задержки на Т секунд размещается по адресу 028h.
Общая длинна основной программы (без процедуры задержки) – 136 байт. Из памяти данных используется 60 байт для запоминания массива датчиков.
Строки программы с 3 по 38 относятся к подпрограмме опроса датчиков. Строки 39 – 43 выполняют верхнюю проверку алгоритма (Датчик №20=0). Причем если условие выполняется, управление передается команде в строку №52, если нет, то в строку 44.
Из алгоритма видно, что после выполнения указанной проверки производится проверка условия «Датчик №60=0». Так вот левая (по схеме алгоритма) проверка производится в строках 44 – 48. Причем, если условие не выполняется (вариант развития событий №1), то программа возвращается к строке 3 и весь цикл начинается по новой. А если выполняется (вариант развития событий №4), то запускается процедура задержки (строка 49). После возврата управления процедурой задержки управление передается в блок строк 57 – 61. Этот блок включает выход 27 (в соответствии с методическими указаниями).
Выключает вышеуказанный выход блок строк 63 – 67. Оба этих блока, после своего выполнения передают управление строке 3, то есть начинают цикл программы заново.
Правая проверка производится в строках 52 – 56. Причем при выполнении условия управление передается в строку 63 и соответственно выполняется блок выключения выхода 27 (вариант развития событий №3), при не выполнении, в строку 57, в блок включения выхода 27 (вариант развития событий №2).
Листинг программы
Мнемоника команды адрес код
org 0000h
jmp 0100h 0000 E9FD00
org 0100h
mov cl,00 0100 B100
mov ch,cl 0102 8AE9
and ch,07 0104 80E507
jnz 0119 0107 7510
shr ch,01 0109 D0ED
shr ch,01 010B D0ED
shr ch,01 010D D0ED
mov al,ch 010F 8AC5
out 0Ah,al 0111 E60A
nop 0113 90
nop 0114 90
in al,08 0115 E408
mov ah,al 0117 8AE0
mov dx,1000h 0119 DA0010
mov ch,cl 011C 8AE9
shr ch,01 010E D0ED
shr ch,01 0120 D0ED
shr ch,01 0122 D0ED
add dl,ch 0124 02D5
mov ch,cl 0126 8AE9
and ch,07 0128 80E507
shl ch,01 012B D0E5
shl ch,01 012D D0E5
shl ch,01 012F D0E5
add dl,ch 0131 02D5
mov di,dx 0133 8BFA
mov ch,00 0135 B500
rcr ah,1 0137 D0DC
jnc 013Dh 0139 7302
mov ch,FFh 013B B5FF
mov cs:[di],ch 013D 2E882D
inc cl 0140 FEC1
mov ch,41h 0142 B541
sub ch,cl 0144 2AE9
jnz 0102h 0146 75BA
mov di,20 0148 BF1400
mov cl,0 014B B100
mov ch,cs:[di] 014D 2E8A2D
sub ch,cl 0150 2AE9
jz 0166h 0152 7412
mov di,60 0154 BF3C00
mov cl,0 0157 B100
mov ch,cs:[di] 0159 2E8A2D
sub ch,cl 015C 2AE9
jnz 0100h 015E 7525
call 0028h 0160 E8C5FE
jmp 0172h 0163 EB0D
nop 0165 90
mov di,60 0166 BF3C00
mov cl,0 0169 B100
mov ch,cs:[di] 016B 2E8A2D
sub ch,cl 016E 2AE9
jz 017D 0170 740B
mov al,040h 0172 B040
out 0Ah,al 0174 E60A
mov al,004h 0176 B004
out 09h,al 0178 E609
jmp 0100h 017A EB84
nop 017C 90
mov al,040h 017D B040
out 0Ah,al 017F E60A
mov al,000h 0181 B000
out 09h,al 0183 E609
jmp 0100h 0185 E978FF