Программу аналого-цифрового преобразования удобно оформить в виде подпрограммы с именем ADCONV, которая вызывается по мере надобности. Перед ее вызовом в пару HL необходимо записать адрес ячеек для хранения полученного кода АЦП.
LXI H, DATA_W |
|||
CALL ADCONV |
|||
………………….. |
|||
………………….. |
|||
ADCONV: |
MVI A, 07H |
||
OUT РУС55 |
; |
Вывод PC31 |
|
MVI A, 06H |
|||
OUT РУС55 |
; |
Вывод PC30, запуск АЦП |
|
WAIT: |
IN PA |
||
ANI 0010 0000B |
; |
Выделить разряд D5 |
|
JNZ WAIT |
; |
Ожидание готовности данных АЦП |
|
IN PB |
|||
MOV M, A |
; |
Запомнить младший байт кода АЦП |
|
INX H |
|||
IN PA |
|||
RLC |
|||
RLC |
|||
ANI 0000 0011B |
; |
Выделить D1, D0 |
|
MOV M, A |
; |
Запомнить старший байт кода АЦП |
|
RET |
Фрагмент программы ввода и обработки сигналов V1 и V2 имеет вид:
; На входах коммутатора A1=A0=0, при этом Y=X1 |
|||
; Ввод сигнала V1 |
|||
LXI H, DATA_W |
|||
CALL ADCONV |
|||
; Установить на коммутаторе A0=1, A1=0, при этом Y=X2 |
|||
MVI A, 05H |
|||
OUT РУС55 |
; |
Вывод PC21 |
|
; Ввод сигнала V2 |
|||
INX H |
|||
CALL ADCONV |
|||
; Вычисление суммы W1+W2 |
|||
; Пересылка W2 в регистры D, E |
|||
MOV D, M |
|||
DCX H |
|||
MOV E, M |
|||
DCX H |
|||
DCX H |
|||
MOV A, M |
|||
ADD E |
|||
MOV E, A |
; |
Младший байт суммы |
|
INX H |
|||
MOV A, M |
|||
ADD D |
|||
MOV D, A |
; |
Старший байт суммы |
|
; Вычисление g( )=W1+W2–K1 |
|||
LXI H, ADR_K1 |
|||
MOV A, E |
|||
SUB M |
|||
MOV E, A |
; |
Младший байт разности |
|
INX H |
|||
MOV A, D |
|||
SBB M |
|||
MOV D, A |
; |
Старший байт разности |
|
; Вычисление g( ) – Q |
|||
LXI H, ADR_Q |
|||
MOV A, E |
|||
SUB M |
|||
INX H |
|||
MOV A, D |
|||
SBB M |
|||
JC FORM_Y2 |
; |
Если g( )–Q < 0 |
|
FORM_Y3: |
………………… |
; |
Если g( )–Q > 0 |
FORM_Y2: |
………………… |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.