Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dooh_osnova.docx
Скачиваний:
4
Добавлен:
17.11.2018
Размер:
456.92 Кб
Скачать

Приложение a.

Листинг программы

di запретить прерывания;

lxi sp, 0fffH установить область стека на вершину ОЗУ

Ввод данных с ацп

Mvi a, 00000001b

Out 22D остановить АЦП;

Mvi a, 91h формат регистра режима;

Out 23D загрузить режимы ППИ;

Begin:

Mvi b, 1h счетчик каналов установить в 1;

Lxi h, 801h адрес блока данных;

Mvi C, 0 установить нулевой канал;

Continue:

Mvi a, C отослать на коммутатор номер канала;

Out 21D адрес В;

Mvi a, 00000000b запуск ацп;

Out 22D

Wait: ожидание готовности данных

in 22D

ani 16D

jnz Wait

Mvi a, 00000001b остановить преобразование в ацп;

Out 22D

In 20D считывание с АЦП через А;

Mov m, a запись числа в память;

Inx h увеличение адресов яч. памяти на 1 бит;

Inr b увеличение счетчика каналов на 1;

Inr C увелич. номера коммутируемого канала;

Mov a, b проверка последний ли канал?

Cpi 13D

Jm Continue переход если нет;

lxi h, Vars загрузить адрес первой переменной;

xra a обнулить аккумулятор;

sta Result обнулить результат вычислений (мл байт)

sta Result+1 обнулить результат вычислений (ст байт);

Арифметические вычисления

Arifm:

mov a, m прочитать переменную в аккумулятор;

ani 01111111B обнулить старший бит;

Деление аккумулятора а на значение в l

mov e, a занести делимое в регистр Е;

mov d, l занести делитель в D;

push h сохранить HL в стеке;

call Div вызвать подпрограмму деления;

pop h восстановить HL из стека;

mov c, a запомнить результат деления в С;

lda Result загрузить результат вычислений (мл) в А;

add c сложить результаты;

sta Result сохранить результат вычислений (мл) в А;

jnc NoAdd переход если не было переноса;

lda Result+1 загрузить результат вычислений (ст) в А;

inr a добавить перенос к ст. байту результата;

sta Result+1 сохранить результат вычислений (ст) в А;

NoAdd:

inx h адрес следующей переменной;

mov a, l поместить адрес переменной L в A;

cpi 12D последняя ли переменная;

jm Arifm если нет – продолжить вычисления;

Преобразование к семиразрядному числу

lda Result прочитать мл. байт результата;

mov c, a сохранить его в С;

lda Result+1 прочитать ст. байт результата;

Continue:

rrc сдвиг аккумулятора вправо;

jnc NoShift если не было переноса – перейти на NoShift

mov d, a сохранить ст. байт в D;

mov a, c загрузить мл. байт;

rrc сдвиг мл. байта;

ori 10000000B установить старший бит;

mov c, a вернуть в С;

mov a, d восстановить ст. байт в А;

NoShift:

cpi 0 проверить А на 0;

jnz Continue если А  0 перейти на Continue;

Exit:

mov a, c записать в А мл. байт результата;

rrc сдвинуть вправо;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]