2. Программа работы усд
2.1. Алгоритм работы устройства
По условиям задания Mhex = 03Е5, BEGhex = 071А, Mdec = 997, BEGdec = 1818. Переведя из шестнадцатеричной системы счисления в десятичную систему мы видим, что программа начинается перед массивом, в который должны быть записаны снимаемые с АЦП данные.
Зададим начальные условия в первых трех блоках. В первом блоке записывается в парный регистр HL адрес хранения данных М = 03Е5. Во втором блоке в регистр В записываем число каналов F = 14 = ØЕh. Согласно заданию в качестве счётчика регистра применим регистр D – блок 3. В аккумулятор загрузим начальный адрес канала ØØh.
Начинается цикл проверки количества проверенных каналов.
Начинается цикл проверки стробирующего сигнала.
Блок 5: Число (адрес) записанное в аккумуляторе по шине данных передаём в устройство вывода №1. После чего срабатывают переключатели в коммутаторе каналов и соединяется устройство(амперметр, вольметр, спектрометр или другое устройство) с АЦП.
Блок 6: С выхода STR АЦП подаётся стробирующий сигнал в устройство ввода № 2. Двоичный код с АЦП поступает в устройство ввода №2. С устройства ввода № 2 передаём бит в регистр А.
Блок 7: Так как это только один бит и для того чтобы определить его значение необходимо сдвинуть его с первой позиции сразу в регистр С, а нулевое значение бита С на место 14 бита и так далее. То есть произвести сдвиг всех битов вправо.
Блок 8: После чего проверяем сигнальный флаг С. Если С равен нулю возвращаемся в шестой блок и так до тех пор, пока не поступит стробирующий бит.
Конец цикла проверки стробирующего бита.
Блок 9: Двоичный код с АЦП поступает в устройство ввода №1. С адреса устройства считываем код и записываем значение сигнала в регистр А.
Блок 10: После чего необходимо переписать в первую ячейку выделенную под память.
Блок 11: Увеличиваем значение регистра HL на один в данном цикле программы, для того чтобы последующие значения не накладывались на предыдущие. То есть, формируем адрес следующей ячейки памяти.
Блок 12: Увеличиваем значение регистра D на один для того чтобы в следующем цикле включился следующий по счёту канал. То есть формируем адрес следующего аналогового канала.
Блок 13. В аккумулятор записывается новый адрес канала – D.
Блок 14. Вычитаем из значения регистра A значение регистра B.
Блок 15. Проверяется флаговый регистр Z. Если Z = 1, то это говорит о том, что все каналы опрошены и тогда цикл сбора данных завершён. В противном случае осуществляется переход в блок 5 и опрос следующего канала.
Рисунок 4 – Блок схема
2.2. Составление программы на языке ассемблера и её размещение в озу
Программа на языке ассемблера представлена в таблице 1. В программе мы применили 2-е метки М1 и М2. Первая из них обеспечивает выполнение программы по малому циклу, а вторая – по большому циклу.
Т а б л и ц а 1 – Программа работы УСД на языке ассемблера
№ Команды |
Метка |
Мнемокод |
Операнды |
Комментарий |
Байты |
Циклы |
Такты |
1 |
|
LXI |
H, 03Е5 |
HL ← 03Е5 |
3 |
3 |
10 |
2 |
|
MVI |
B, ØЕh |
B ← ØЕh |
2 |
2 |
7 |
3 |
|
MVI |
D, ØØh |
D ← ØØh |
2 |
2 |
7 |
4 |
|
MOV |
A, D |
A ← D |
1 |
1 |
5 |
5 |
М2 |
OUT |
1 |
Устр.выв.№1 ← (A) |
2 |
3 |
10 |
6 |
М1 |
IN |
2 |
A ← Устр.ввода № 2 |
2 |
3 |
10 |
7 |
|
RRC |
|
A ← Сдв.П (А) |
1 |
1 |
4 |
8 |
|
JNC |
M1 |
Проверка регистра С |
3 |
3 |
10 |
9 |
|
IN |
1 |
А ← Устр.ввода № 1 |
2 |
3 |
10 |
10 |
|
MOV |
M,A |
M ← (A) |
1 |
2 |
7 |
11 |
|
INX |
H |
HL ← (HL) + 1 |
1 |
1 |
5 |
12 |
|
INR |
D |
D ← (D) + 1 |
1 |
1 |
5 |
13 |
|
MOV |
A,D |
A ← (D) |
1 |
1 |
5 |
14 |
|
CMP |
B |
(A) ← (D) |
1 |
1 |
4 |
15 |
|
JNZ |
M2 |
Проверка регистра Z |
3 |
3 |
10 |
В таблице 2 приведено соответствие команд и ячеек памяти.
Число ячеек ОП, отводимых под команду, определяется числом байтов в команде. В таблице 2 стрелками показана последовательность выполнения команд. В командах условного перехода, где последующее выполнение той или иной команды зависит от условия (признака), указаны пара стрелок, рядом с которыми значения сигналов-условий.
Т а б л и ц а 2 – Размещение программы
Z=1
№ команды |
Адрес16 |
1 |
071А |
071В | |
071С | |
2 |
071Е |
071F | |
3 |
0720 |
0721 | |
4 |
0722 |
5 |
0723 |
0724 | |
6 |
0725 |
0726 | |
7 |
0727 С=0 |
8 |
0728 |
0729 | |
072A С=1 | |
9 |
072B |
072C | |
10 |
072D |
11 |
072E Z=0 |
12 |
072F |
13 |
0730 |
14 |
0731 |
15 |
0732 |
0733 | |
0734 |
В таблице 3 представлена программа в кодовых комбинациях.
Т а б л и ц а 3 – Программа в кодовых комбинациях
№ команды |
Адрес ОП16 |
Команда2 |
Команда16 |
Комментарий |
1 |
071A |
0010 0001 |
21 |
HL 03Е5 |
071B |
1110 0101 |
Е5 |
старший байт | |
071C |
0000 0011 |
03 |
младший байт | |
2 |
071Е |
0000 0110 |
06 |
` B ØEh |
071F |
0000 1110 |
ØE | ||
3 |
0720 |
0001 0110 |
16 |
D ØØh |
0721 |
0000 0000 |
ØØ | ||
4 |
0722 |
0111 1010 |
7A |
AD |
5 |
0723 |
1101 0011 |
D3 |
Уст. Выв. №1(А) |
0724 |
0000 0001 |
Ø1 | ||
6 |
0725 |
1101 1011 |
DB |
А(Уст. Ввода № 2)
|
0726 |
0000 0010 |
Ø2 | ||
7 |
0727 |
0000 1111 |
ØF |
AСдвиг вправо(A) |
8 |
0728 |
1101 0010 |
D2 |
УП при С=0 переход к ячейке 0725 |
0729 |
1100 0010 |
C2 |
старший байт | |
072A |
0101 0110 |
56 |
младший байт | |
9 |
072B |
1101 1011 |
DB |
АУст. Ввода №1
|
072C |
0000 0001 |
Ø1 | ||
10 |
072D |
0111 0111 |
77 |
М(А) |
11 |
072E |
0010 0011 |
23 |
HL(HL)+1 |
12 |
072F |
0001 0100 |
14 |
D(D)+1 |
13 |
0730 |
0111 1010 |
7A |
A(D) |
14 |
0731 |
1011 1000 |
B8 |
A (B) |
15 |
0732 |
1100 0010 |
С2 |
УП при Z=0 переход к ячейке 0723 |
0733 |
1101 0000 |
D0 |
старший байт | |
0734 |
0101 0110 |
56 |
младший байт |