Приложение
-
Листинг рабочей программы контроллера
-
Листинг тестовой программы контроллера
-
Листинг программы обмена информацией NEW
-
Спецификация элементов
-
Стоимость элементов
Приложение 1.
;ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
;КОНТРОЛЛЕРА-КОМПЕНСАТОРА
;РЕАКТИВНОЙ МОЩНОСТИ
;
;Адреса составных частей ПО
ROM: EQU 0000H ;НАЧАЛО ПЗУ
RAM: EQU 7800H ;НАЧАЛО ОЗУ
STACK: EQU 7FFFH ;ВЕРШИНА СТЕКА
;ПРОСТО КОНСТАНТЫ
LONG: EQU 254 ;ДЛИНА МАССИВОВ A,B,C В БАЙТАХ
LONGW: EQU 127 ;ЧИСЛО ЭЛЕМЕНТОВ МАССИВОВ A,B,C
AMAX: EQU 1345 ;ЧИСЛО ИМПУЛЬСОВ ПРИ MAX. НАПРЯЖ.
NECHA: EQU 15 ;НЕЧУВСТВИТ. ПРИ УПРАВ. ПО НАПРЯЖ.
BMIN: EQU 800 ;ЧИСЛО ИМПУЛЬСОА ПРИ MIN. ТОКЕ
NECHB: EQU 20 ;НЕЧУВСТВИТ. ПРИ УПРАВ. ПО ТОКУ
;====================================================
;============ ПОРТЫ ================
;====================================================
;ТАЙМЕР 1 К580ВИ53
ST1Z0: EQU 4800H ;СЧЕТЧИК А ИМПУЛЬСА НАПРЯЖЕНИЯ U
ST1Z1: EQU 4801H ;СЧЕТЧИК В ИМПУЛЬСА ТОКА I
ST1Z2: EQU 4802H ;СЧЕТЧИК С ИМПУЛЬСА ПЕРВОЙ СТУПЕНИ
RUST1: EQU 4803H ;РЕГИСТР УПР. СЛОВА
;ТАЙМЕР 2 К580ВИ53
ST2Z0: EQU 5000H ;ЗАПРОС ПРЕРЫВАНИЯ TRAP МИКРОПРОЦЕССОРА
ST2Z1: EQU 5001H ;СИНХРОНИЗАЦИЯ СЧЕТЧИКОВ A,B,C 180 КГЦ
ST2Z2: EQU 5002H ;СИНХРОНИЗАЦИЯ RS-232C 9.6 КГЦ
RUST2: EQU 5003H ;РЕГИСТР УПР. СЛОВА
;ПОСЛЕДОВАТЕЛЬНЫЙ ИНТЕРФЕЙС К580ВВ51 (RS-232)
SARTD: EQU 4000H ;РЕГИСТР ДАННЫХ
SARTC: EQU 4001H ;РЕГИСТР СОСТ. И УПРАВЛ.
;ПАРАЛЛЕЛЬНЫЙ ИНТЕРФЕЙС К580ВВ55
PRTA: EQU 5800H ;ПОРТ A
PRTB: EQU 5801H ;ПОРТ B
PRTC: EQU 5802H ;ПОРТ C
RUSP: EQU 5803H ;РЕГИСТР УПР. СЛОВА
;PA3-PA0 -КОЭФФИЦИЕНТ ДЛЯ РАСЧЕТА ДИСКРЕТНОСТИ УПРАВЛЕНИЯ
;PA7-PA4 -КОЭФФИЦИЕНТ ДЛЯ РАСЧЕТА ЗАДАНИЯ ФИ
;PB3-PB0 -КОЭФФИЦИЕНТ ДЛЯ РАСЧЕТА НЕЧУВСТВИТЕЛЬНОСТИ
;PB5 -ПОРЯДОК ВКЛЮЧЕНИЯ КОММУТАТОРОВ
;PB6 -РАЗРЕШЕНИЕ ПЕРЕДАЧИ ВИДЕОБУФЕРА
;PB7 -ЗНАК ЗАДАНИЯ ФИ
;PC3-PC0 -ВЫХОД НА ДЕШИФРАТОР ИНДИКАТОРОВ
;PC4 -РАЗРЕШЕНИЕ ДЕШИФРАТОРА
;БУФЕРНЫЕ РЕГИСТРЫ К589ИР12
MBR1: EQU 6000H ;МЛАДШИЕ РАЗРЯДЫ
MBR2: EQU 6800H ;СТАРШИЕ РАЗРЯДЫ
MBRD: EQU 67FFH ;СЛОВО
;=====================================================
;======= РАСПРЕДЕЛЕНИЕ ОПЕРАТИВНОЙ ПАМЯТИ =========
;=====================================================
;ПО ЭТИМ АДРЕСАМ ОЗУ ПОКОЯТСЯ:
;-----------------------------
BUFBIOS: EQU RAM+0 ;БУФЕР BIOS (20 БАЙТОВ)
VIDEO: EQU RAM+20 ;ВИДЕОБУФЕР (20 БАЙТОВ)
BUFER: EQU VIDEO+20 ;БУФЕР ИМПУЛЬСОВ A,B,C (3 СЛОВА)
ASRED: EQU BUFER+6 ;СРЕДНИЕ ЗНАЧЕНИЯ A,B,C (3 СЛОВА)
BSRED: EQU ASRED+2
CSRED: EQU BSRED+2
APUS: EQU CSRED+2 ;ПУСТЫШКА МАССИВА A
ABEG: EQU APUS+2 ;НАЧАЛО МАССИВА A
AEND: EQU APUS+LONG ;КОНЕЦ МАССИВА A
BPUS: EQU AEND+2 ;ПУСТЫШКА МАССИВА B
BBEG: EQU BPUS+2 ;НАЧАЛО МАССИВА B
BEND: EQU BPUS+LONG ;КОНЕЦ МАССИВА B
CPUS: EQU BEND+2 ;ПУСТЫШКА МАССИВА C
CBEG: EQU CPUS+2 ;НАЧАЛО МАССИВА C
CEND: EQU CPUS+LONG ;КОНЕЦ МАССИВА C
;
CNMI: EQU CEND+8 ;СЧЕТЧИК ПРЕРЫВАНИЙ TRAP (БАЙТ)
DISKU: EQU CEND+9 ;ДИСКРЕТНОСТЬ УПРАВЛЕНИЯ (СЛОВО)
NECH: EQU CEND+11 ;НЕЧУВСТВИТЕЛЬНОСТЬ УПРАВЛЕНИЯ (СЛОВО)
ZADF: EQU CEND+13 ;ЗАДАНИЕ ФИ В ДОП. КОДЕ (СЛОВО)
CINT: EQU CEND+15 ;СЧЕТЧИК ПРЕРЫВАНИЙ RST7.5(СЛОВО)
UPR: EQU CEND+17 ;ПРИЗНАК УПРАВЛЕНИЯ: 0-НИЧЕГО,1-ВКЛ,2-ВЫКЛ (БАЙТ)
FA: EQU CEND+18 ;ЗНАЧЕНИЕ F(A) (СЛОВО)
FB: EQU CEND+20 ;ЗНАЧЕНИЕ F(B) (СЛОВО)
FI: EQU CEND+22 ;УГОЛ ФИ В ДОП. КОДЕ (СЛОВО)
DFI: EQU CEND+24 ;РАССОГЛАСОВАНИЕ ФИ В ДОП. КОДЕ (СЛОВО)
IND: EQU CEND+26 ;КОД УПРАВЛЕНИЯ (БАЙТ)
DPRTB: EQU CEND+27 ;ДУБЛЬ ПОРТА B (БАЙТ)
DPRTA: EQU CEND+28 ;ДУБЛЬ ПОРТА A (БАЙТ)
DMBRD: EQU CEND+29 ;ДУБЛЬ РЕГИСТРОВ MBR1 И MBR2 (СЛОВО)
TOK: EQU CEND+31 ;ТЕКУЩИЙ ТОК В ДОПОЛНИТЕЛЬНОМ КОДЕ (СЛОВО)
FIK: EQU CEND+33 ;УГОЛ ФИ В ДОПОЛНИТЕЛЬНОМ КОДЕ (СЛОВО)
DELA: EQU CEND+35 ;РАЗНОСТЬ Umax - U В ДОП. КОДЕ (СЛОВО)
DELB: EQU CEND+37 ;РАЗНОСТЬ Imin - I В ДОП. КОДЕ (СЛОВО)
ERRO: EQU CEND+39 ;КОД ОШИБКИ
;
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;$ ОБЛАСТЬ ВЕКТОРОВ ПРЕРЫВАНИЙ $
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
ORG ROM
JMP BEGIN
DS 21H
JMP TRAP ;ADDR 0024H TRAP
DS 5H
RET ;ADDR 002CH RST 5.5
DS 7H
RET ;ADDR 0034H RST 6.5
DS 7H
JMP RST75 ;ADDR 003CH RST 7.5
DS 30H
;===============================================
;********** JMP П/П BIOS *************
;===============================================
ZY88B: JMP Y88B ;
ZY24A: JMP Y24A ;
ZY32B: JMP Y32B ;
ZDOPB: JMP DOPB ;
ZDOPD: JMP DOPD ;
ZDOPH: JMP DOPH ;
ZD32A: JMP D32A ;
ZSLOW: JMP SLOW ;
ZUSTB: JMP USTB ;
ZDEBI: JMP DEBI ;
ZRSB: JMP RSB ;
ZRSW: JMP RSW ;
ZMASS: JMP MASS ;
ZSRED: JMP SRED ;
ZD16: JMP D16 ;
ZFUNC: JMP FUNC ;
ZGRAN: JMP GRAN ;
ZCOD: JMP COD ;
;****************************************************
;* ОБЛАСТЬ КОНСТАНТ *
;****************************************************
STEPU: DW 30 ;ШАГ ДЛЯ РАСЧЕТА ДИСКР.УПРАВЛЕНИЯ 30 секунд
STEPN: DW 20 ;ШАГ ДЛЯ РАСЧЕТА НЕЧУВСТВ.УПРАВЛЕНИЯ 1 град
STEPZ: DW 20 ;ШАГ ДЛЯ РАСЧЕТА ЗАДАНИЯ 1град (10 дискрет)
DISKW: DB 50 ;ДИСКРЕТНОСТЬ ЗАПИСИ ИМПУЛЬСОВ=DISKW/50 СЕК
;ТАБЛИЦА ДЛЯ ОПРЕДЕЛЕНИЯ СМЕЩЕНИЯ ИЗМЕРЯЕМЫХ ИМПУЛЬСОВ ТОКА И
;НАПРЯЖЕНИЯ ПО ИХ ДЛИТЕЛЬНОСТИ В ДИСКРЕТАХ, ВЫЗВАННОГО
;ГИСТЕРЕЗИСОМ ТРИГГЕРА ШМИТТА. ДИАПАЗОН ИЗМЕНЕНИЯ ДЛИТЕЛЬНОСТИ
;ИМПУЛЬСОВ ОТ 700 ДО 1300 ЧЕРЕЗ 10 ДИСКРЕТ. ИТОГО 51 СЛОВА.
TABL: DW 135,131,127,120,116,112,109,105,100,095,090,085
DW 080,078,075,073,070,066,062,059,055,052,050,047
DW 045,043,040,039,037,035,034,032,030,028,027,026
DW 025,024,022,021,020,019,018,017,016,015,014,013
DW 012,011,010,009,008,007,06,05,05,05,05,05,05,05
DW 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
;==================================================
;**************** П/П BIOS **********************
;==================================================
Y88B:
;###################################################
;ПОДРОГРАММА УМНОЖЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА
;ФОРМАТА 8*8=16.
;МЕТОД УМНОЖЕНИЯ: 8 ЦИКЛОВ СДВИГОВ МНОЖИТЕЛЯ И ТЕКУЩЕЙ
;СУММЫ ЧАСТИЧНЫХ ПРОИЗВЕДЕНИЙ ВЛЕВО.
;ВХОДНЫЕ ПАРАМЕТРЫ: (C)-МНОЖИТЕЛЬ,(E)-МНОЖИМОЕ.ВЫХОДНОЙ
;ПАРАМЕТР: (H,L)-ПРОИЗВЕДЕНИЕ.ИСПОЛЬЗУЮТСЯ ВСЕ РЕГИСТРЫ
;СОХРАНЯЮТСЯ (А),(E).
;####################################################
XRA A
MOV H,A
MOV L,A
MOV D,A
ADD C
RZ
XRA A
ADD E
RZ
MOV H,C
MVI B,8 ;СЧЕТЧИК ЦИКЛОВ
;СДВИГ МНОЖИТЕЛЯ И ТЕКУЩЕЙ СУММЫ ЧП ВЛЕВО
Z: DAD H
JNC P ;ЕСЛИ ПАЗРЯД МНОЖИТЕЛЯ=0
;СЛОЖЕНИЕ МНОЖИМОГО С ТЕКУЩЕЙ СУММОЙ ЧП
DAD D
;ПРОВЕРКА КОНЦА ЦИКЛА
P: DCR B
JNZ Z ;ЗАЦИКЛИВАНИЕ
RET
Y24A:
;######################################################
;ПОДПРОГРАММА УМНОЖЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА
;ФОРМАТА 16*8=24 (БЕЗ ПРОВЕРКИ СОМНОЖИТЕЛЕЙ НА НОЛЬ).
;ВХОДНЫЕ ПАРАМЕТРЫ: (А)-МНОЖИТЕЛЬ, (D,E)-МНОЖИМОЕ.ВЫХОД
;НЫЕ ПАРАМЕТРЫ: (A,H,L)-ПРОИЗВЕДЕНИЕ.ИСПОЛЬЗУЮТСЯ ВСЕ
;РЕГИСТРЫ,СОХРАНЯЕТСЯ (D,E)
;######################################################
LXI H,0 ;ОБНУЛЕНИЕ СУММЫ ЧП
LXI B,08 ;(B)=0,(C)- СЧЕТЧИК ЦИКЛОВ
;СДВИГ ТЕКУЩЕЙ СУММЫ ЧП И МНОЖИТЕЛЯ ВЛЕВО
CIKL: DAD H
ADC A
JNC PER ;ЕСЛИ РАЗРЯД МНОЖИТЕЛЯ=0
;СЛОЖЕНИЕ МНОЖИМОГО С ТЕКУЩЕЙ СУММОЙ ЧП
DAD D
ADC B
;ПРОВЕРКА КОНЦА ЦИКЛА
PER: DCR C
JNZ CIKL ;ЗАЦИКЛИВАНИЕ
RET
Y32B:
;#####################################################
;ПОДПРОГРАММА УМНОЖЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА
;ФОРМАТА 16*16=32. ВАРИАНТ Б.
;МЕТОД УМНОЖЕНИЯ: РЕЗУЛЬТАТ 16*16=32 ОПРЕДЕЛЯЕТСЯ КАК
;СУММА ДВУХ СДВИНУТЫХ ОТНОСИТЕЛЬНО ДРУГ ДРУГА ПРОИЗВЕ-
;ДЕНИЙ 16*8=24,ПОЛУЧЕННЫХ УМНОЖЕНИЕМ МНОЖИМОГО СООТВЕТ-
;СТВЕННО НА МЛБ И СТБ МНОЖИТЕЛЯ.
;ВХОДНЫЕ ПАРАМЕТРЫ: (B,C)-МНОЖИТЕЛЬ,(D,E)-МНОЖИМОЕ. ВЫ-
;ХОДНЫЕ ПАРАМЕТРЫ: (B,C,H,L)-ПРОИЗВЕДЕНИЕ.ИСПОЛЬЗУЮТСЯ
;ВСЕ РЕГИСТРЫ.ГЛУБИНА СТЕКА-4.ИСПОЛЬЗУЕТСЯ ПОДРОГРАММА
;*Y24A*.
;#####################################################
;ОБНУЛЕНИЕ ТЕКУЩЕЙ СУММЫ ЧП
XRA A
MOV H,A
MOV L,A
;ПРОВЕРКА МНОЖИМОГО НА 0
ORA D
ORA E
JNZ PER1 ;ЕСЛИ МНОЖИМОЕ НЕ 0
MOV B,A
MOV C,A
RET
;ПРОВЕРКА МНОЖИТЕЛЯ НА 0
PER1: XRA A
ORA B
ORA C
RZ ;ЕСЛИ МНОЖИТЕЛЬ=0
;УМНОЖЕНИЕ МНОЖИМОГО НА МЛБ МНОЖИТЕЛЯ
MOV A,C ;(A)-МЛБ МНОЖИТЕЛЯ
PUSH B ;СОХРАНЕНИЕ МНОЖИТЕЛЯ
CALL ZY24A ;(A,H,L)-ПРОИЗВЕДЕНИЕ 1 (ПР1)
;СОХРАНЕНИЕ ПРОИЗВЕДЕНИЯ 1
XTHL ;СОХРАНЕНИЕ СРБ,МЛБ ПР1
PUSH PSW ;СОХРАНЕНИЕ СТБ ПР1
;УМНОЖЕНИЕ МНОЖИМОГО НА СТБ МНОЖИТЕЛЯ
MOV A,H ;(A)-СТБ МНОЖИТЕЛЯ
CALL Y24A ;(A,H,L)-ПРОИЗВЕДЕНИЕ 2 (ПР2)
;СЛОЖЕНИЕ СДВИНУТЫХ НА 8 РАЗРЯДОВ ПР1 И ПР2
MOV B,A ;(B)-СТБ ПР2
POP PSW ;(A)-СТБ ПР1
ADD H
MOV C,A ;(C)-СУММА СТБ ПР1 И СТБ ПР2
JNC PER2
INR B ;УЧЕТ ПЕРЕНОСА В СТБ
PER2: MOV H,L ;(H)-МЛБ ПР2
MVI L,0
POP D ;(D,E)-СРБ,МЛБ ПР1
DAD D
RNC
INX B ;УЧЕТ ПЕРЕНОСА В СТБ
RET
DOPB:
;###################################################
;ПОДПРОГРАММА ПРЕОБРАЗОВАНИЯ КОДА ЧИСЛА В РЕГИСТРО-
;ВОЙ ПАРЕ (B,C) В ДОПОЛНИТЕЛЬНЫЙ КОД.
;ВХОДНОЙ ПАРАМЕТР: (B,C)-ДВОИЧНЫЙ КОД ЧИСЛА.ВЫХОДНОЙ
;ПАРАМЕТР: (B,C)-ДОПОЛНИТЕЛЬНЫЙ КОД.
;###################################################
PUSH PSW
MOV A,B
CMA
MOV B,A
MOV A,C
CMA
MOV C,A
INX B
POP PSW
RET
DOPD:
;###################################################
;ТО ЖЕ, НО РЕГИСТРОВАЯ ПАРА (D,E)
;###################################################
PUSH PSW
MOV A,D
CMA
MOV D,A
MOV A,E
CMA
MOV E,A
INX D
POP PSW
RET
DOPH:
;###################################################
;ТО ЖЕ, НО ПАРА (H,L)
;###################################################
PUSH PSW
MOV A,H
CMA
MOV H,A
MOV A,L
CMA
MOV L,A
INX H
POP PSW
RET
D32A:
;##################################################
;ПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА
;ФОРМАТА 32: 16=(16,16)
;ВХОДНЫЕ ПАРАМЕТРЫ: (H,L,D,E)-ДЕЛИМОЕ,(B,C)-ДЕЛИТЕЛЬ
;ВЫХОДНЫЕ ПАРАМЕТРЫ: (D,E)-ЧАСТНОЕ,(H,L)-ОСТАТОК,CY=0-
;-ПРИЗНАК ПЕРЕПОЛНЕНИЯЧАСТНОГО.ИСПОЛЬЗУЮТСЯ ВСЕ РЕ-
;ГИСТРЫ,ГЛУБИНА СТЕКА-2.ИСПОЛЬЗУЕТСЯ ПОДПРОГРАММА
;*DOPB*
;##################################################
;ПРОВЕРКА ЧАСТНОГО НА ПЕРЕПОЛНЕНИЕ: ЧАСТНОЕ>16 БИТ?
MOV A,L
SUB C
MOV A,H
SBB B
RNC ;ЕСЛИ ПЕРЕПОЛНЕНИЕ,CY=0
;ДОПОЛНЕНИЕ ДЕЛИТЕЛЯ
CALL ZDOPB ;(B,C)-ДОПОЛНИТЕЛЬНЫЙ КОД
XRA A ;(А)=0-СЧЕТЧИК ЦИКЛОВ
;СДВИГ ВЛЕВО ОСТАТКА И ЧАСТНОГО В (H,L,D,E)
ZIKL: DAD H
RAR ;СОХРАНЕНИЕ ПЕРЕНОСА
XCHG
DAD H
XCHG
JNC ER1
INX H ;УЧЕТ ПЕРЕНОСА
;СЛОЖЕНИЕ ОСТАТКА С ДОПОЛНИТЕЛЬНЫМ КОДОМ ДЕЛИТЕЛЯ
ER1: PUSH H ;СОХРАНЕНИЕ ОСТАТКА
DAD B
;ПРОВЕРКА ЗНАКА СУММЫ
JNC ER2 ;ЕСЛИ СУММА < 0
RAL ;ВОССТАНОВЛЕНИЕ ПЕРЕНОСА
ER3: INX D ;РАЗРЯД ЧАСТНОГО=1
INX SP
INX SP ;БАЛАНС СТЕКА
;ПРОВЕРКА КОНЦА ЦИКЛА
ADI 16
JNC ZIKL ;ЗАЦИКЛИВАНИЕ
STC ;CY=1
RET
;ПРОВЕРКА ПЕРЕНОСА ОТ СДВИГА ОСТАТКА
ER2: RAL ;ВОССТАНОВЛЕНИЕ ПЕРЕНОСА
JC ER3
;ВОССТАНОВЛЕНИЕ ОСТАТКА,ПРОВЕРКА КОНЦА ЦИКЛА
POP H
ADI 16
JNC ZIKL ;ЗАЦИКЛИВАНИЕ
STC ;CY=1
RET
SLOW:
;####################################################
;ПЕРЕСЫЛКА СЛОВА. MEM(DE) <- MEM(HL)
;####################################################
PUSH PSW
PUSH H
PUSH D
MOV A,M
STAX D
INX H
INX D
MOV A,M
STAX D
POP D
POP H
POP PSW
RET
USTB: ;*****************************************************
RET
DEBI: ;***************************************************
;* ПОДПРОГРАММА ПРЕОБРАЗОВАНИЯ ДВОИЧНО-ДЕСЯТИЧНОГО *
;* ЧИСЛА В ДВОИЧНОЕ. ВХОДНОЙ ПАРАМЕТР: (А), *
;* ВЫХОДНОЙ ПАРАМЕТР: (А). ВСЕ РЕГИСТРЫ СОХРАНЯЮТСЯ*
;***************************************************
PUSH B
;ВЫДЕЛЕНИЕ СТАРШЕЙ СТЦ И МЛАДШЕЙ МЛЦ ЦИФР ЧИСЛА
MOV B,A
ANI 0FH ;МАСКА НА МЛЦ
MOV C,A
MOV A,B
ANI 0F0H ;МАСКА НА СТЦ
RRC
MOV B,A
;ДВОИЧНОЕ СЛОЖЕНИЕ: СТЦ*(8+2)+МЛЦ
RRC
RRC
ADD B
ADD C
POP B
RET
RSB: ;****************************************************
;* П/П ПЕРЕДАЧИ БАЙТА ЧЕРЕЗ RS-232C *
;* ПЕРЕДАВАЕМЫЙ БАЙТ В РЕГИСТРЕ С *
;****************************************************
PUSH B
PUSH PSW
;ОЖИДАНИЕ ГОТОВНОСТИ КР580ВВ51 К ПЕРЕДАЧЕ БАЙТА
POL: LDA SARTC
ANI 01H ;0000 0001
JZ POL
;ОЖИДАНИЕ ГОТОВНОСТИ IBM К ПРИЕМУ БАЙТА
RUL: LDA SARTC
ANI 80H ;1000 0000
JZ RUL
;ПЕРЕДАЧА БАЙТА
MOV A,C
STA SARTD
POP PSW
POP B
RET
;*****************************************************
RSW: RET
;*****************************************************
MASS:
;*****************************************************
;* ПЕРЕПИСЬ МАССИВА ПО НОВОМУ АДРЕСУ *
;* B -ПРИЕМНИК, D -ИСТОЧНИК, H -ДЛИНА (В БАЙТАХ) *
;* РЕГИСТРЫ НЕ СОХРАНЯЮТСЯ *
;*****************************************************
LDAX D
STAX B
INX D
INX B
DCX H
MOV A,H
ORA L
JNZ MASS
RET
;****************************************************
SRED: ;* СРЕДНЕЕ ЗНАЧЕНИЕ ЭЛЕМЕНТОВ МАССИВА СЛОВ *
;* BC - ЧИСЛО ЭЛЕМЕНТОВ , HL - НАЧАЛЬНЫЙ АДРЕС, *
;* DE- СРЕДНЕЕ ЗНАЧЕНИЕ *
;****************************************************
;ОЧИСТКА СУММЫ
XRA A
STA BUFBIOS
STA BUFBIOS+1
STA BUFBIOS+2
STA BUFBIOS+3
STA BUFBIOS+4
PUSH B ;ЧИСЛО ЭЛЕМЕНТОВ В СТЕКЕ
MORE: MOV E,M ;ЧТЕНИЕ СЛАГАЕМОГО ЭЛЕМЕНТА МАССИВА
INX H ;И ПРИРАЩЕНИЕ АДРЕСА
MOV D,M
INX H
XCHG
DCX B ;ПРОВЕРКА КОНЦА
MOV A,B
ORA C
JZ DEL ;НА ДЕЛЕНИЕ
;СУММИРОВАНИЕ
XRA A ;ОБНУЛЕНИЕ ПРИЗНАКА (CY)
LDA BUFBIOS
ADD L
STA BUFBIOS
LDA BUFBIOS+1
ADC H
STA BUFBIOS+1
LDA BUFBIOS+2
ACI 0
STA BUFBIOS+2
LDA BUFBIOS+3
ACI 0
STA BUFBIOS+3
XCHG
JMP MORE
;ДЕЛЕНИЕ
DEL: POP B ;ДЕЛИТЕЛЬ В (ВС)
DCX B
LHLD BUFBIOS
XCHG
LHLD BUFBIOS+2 ;ДЕЛИМОЕ В (HLDE)
CALL ZD32A ;ЧАСТНОЕ В (DE)
RET
D16: ;***************************************************
;ПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА
;ФОРМАТА 16: 8=(8,8).
;МЕТОД ДЕЛЕНИЯ С ВОССТАНОВЛЕНИЕМ ОСТАТКА.
;ВХОДНЫЕ ПАРАМЕТРЫ: (HL)-ДЕЛИМОЕ, (C)-ДЕЛИТЕЛЬ.ВЫХОД-
;НЫЕ ПАРАМЕТРЫ: (H)-ОСТАТОК,(L)-ЧАСТНОЕ,CY-ПРИЗНАК
;ПЕРЕПОЛНЕНИЯ ЧАСТНОГО.ИСПОЛЬЗУЮТСЯ ВСЕ РЕГИСТРЫ,
;КРОМЕ (DE); СОХРАНЯЕТСЯ (С).
;ОЦЕНКА: ДЛИНА -28 БАЙТ,ВРЕМЯ НЕ БОЛЕЕ 619 ТАКТОВ
;***************************************************
;ПРОВЕРКА ЧАСТНОГО НА ПЕРЕПОЛНЕНИЕ: ЧАСТНОЕ > 8 БИТ ?
MOV A,H
SUB C
RNC ;ЕСЛИ ПЕРЕПОЛНЕНИЕ, CY=0
MVI B,8 ;СЧЕТЧИК ЦИКЛОВ
;СДВИГ ВЛЕВО ОСТАТКА И ЧАСТНОГО В (HL)
Q9: DAD H
MOV A,H ;(A)- СТБ ОСТАТКА
JC Q1 ;ЕСЛИ ПЕРЕПОЛНЕНИЕ ОСТАТКА
;ВЫЧИТАНИЕ ДЕЛИТЕЛЯ ИЗ ОСТАТКА
SUB C
JNC Q2 ;ЕСЛИ РАЗНОСТЬ > 0
;РАЗНОСТЬ < 0, ВОССТАНОВЛЕНИЕ ОСТАТКА
ADD C
MOV H,A
JMP Q3
;ПЕРЕПОЛНЕНИЕ ОСТАТКА,РАЗРЯД ЧАСТНОГО = 1
Q1: SUB C
Q2: MOV H,A
INX H ;+1 В ЧАСТНОЕ
;ПРОВЕРКА КОНЦА ЦИКЛА
Q3: DCR B
JNZ Q9 ;ЗАЦИКЛИВАНИЕ
STC ;CY=1
RET
;
FUNC: ;***************************************************
;* ВЫЧИСЛЕНИЕ ТАБЛИЧНОЙ ФУНКЦИИ *
;* ВХОДЫ: (HL)-АРГУМЕНТ, (DE)-ПЕРВЫЙ ТАБЛ. АРГУМЕНТ,*
;* (BC)-АДРЕС ТАБЛИЦЫ, (A)-ШАГ АРГУМЕНТА. *
;* ВЫХОД: (HL)-ЗНАЧЕНИЕ ФУНКЦИИ *
;***************************************************
;НАЧАЛЬНЫЕ УСТАНОВКИ
PUSH B ;АДРЕС ТАБЛИЦЫ В СТЕКЕ
MOV C,A ;ШАГ АРГУМЕНТА В (C)
;ОПРЕДЕЛЕНИЕ АДРЕСА ЗНАЧЕНИЯ ФУНКЦИИ
CALL ZDOPD
DAD D ;(HL)=(HL)-(DE)
CALL ZD16
MVI H,0 ;В (HL) ИНДЕКС
DAD H ;УДВОЕНИЕ ИНДЕКСА
POP B ;В (BC) АДРЕС ТАБЛИЦЫ
DAD B ;В (HL) АДРЕС ЗНАЧЕНИЯ
;ОПРЕДЕЛЕНИЕ ЗНАЧЕНИЯ ФУНКЦИИ
MOV E,M
INX H
MOV D,M
XCHG ;В (HL) ЗНАЧЕНИЕ ФУНКЦИИ
RET
GRAN: ;*************************************************
;* ВВЕДЕНИЕ АРГУМЕНТА В ГРАНИЦЫ *
;*ВХОДЫ: (HL)-АРГУМЕНТ,(DE)-МАКСИМУМ,(BC)-МИНИМУМ*
;*ВЫХОД: (HL)-АРГУМЕНТ В ГРАНИЦАХ *
;*************************************************
SHLD BUFBIOS
CALL ZDOPH
DAD D ;MAX-ARG
XRA A
MOV A,H
RAL
JNC DUNA ;ПРОВЕРЯЕМ ДАЛЬШЕ
MOV H,D
MOV L,E ;(HL)=MAX
JMP SESE
DUNA: LHLD BUFBIOS
CALL ZDOPH
DAD B ;MIN-ARG
XRA A
MOV A,H
RAL
JC NICH
MOV H,B
MOV L,C ;(HL)=MIN
JMP SESE
NICH: LHLD BUFBIOS
SESE: RET
COD: ;***************************************************
;* П/П ПЕРЕКОДИРОВКИ КОДА ДЛЯ ВЫВОДА НА ИНДИКАТОРЫ *
;* ВХОД: ЧИСЛО ОТ 0 ДО 16 В РЕГИСТРЕ А *
;* ВЫХОД: КОД СИМВОЛА ДЛЯ ВЫВОДА НА ИНДИКАТОРЫ В *
;* РЕГИСТРЕ А *
;***************************************************
PUSH H
PUSH D
LXI H,BCOD ;АДРЕС ТАБЛИЦЫ КОДОВ В HL
MVI D,0
MOV E,A
DAD D
MOV A,M
POP D
POP H
RET
;-----------------------------------------------
;ТАБЛИЦА КОДОВ ОТ 0 ДО 16
BCOD: DB 10H,0,1,2,3,4,6,9,11,5,7,8,10,13,14,15,12
;************************************************
;
;<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>
;<<<<< Н А Ч А Л О П Р О Г Р А М М Ы >>>>>>
;<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>
BEGIN: DI
;----------------------------------------------------
;УСТАНОВКА СТЕКА
LXI SP,STACK
;----------------------------------------------------
;ОЧИСТКА ОЗУ
LXI H,RAM ;НАЧАЛО
LXI D,STACK-100 ;КОНЕЦ
CALL ZDOPH
DAD D
LXI D,RAM
XCHG
MVI B,0
Q: MOV M,B
INX H
DCX D
MOV A,E
ORA D
JNZ Q
;----------------------------------------------------
;УСТАНОВКА БАЙТА СИНХРОНИЗАЦИИ НАЧАЛА СТРОКИ НА
;МОНИТОРЕ IBM
MVI A,55H
STA VIDEO
;----------------------------------------------------
;ПРОГРАММИРОВАНИЕ ППИ К580ВВ55
MVI A,92H ;1001 0010
STA RUSP ;PA,PB - ВВОД; PC - ВЫВОД
MVI A,10H ;ПОГАСИЛ ИНДИКАТОР
STA PRTC
;----------------------------------------------------
;ПРОГРАММИРОВАНИЕ ТАЙМЕРА 1
MVI A,34H ;0011 0100, РЕЖИМ 2, СЧЕТЧИК 0
STA RUST1
MVI A,0FFH
STA ST1Z0 ;МЛ. БАЙТ
STA ST1Z0 ;СТ. БАЙТ
;
MVI A,74H ;0111 0100, РЕЖИМ 2, СЧЕТЧИК 1
STA RUST1
MVI A,0FFH
STA ST1Z1 ;МЛ. БАЙТ
STA ST1Z1 ;СТ. БАЙТ
;
MVI A,0B4H ;1011 0100, РЕЖИМ 2, СЧЕТЧИК 2
STA RUST1
MVI A,0FFH
STA ST1Z2 ;МЛ. БАЙТ
STA ST1Z2 ;СТ. БАЙТ
;----------------------------------------------------
;ПРОГРАММИРОВАНИЕ ТАЙМЕРА 2
MVI A,34H ;0011 0100, РЕЖИМ 2, СЧЕТЧИК 0
STA RUST2 ;RST7.5 1ГЦ ИЗ TRAP 50ГЦ
MVI A,50
STA ST2Z0 ;МЛ. БАЙТ
MVI A,0
STA ST2Z0 ;СТ. БАЙТ
;
MVI A,74H ;0111 0100, РЕЖИМ 2, СЧЕТЧИК 1
STA RUST2 ;СИНХРОНИЗАЦИЯ A,B,C 180 КГЦ
MVI A,6
STA ST2Z1 ;МЛ. БАЙТ
MVI A,0
STA ST2Z1 ;СТ. БАЙТ
;
MVI A,0B4H ;1011 0100, РЕЖИМ 2, СЧЕТЧИК 2
STA RUST2 ;RS-232C 9600x16 ГЦ
MVI A,7
STA ST2Z2 ;МЛ. БАЙТ
MVI A,0
STA ST2Z2 ;СТ. БАЙТ
;----------------------------------------------------
;ПРОГРАММИРОВАНИЕ ПОСЛЕДОВАТЕЛЬНОГО ИНТЕРФЕЙСА
MVI A,0CEH ;1100 1110,ПОСЫЛКА 8 БИТ,2 СТОП-БИТА,
STA SARTC ;9600х16, НЕТ БИТА ПАРИТЕТА
MVI A,1
STA SARTC ;РЕЖИМ ПЕРЕДАЧИ
;---------------------------------------------------
;УСТАНОВКА ДУБЛЕЙ ПОРТОВ
LDA PRTA
STA DPRTA
LDA PRTB
STA DPRTB
MVI A,0
STA IND
;---------------------------------------------------
;ОПРЕДЕЛЕНИЕ ДИСКРЕТНОСТИ УПРАВЛЕНИЯ В СЕКУНДАХ
;от 30 сек до 8 минут (15х30+30 сек)
LDA PRTA ;ПРИ КОЭФ.=0 DISKU=STEPU
ANI 0FH
MOV C,A ;КОЭФФИЦИЕНТ
LHLD STEPU ;ШАГ
MOV E,L
CALL ZY88B
XCHG
LHLD STEPU
DAD D
SHLD DISKU ;ДИСКРЕТНОСТЬ УПРАВЛЕНИЯ
;----------------------------------------------------
;ОПРЕД. ЗАДАНИЯ ФИ от -30град до +30град (15х2град)
LDA PRTA ;ПРИ КОЭФ.=0 ZADF=0
RAR
RAR
RAR
RAR
ANI 0FH
MOV C,A ;КОЭФФИЦИЕНТ
LHLD STEPZ ;ШАГ
MOV E,L
CALL ZY88B
LDA PRTB ;ЗНАК:
ANI 80H ;"0" -ЕМКОСТНОЙ КВАДРАНТ "+"
JNZ VPER ;"1" -ИНДУКТИВНЫЙ КВАДРАНТ "-"
CALL ZDOPH
VPER: SHLD ZADF ;ЗАДАНИЕ В ДОПОЛНИТЕЛЬНОМ КОДЕ
;----------------------------------------------------
;ОПРЕДЕЛЕНИЕ НЕЧУВСТВИТЕЛЬНОСТИ УПРАВЛЕНИЯ
;от 2 град до 32 град (15х2+2 град)
LDA PRTB ;ПРИ КОЭФ.=0 NECH=STEPN
ANI 0FH
MOV C,A ;КОЭФФИЦИЕНТ
LHLD STEPN ;ШАГ
MOV E,L
CALL ZY88B
XCHG
LHLD STEPN
DAD D
SHLD NECH ;НЕЧУВСТВИТЕЛЬНОСТЬ
;----------------------------------------------------
;ТЕСТ СВЕТОДИОДОВ
MVI C,10H
XXX: MOV A,C
CALL ZCOD
STA PRTC
MVI B,0
XX: MVI D,128
ZZ: DCR D
JNZ ZZ
DCR B
JNZ XX
DCR C
JNZ XXX
LDA IND ;ВОССТАНАВЛИВАЮ СВЕТОДИОДЫ
CALL ZCOD
STA PRTC
;----------------------------------------------------
;УСТАНОВКА СЧЕТЧИКОВ ПРЕРЫВАНИЙ RST7.5,TRAP
LHLD DISKU
SHLD CINT
LDA DISKW
STA CNMI
;-----------------------------------------------------
;СБРОС ТРИГГЕРА RST7.5
MVI A,10H ;0001 0000
DB 30H ;КОМАНДА SIM
;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ МИКРОПРОЦЕССОРА
EI
MVI A,18H
DB 30H
BASE: ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;$ ЦИКЛ ОСНОВНОЙ ПРОГРАММЫ, ПРЕРЫВАЕМЫЙ $
;$ ВРЕМЯ ОТ ВРЕМЕНИ ЗАПРОСАМИ TRAP, RST7.5 $
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ПРОВЕРКА ВЫКЛЮЧАТЕЛЯ, РАЗРЕШАЮЩЕГО ПЕРЕДАЧУ
;ВИДЕОБУФЕРА В IBM
LDA PRTB
ANI 40H ;0100 0000
JZ FLA ;НЕТ РАЗРЕШЕНИЯ
;ПЕРЕДАЧА ВИДЕОБУФЕРА В IBM
MVI B,12H ;СЧЕТЧИК БАЙТОВ ВИДЕОБУФЕРА
LXI H,VIDEO
MALO: MOV C,M ;ПЕРЕДАВАЕМЫЙ БАЙТ В (С)
CALL ZRSB
INX H
DCR B
JNZ MALO
;ПОДСВЕТКА СВЕТОДИОДОВ
FLA: MVI C,10H
YYY: MOV A,C
CALL ZCOD
STA PRTC
DCR C
JNZ YYY
LDA IND ;ВОССТАНАВЛИВАЮ СВЕТОДИОДЫ
CALL ZCOD
STA PRTC
;ЗАДЕРЖКА ВРЕМЕНИ
MVI B,0
ZX: MVI D,10
YY: DCR D
JNZ YY
DCR B
JNZ ZX
JMP BASE
;-----------------------------------------------
;****************************************************
;* ОБРАБОТКА ПРЕРЫВАНИЯ TRAP 20MC *
;****************************************************
TRAP: PUSH PSW
PUSH B
PUSH D
PUSH H
;ДИСПЕТЧЕР ПРЕРЫВАНИЯ:
;ОБРАБАТЫВАЮ ТОЛЬКО КАЖДОЕ DISKW-ОЕ ПРЕРЫВАНИЕ
LDA CNMI ;СЧИТЫВАНИЕ СЧЕТЧИКА ПРЕРЫВАНИЯ
DCR A ;ДЕКРЕМЕНТ СЧЕТЧИКА ПРЕРЫВАНИЯ
STA CNMI ;ЗАПИСЬ В СЧЕТЧИК ПРЕРЫВАНИЯ
JNZ EN ;НА КОНЕЦ
LDA DISKW ;УСТАНОВКА СЧЕТЧИКА ПРЕРЫВАНИЯ
STA CNMI
;СЧИТЫВАНИЕ СЧЕТЧИКОВ A,B,C ТАЙМЕРА 1
;ИНВЕРСИЯ И ЗАПИСЬ В БУФЕР
MVI A,04H ;0000 0100
STA RUST1
LDA ST1Z0 ;МЛ. БАЙТ
CMA
MOV L,A
LDA ST1Z0 ;СТ. БАЙТ
CMA
MOV H,A
SHLD BUFER
;-----------------------
MVI A,44H ;0100 0100
STA RUST1
LDA ST1Z1 ;МЛ. БАЙТ
CMA
MOV L,A
LDA ST1Z1 ;СТ. БАЙТ
CMA
MOV H,A
SHLD BUFER+2
;----------------------
MVI A,084H ;1000 0100
STA RUST1
LDA ST1Z2 ;МЛ. БАЙТ
CMA
MOV L,A
LDA ST1Z2 ;СТ. БАЙТ
CMA
MOV H,A
SHLD BUFER+4
;ПРОГРАММИРОВАНИЕ ТАЙМЕРА 1
MVI A,34H ;0011 0100, РЕЖИМ 2, СЧЕТЧИК 0
STA RUST1
MVI A,0FFH
STA ST1Z0 ;МЛ. БАЙТ
STA ST1Z0 ;СТ. БАЙТ
;
MVI A,74H ;0111 0100, РЕЖИМ 2, СЧЕТЧИК 1
STA RUST1
MVI A,0FFH
STA ST1Z1 ;МЛ. БАЙТ
STA ST1Z1 ;СТ. БАЙТ
;
MVI A,0B4H ;1011 0100, РЕЖИМ 2, СЧЕТЧИК 2
STA RUST1
MVI A,0FFH
STA ST1Z2 ;МЛ. БАЙТ
STA ST1Z2 ;СТ. БАЙТ
;----------------------------------------------------
;ЗАПИСЬ В ВИДЕОБУФЕР*******************************************
LHLD ASRED
SHLD VIDEO+2
LHLD BSRED
SHLD VIDEO+4
LHLD CSRED
SHLD VIDEO+6
LHLD ZADF
SHLD VIDEO+8
LHLD FI
SHLD VIDEO+10
LHLD DFI
SHLD VIDEO+12
LHLD NECH
SHLD VIDEO+14
LHLD ERRO
SHLD VIDEO+16
;----------------------
;ВЫВОД УПРАВЛЕНИЯ В MBR
EN: LHLD DMBRD
SHLD MBRD
POP H
POP D
POP B
POP PSW
EI
RET
;
;****************************************************
;* ОБРАБОТКА ПРЕРЫВАНИЯ RST7.5 1CЕК *
;****************************************************
RST75: PUSH PSW
PUSH B
PUSH D
PUSH H
;ДИСПЕТЧЕР ПРЕРЫВАНИЯ:
;КАЖДУЮ СЕКУНДУ ОТРАБАТЫВАЕТ П/П WRITE
;ЧЕРЕЗ DISK СЕКУНД НАЧИНАЕТ РАБОТАТЬ П/П CONTROL
MVI A,10H
DB 30H ;СБРОС ТРИГГЕРА RST7.5
CALL WRITE
LHLD CINT ;СЧИТЫВАНИЕ СЧЕТЧИКА ПРЕРЫВАНИЯ
DCX H ;ДЕКРЕМЕНТ СЧЕТЧИКА ПРЕРЫВАНИЯ
MOV A,H
ORA L
SHLD CINT ;ЗАПИСЬ СЧЕТЧИКА ПРЕРЫВАНИЯ
JNZ ENN ;НА КОНЕЦ
LHLD DISKU ;УСТАНОВКА СЧЕТЧИКА ПРЕРЫВАНИЯ
SHLD CINT
CALL CONTROL ;ВЫЗОВ CONTROL
ENN: POP H
POP D
POP B
POP PSW
EI
RET
;****************************************************
WRITE: ;* ПОДПРОГРАММА ПЕРЕЗАПИСИ ИЗ БУФЕРА В СКОЛЬЗЯЩИЕ *
;* МАССИВЫ A,B,C ФИКСИРОВАННОЙ ДЛИНЫ 127 СЛОВ *
;****************************************************
;СДВИГ МАССИВА ВЛЕВО НА МЕСТО ПУСТЫШКИ
LXI B,APUS ;ПРИЕМНИК
LXI D,ABEG ;ИСТОЧНИК
LXI H,LONG ;ДЛИНА
CALL ZMASS
;------------------------
LXI B,BPUS ;ПРИЕМНИК
LXI D,BBEG ;ИСТОЧНИК
LXI H,LONG ;ДЛИНА
CALL ZMASS
;------------------------
LXI B,CPUS ;ПРИЕМНИК
LXI D,CBEG ;ИСТОЧНИК
LXI H,LONG ;ДЛИНА
CALL ZMASS
;------------------------
;ПЕРЕЗАПИСЬ ИЗ БУФЕРА В МАССИВ
LHLD BUFER
SHLD AEND
LHLD BUFER+2
SHLD BEND
LHLD BUFER+4
SHLD CEND
RET
;****************************************
CONTROL: ;* ПОДПРОГРАММА УПРАВЛЕНИЯ КОМПЕНСАЦИЕЙ *
;****************************************
;
;ПРОВЕРКА ЗАПОЛНЕНИЯ МАССИВОВ A,B,C
LHLD APUS
MOV A,L
ORA H
JZ KONEC
;----------------------------------------
;УСРЕДНЕНИЕ ЗНАЧЕНИЙ A,B,C
LXI B,LONGW
LXI H,ABEG
CALL ZSRED
XCHG
SHLD ASRED
;---------
LXI B,LONGW
LXI H,BBEG
CALL ZSRED
XCHG
SHLD BSRED
;---------
LXI B,LONGW
LXI H,CBEG
CALL ZSRED
XCHG
SHLD CSRED
;
;ОСОБЫЕ СИТУАЦИИ
;===============
;ТОК МЕНЬШЕ МИНИМАЛЬНОГО?
;------------------------------------------
;ОПРЕДЕЛЕНИЕ РАЗНОСТИ
LHLD BSRED ;Imin - I
CALL ZDOPH
XCHG
LXI H,BMIN
DAD D
SHLD DELB ;РАЗНОСТЬ В ДОП. КОДЕ
;ОПРЕДЕЛЕНИЕ ЗНАКА РАЗНОСТИ DELB
LHLD DELB
MOV A,H
RAL
JC MINU
;ПРИ DELB>0 ВЫКЛЮЧАЕМ КОНДЕНСАТОР
MVI A,2 ;--------------------------------------
STA UPR ;--------------------------------------
JMP OSOB ;--------------------------------------
MINU: ;ПРОВЕРКА НА ВХОЖДЕНИЕ В ЗОНУ НЕЧУВСТВИТЕЛЬНОСТИ ПРИ DELB<0
LHLD DELB
XCHG
LXI H,NECHB
DAD D ;НЕЧУВСТВИТЕЛЬНОСТЬ-РАЗНОСТЬ
MOV A,H
RAL
JC PROV ;ПРИ ВЫХОДЕ ИЗ ЗОНЫ НЕЧУВСТ.(ОТРИЦ. РЕЗУЛЬТАТ)
;ПЕРЕХОД К ПРОВЕРКЕ ВЕЛИЧИНЫ НАПРЯЖЕНИЯ
;ПРИ ВХОЖДЕНИИ В ЗОНУ (ПОЛОЖ.РЕЗУЛЬТАТ) НИЧЕГО НЕ ДЕЛАЮ
MVI A,0 ;======================================
STA UPR ;======================================
JMP OSOB ;======================================
;
PROV: ;НАПРЯЖЕНИЕ БОЛЬШЕ МАКСИМАЛЬНОГО (410 ВОЛЬТ)?
;------------------------------------------
;ОПРЕДЕЛЕНИЕ РАЗНОСТИ
LHLD ASRED ;Umax-U
CALL ZDOPH
XCHG
LXI H,AMAX
DAD D
SHLD DELA ;РАЗНОСТЬ В ДОП. КОДЕ
;ОПРЕДЕЛЕНИЕ ЗНАКА РАЗНОСТИ DELA
LHLD DELA
MOV A,H
RAL
JNC PL
;ПРИ DELA<0 ВЫКЛЮЧАЕМ КОНДЕНСАТОР
MVI A,2 ;--------------------------------------
STA UPR ;--------------------------------------
JMP OSOB ;--------------------------------------
PL: ;ПРОВЕРКА НА ВХОЖДЕНИЕ В ЗОНУ НЕЧУВСТВИТЕЛЬНОСТИ ПРИ DA>0
LHLD DELA
XCHG
LXI H,NECHA
CALL ZDOPH
DAD D ;РАЗНОСТЬ-НЕЧУВСТВИТЕЛЬНОСТЬ
MOV A,H
RAL
JNC OBRAB ;ПРИ ВЫХОДЕ ИЗ ЗОНЫ НЕЧУВСТ.(ПОЛОЖ. РЕЗУЛЬТАТ )
;ПЕРЕХОД К РЕГУЛИРОВАНИЮ ФИ
;ПРИ ВХОЖДЕНИИ В ЗОНУ (ОТРИЦ. РЕЗУЛЬТАТ) НИЧЕГО НЕ ДЕЛАЮ
MVI A,0 ;======================================
STA UPR ;======================================
JMP OSOB ;======================================
;
OSOB: ;ДЛЯ ИНДИКАЦИИ НА ПЭВМ ДЕЛАЮ
LXI H,0
SHLD FI
SHLD DFI
JMP KONEC
;----------------------------------
OBRAB: ; РАСЧЕТ УПРАВЛЕНИЯ В НОРМАЛЬНЫХ СИТУАЦИЯХ
;==========================================
;ВЫЧИСЛЕНИЕ ФИ В ДИСКРЕТАХ
;-------------------------
;ОПРЕДЕЛЕНИЕ СМЕЩЕНИЯ F(A)
LHLD ASRED ;АРГУМЕНТ
LXI B,700 ;MIN
LXI D,1300 ;MAX
CALL ZGRAN ;ГРАНИЦЫ
LXI D,700 ;ПЕРВЫЙ ТАБЛИЧНЫЙ АРГУМЕНТ
LXI B,TABL ;АДРЕС ТАБЛИЦЫ
MVI A,10 ;ШАГ АРГУМЕНТА
CALL ZFUNC
SHLD FA
;ОПРЕДЕЛЕНИЕ СМЕЩЕНИЯ F(B)
LHLD BSRED ;АРГУМЕНТ
LXI B,700 ;MIN
LXI D,1300 ;MAX
CALL ZGRAN ;ГРАНИЦЫ
LXI D,700 ;ПЕРВЫЙ ТАБЛИЧНЫЙ АРГУМЕНТ
LXI B,TABL ;АДРЕС ТАБЛИЦЫ
MVI A,10 ;ШАГ АРГУМЕНТА
CALL ZFUNC
SHLD FB
;ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЯ ФИ=C-(((A-FA)-(B-FB))/2+000)
LHLD ASRED
XCHG
LHLD FA
CALL ZDOPH
DAD D
PUSH H
LHLD BSRED
XCHG
LHLD FB
CALL ZDOPH
DAD D
CALL ZDOPH ;(HL)=-(B-FB)
POP D ;(DE)=A-FA
DAD D ;(HL)=СУММА
XRA A
MOV A,H
RAR
MOV H,A
MOV A,L
RAR
MOV L,A ;(HL)=СУММА/2
LXI D,000
DAD D
CALL ZDOPH
XCHG
LHLD CSRED ;В (HL) C
DAD D
SHLD FI ;УГОЛ ФИ В ДОПОЛНИТЕЛЬНОМ КОДЕ
;
;ОПРЕДЕЛЕНИЕ РАССОГЛАСОВАНИЯ
;---------------------------
LHLD FI ;ЗАДАНИЕ-ТЕК.ФИ
CALL ZDOPH
XCHG
LHLD ZADF
DAD D
SHLD DFI ;РАССОГЛОСОВАНИЕ В ДОП. КОДЕ
;ВЫЧИСЛЕНИЕ УПРАВЛЕНИЯ
;=====================
;ОПРЕДЕЛЕНИЕ ЗНАКА РАССОГЛАСОВАНИЯ DFI
LHLD DFI
MOV A,H
RAL
JNC PLUS
;ПРИ DFI<0 ВЫКЛЮЧАЕМ КОНДЕНСАТОР
MVI A,2 ;--------------------------------------
STA UPR ;--------------------------------------
JMP KONEC ;--------------------------------------
PLUS: ;ПРОВЕРКА НА ВХОЖДЕНИЕ В ЗОНУ НЕЧУВСТВИТЕЛЬНОСТИ ПРИ DFI>0
LHLD DFI
XCHG
LHLD NECH
CALL ZDOPH
DAD D ;РАССОГЛАСОВАНИЕ-НЕЧУВСТВИТЕЛЬНОСТЬ
MOV A,H
RAL
JNC ZONA ;ПРИ ВЫХОДЕ ИЗ ЗОНЫ НЕЧУВСТ.(ПОЛОЖ. РАЗНОСТЬ)
;ПРИ ВХОЖДЕНИИ В ЗОНУ (ОТРИЦ. РАЗНОСТЬ) НИЧЕГО НЕ ДЕЛАЮ
MVI A,0 ;======================================
STA UPR ;======================================
JMP KONEC ;======================================
ZONA: ;ПРИ ВЫХОДЕ РАССОГЛАСОВАНИЯ ИЗ ЗОНЫ ВКЛЮЧАЮ КОНДЕНСАТОР
MVI A,1 ;++++++++++++++++++++++++++++++++++++++
STA UPR ;++++++++++++++++++++++++++++++++++++++
JMP KONEC ;++++++++++++++++++++++++++++++++++++++
;
KONEC: ;УПРАВЛЕНИЕ КОНДЕНСАТОРНОЙ БАТАРЕЕЙ
;==================================
LDA UPR
CPI 0
JZ REV1 ;НИЧЕГО НЕ НАДО
CPI 1
JZ REV2 ;БУДЕМ ВКЛЮЧАТЬ КОНДЕНСАТОР
;ВЫКЛЮЧЕНИЕ КОНДЕНСАТОРА (ВИД НА ИНДИКАТОРЫ)
;-------------------------------------------
LDA IND
CPI 0
JZ KRAS
DCR A
JMP KRAS
REV2: ;ВКЛЮЧЕНИЕ КОНДЕНСАТОРА (ВИД НА ИНДИКАТОРЫ)
;------------------------------------------
LDA IND
CPI 16
JZ KRAS
INR A
KRAS: STA IND
;ПЕРЕКОДИРУЮ И ЗАЖИГАЮ ИНДИКАТОР
;-------------------------------
LDA IND
CALL ZCOD
STA PRTC
;РАСПОЗНАНИЕ ПОРЯДКА ВКЛЮЧЕНИЯ КОММУТАТОРОВ
;------------------------------------------
LDA DPRTB
ANI 20H ;0010 0000
JNZ VAR1
;ЗАПИСЬ УПРАВЛЕНИЯ В ДУБЛЬ MBR
;-----------------------------
LDA IND
CPI 00
JNZ M1
LXI H,0000H
JMP VVV
M1: CPI 01
JNZ M2
LXI H,8000H
JMP VVV
M2: CPI 02
JNZ M3
LXI H,0C000H
JMP VVV
M3: CPI 03
JNZ M4
LXI H,0E000H
JMP VVV
M4: CPI 04
JNZ M5
LXI H,0F000H