
;Версия N8 спектрофотометра
;В связи с заездом ШД в не рабочую зону вводится ограничение в подпрограмме stepP.
; чтобы общее количество шагов не превышало 9500 от нулевой линии


;Версия N3 спектрофотометра для приборов начиная с N11.
;Изменено направление вращения шагового двигателя.
;Версия 4. Переработана процедура измерения (256 раз)
;Добавлена в работу по методикам с бланками клавиша ENTER по которой происходит
;измерение бланков.
;Версия 6. Процедура измерения 4096 раз. Добавлена градация яркости лампы.
;В режиме непрерывных измерений введено уменьшение яркости лампочки при повышенной яркости.
;Версия 7. Введена поправка репера и в программах с бланками по нажатию Enter измеряется бланк пробы (исключены измерения стандартов)

;-----------------------------------------------------------------------------
;  Copyright (C) 2004 Silicon Laboratories, Inc.
;  All rights reserved.
;			
;
;
;  FILE NAME   :  BLINK.ASM 
;  TARGET MCU  :  C8051F060/1/2/3 
;NOTES: 
;
;-----------------------------------------------------------------------------

$include (c8051f060.inc)               ; Include register definition file.

;-----------------------------------------------------------------------------
; EQUATES
;-----------------------------------------------------------------------------
bf      	equ     0E7h    ;седьмой бит аккумулятора
istochnik	equ	P7
rs		equ	p7.1
rw		equ	p7.2
e		equ	p7.3
trstat          equ     P7.0    ;бит управления термостатом
lamp	        equ	P2.0	;бит включения лампы "1" - ВЫКЛЮЧЕНО
medLamp         equ     P2.1    ;бит на среднее напряжение лампы "1" включено
maxLamp         equ     P2.2    ;бит на максимум включения лампы "1" включено

SINC            equ     P0.7    ;бит синхронизации сети






KomandEF        equ     24h.7   ;бит прихода команды 0E 0F по IRPS


;********************************************************************
;Ячейки 24h и 25h отведены под I2C шину и менять их положение нельзя 
;по причине утапливания их в стек для подпрограммы обработки прерываний TM2
;называются они J1,J2
J1              equ     25h
;25h
RorW 		equ 	25h.0 	; R/W командный бит. 1=READ, 0=WRITE
SM_BUSY 	equ 	25h.1 	; Флаг занятости шины  (kept in software)
DS1624          equ     25h.2   ; признак обращения к  DS1624    
DS1307          equ     25h.3   ; признак обращения к  DS1307
;25h
FM2464          equ     25h.4   ; признак обращения к  FM2464
Command         equ     25h.5   ;признак подачи команды для DS1624 (передается один байт)
prAdr           equ     25h.6   ;признак наличия данных
prDan           equ     25h.7   ;признак наличия данных
J2              equ     26h
;26h
Adr2B           equ     26h.0   ;признак двухбайтного адреса
Dan2B           equ     26h.1   ;признак двухбайтных данных
Com2B           equ     26h.2   ;признак двухбайтной команды (чтение температуры)
Strt_Conv       equ     26h.3   ;признак команды начала преобразования
;26h
Wr_St           equ     26h.4   ;установка регистра статуса
Epr_Ds          equ     26h.5   ;признак записи в EEPROM DS1624
rdTemp          equ     26h.6   ;признак команды чтения температуры
Byte_Posl       equ     26h.7   ;признак последнего передаваемого байта

;-------------------------------------------------------------------------
;27h
BitSEC  equ     27h.0   ; бит отсчета секунд
IRP1    equ     27h.1
strtKin equ     27h.2   ;BUF     equ     21h.2
prDan2  equ     27h.3
t       equ     27h.4   ;0 - плотность, 1 - пропускание
incL    equ     27h.5
napr    equ     27h.6   ;бит направл. 0 - > дл.волны, 1 - < дл.волны
neprer  equ     27h.7   ;бит режима измерения D и T (непр. или одиночн.)

;28h
konec   equ     28h.0   ;бит - признак нажатия клавиши СТОП для выхода
                        ;из процедуры в предыд. диалог
enter   equ     28h.1   ;бит - признак нажатия клавиши ВВОД
zpt     equ     28h.2   ;бит - признак ввода запятой
zptK    equ     28h.3   ;бит - признак ввода запятой,после которого не
                        ;анализ. запятая
sig     equ     28h.4   ;бит - признак знака: 0 - +, 1 - -
nul1    equ     28h.5   ;бит - признак измерения контроля
stand   equ     28h.6   ;бит - признак измерения стандарта
BlSt    equ     28h.7   ;бит - признак измерения бланка стандарта
;29h
BlPr    equ     29h.0   ;бит - признак измерения бланка пробы
BitKomE equ     29h.1   ;бит - признак прихода по интерфейсу команды
                        ;начинающейся с 0Eh                          
BitKom5 equ     29h.2   ;бит признак команды перестройки на текущую длину волны
prTrst  equ     29h.3   ;бит признак включения термостата
prSmT   equ     29h.4   ;признак смены температуры
prF     equ     29h.5   ;признак нажатия функциональной клавиши  F
timEnd  equ     29h.6   ;признак истечения времени для кинетики
bitTTT  equ     29h.7   ;бит признак что шел нагрев термостата до процедуры измерения

yskor	equ	2Ah.0

;NP      equ     2Ah     ;номер программы
podRej  equ     2Bh     ;подрежим при программировании
;---------------------------------------------------------------
;           бланки    F.S.G     режим.      примечание
;---------------------------------------------------------------
;  00         00        00         00       к.т F без бл.
;  00         00        01         00       к.т S без бл.
;  00         00        10         00       к.т G без бл.
;  00         01        00         00       к.т F с бл. пробы

;  00         01        01         00       к.т S с бл. пробы
;  00         10        01         00       к.т S с бл. станд.
;  00         11        01         00       к.т S с бл. пробы + станд.
;  00         00        00         01       2.в F без бл.
;  00         00        01         01       2.в S без бл.
;  00         00        10         01       2.в G без бл.
;  00         00        00         10       кин. F без бл.
;  00         00        01         10       кин. S без бл.
;  00         00        10         10       кин. G без бл.
;******************************************************************
;DANh    equ     28h             ;ячейки данных для I2C шины (старший байт)
;DANl    equ     29h             ;ячейки данных для I2C шины (младший байт)

YSR     equ     2Ch     ;счетчик секунд для более яркого горения лампочки

;БЫЛО                        ;ячейка количества усреднений
                        ;0 - 1 измерение
                        ;1 - 2 измерения
                        ;2 - 4 измерения
                        ;3 - 8 измерений
                        ;4 - 16 измерений
                        ;5 - 32 измеренния
StRS    equ     2Dh

;codeH   equ     2Ch
;codeL   equ     2Dh
Rejim   equ     2Eh     ;ячейка для занесения режима
                        ;0h - измерение плотности
                        ;1h - измерение пропускания
                        ;2h - работа по программам
                        ;3h - запись программ
                        ;4h - настройки
                        ;5h - печать программ
                        ;6h - печать результатов



M6      equ     2Fh     ;для задержки

BIN0    equ     30h     ;ячейки для целых двоичных чисел с фикс. запятой
BIN1    equ     31h     ;
BIN2    equ     32h     ;
BIN3    equ     33h     ;ячейки для дробных двоичных чисел с фикс. запятой
BIN4    equ     34h     ;
sizeH   equ     34h
BIN5    equ     35h     ;
sizeL   equ     35h
StCikl  equ     36h     ;счетчик циклов (pok, sqrt)
PokSt   equ     37h     ;показатель степени (lg, pok, sin, cos, arcsin)
DES0    equ     38h     ;ячейки для целых десятичных чисел с фикс. запятой
DES1    equ     39h
DES2    equ     3Ah
DES3    equ     3Bh
DES4    equ     3Ch     ;ячейки для дробных десятичных чисел с фикс. запятой
DES5    equ     3Dh
DES6    equ     3Eh
ERROR   equ     3Fh     ;ячейка кодов ошибок
ADR0    equ     40h     ;ячейки плавающей арифметики
ADR1    equ     41h
ADR2    equ     42h
ADR3    equ     43h
ADR4    equ     44h
ADR5    equ     45h
ADR6    equ     46h
ADR7    equ     47h
ADR8    equ     48h
ADR9    equ     49h
ADR10   equ     4Ah
ADR11   equ     4Bh
ADR12   equ     4Ch
ADR13   equ     4Dh
ADR14   equ     4Eh
ADR15   equ     4Fh
FAZ     equ     50h     ;ячейка сохранения фазы ШД
ADRh    equ     51h
ADRl    equ     52h
StErr   equ     53h     ;временно используемая ячейка для I2C шины
TekWlH  equ     54h     ;старший байт текущей длины волны
TekWlL  equ     55h     ;младший байт текущей длины волны
ModWlH  equ     56h     ;старший байт модифицируемой длины волны
ModWlL  equ     57h     ;младший байт модифицируемой длины волны
TekSdH  equ     58h     ;старшая ячейка текущего положения ШД
TekSdL  equ     59h     ;младшая ячейка текущего положения ШД


NP	equ     5Ah	;номер программы


MlMl    equ     5Bh     ;мл. байт меньш. числа
MlSt    equ     5Ch     ;ст. байт меньш. числа
StMl    equ     5Dh     ;мл. байт больш. числа
StSt    equ     5Eh     ;ст. байт больш. числа
ChMl    equ     5Fh     ;мл. байт числа
ChSt    equ     60h     ;ст. байт числа
I1h     equ     61h     ;старший байт измерительного канала перв.дл.волны
I1m     equ     62h     ;средний байт измерительного канала перв.дл.волны
I1l     equ     63h     ;младший байт измерительного канала перв.дл.волны




;I2h     equ     64h     ;старший байт измерительного канала втор.дл.волны
;I2m     equ     65h     ;средний байт измерительного канала втор.дл.волны
;I2l     equ     66h     ;младший байт измерительного канала втор.дл.волны
codeH   equ     64h
codeL   equ     65h
;?


I1oh    equ     67h     ;старший байт опорного канала перв.дл.волны
I1om    equ     68h     ;средний байт опорного канала перв.дл.волны
I1ol    equ     69h     ;младший байт опорного канала перв.дл.волны


I2oh    equ     6Ah     ;старший байт опорного канала втор.дл.волны
DANh    equ     6Bh             ;ячейки данных для I2C шины (старший байт)
DANl    equ     6Ch             ;ячейки данных для I2C шины (младший байт)
;I2om    equ     6Bh     ;средний байт опорного канала втор.дл.волны
;I2ol    equ     6Ch     ;младший байт опорного канала втор.дл.волны
Izh     equ     6Dh     ;старший байт нуля измерительного канала
Izm     equ     6Eh     ;средний байт нуля измерительного канала
Izl     equ     6Fh     ;младший байт нуля измерительного канала
Iozh    equ     70h     ;старший байт нуля опорного канала
Iozm    equ     71h     ;средний байт нуля опорного канала
Iozl    equ     72h     ;младший байт нуля опорного канала
ItIh	equ	73h	;старший байт темнового тока измерительного канала
ItIm	equ	74h	;средний байт темнового тока измерительного канала
ItIl	equ	75h	;младший байт темнового тока измерительного канала
ItOh	equ	76h	;старший байт темнового тока опорного канала
ItOm	equ	77h	;средний байт темнового тока опорного канала
ItOl	equ	78h	;младший байт темнового тока опорного канала
;ACPh    equ     79h     ;ячейки АЦП
;ACPl    equ     7Ah
KOp     equ     79h     ;ячейки для работы по IRPS
M1      equ     7Ah
M2      equ     7Bh
M3      equ     7Ch
M4      equ     7Dh     ;ячейки совпадают с другими
M5      equ     7Eh
prJ     equ     7Fh     ;промежуточная ячейка на все случаи
;StErr   equ     7Fh     ;временно используемая ячейка для I2C шины
ZN1     equ     80h     ;индикаторные ячейки
ZN2     equ     81h
ZN3     equ     82h
ZN4     equ     83h
ZN5     equ     84h
ZN6     equ     85h
ZN7     equ     86h
ZN8     equ     87h
ZN9     equ     88h
ZN10    equ     89h
ZN11    equ     8Ah
ZN12    equ     8Bh
ZN13    equ     8Ch
ZN14    equ     8Dh
ZN15    equ     8Eh
ZN16    equ     8Fh


KIN0    equ     90h     ;байт сохранения времени для кинетики
KIN1    equ     91h     ;байт сохранения времени для кинетики
KIN2    equ     92h     ;байт сохранения времени для кинетики
KIN3    equ     93h     ;байт сохранения времени для кинетики

KIN4    equ     94h     ;байт сохранения всего времени для кинетики
KIN5    equ     95h     ;байт сохранения всего времени для кинетики
KIN6    equ     96h     ;байт сохранения всего времени для кинетики
KIN7    equ     97h     ;байт сохранения всего времени для кинетики

DELT0   equ     98h     ;ячейки сохранения в подпрограмме delta
DELT1   equ     99h
DELT2   equ     9Ah
DELT3   equ     9Bh

Cv0     equ     9Ch     ;ячейки сохранения коэффициента вариации
Cv1     equ     9Dh
Cv2     equ     9Eh
Cv3     equ     9Fh

;Wl1h    equ     90h     ;ячейки хранения длин волн для 2-х и 3-х волно-
;Wl1l    equ     91h     ;вых измерений
;Wl2h    equ     92h
;Wl2l    equ     93h
;Wl3h    equ     94h
;Wl3l    equ     95h
;;               96h
;Iz2m    equ     97h     ;средний байт нуля измерительного канала на второй длине волны
;Iz2l    equ     98h     ;младший байт нуля измерительного канала на второй длине волны
;Ioz2h   equ     99h     ;старший байт нуля опорного канала на второй длине волны
;Ioz2m   equ     9Ah     ;средний байт нуля опорного канала на второй длине волны
;Ioz2l   equ     9Bh     ;младший байт нуля опорного канала на второй длине волны
;----------------------------------------------------------------------



Test    equ     0A0h    ;флаг записи программы
			;если программа записана то заносится число 66H
			;или E6H когда стандарт был измерен.
ZnFakt  equ     0A1h    ;знак фактора в старшем бите 0 - "+", 1 - "-"

			;младшая тетрада - 1 - запятая после первой цифры, 
			;		   2 - после второй, 
			;		   3 - после третьей,
			;		   4 - целое число без запятых.
FaktH   equ     0A2h    ;старший байт фактора
FaktL   equ     0A3h    ;младщий -...
		
Rej     equ     0A4h    ;режим измерения
Blank   equ     0A5h    ;режим с бланками  (не используется пока)
Lw1h    equ     0A6h    ;старший байт первой длины волны
Lw1l    equ     0A7h    ;младший байт первой длины волны
Lw2h    equ     0A8h    ;старший байт второй длины волны
Lw2l    equ     0A9h    ;младший байт второй длины волны
Unit1   equ     0AAh    ;единица измерения
Metod   equ     0ABh    ;методика
LagH    equ     0ACh    ;длительность лагфазы для кинетики
LagL    equ     0ADh
NPh     equ     0AEh    ;колич. фаз в кинетике
PhH     equ     0AFh    ;длительность фазы в кинетике
PhL     equ     0B0h

;AsH     equ     0AFh    ;старший байт измеренного значения стандарта
;AsL     equ     0B0h    ;младший байт измеренного значения стандарта

As0     equ     0B1h    ;ячейки временного хранения стандарта
As1     equ     0B2h    ;в плавающем коде
As2     equ     0B3h
As3     equ     0B4h

;As2p    equ     0B1h    ;--
;As3p    equ     0B2h

ZnCs    equ     0B5h    ;знак фактора в старшем бите 0 - "+", 1 - "-"

			;младшая тетрада - 1 - запятая после первой цифры, 
			;		   2 - после второй, 
			;		   3 - после третьей,
			;		   4 - целое число без запятых.
CsH     equ     0B6h    ;старший байт фактора
CsL     equ     0B7h    ;младщий -...

HH      equ     0B8h    ;в этих ячейках располагается коэффициент b для графика
HL      equ     0B9h    ;младш. байт верхней границы
LH      equ     0BAh    ;старш. байт нижней границы
LL      equ     0BBh    ;младш. байт нижней границы

StTm2   equ     0BCh    ;ячейка для подсчета количества прерываний 
                        ;таймера 2
TrTempH equ     0BDh    ;старший байт требуемой температуры
TrTempL equ     0BEh    ;младший байт требуемой температуры

Abp0    equ     0C0h    ;ячейки временного хранения бланка пробы
Abp1    equ     0C1h    ;в плавающем коде
Abp2    equ     0C2h
Abp3    equ     0C3h
Abs0    equ     0C4h    ;ячейки временного хранения бланка стандарта
Abs1    equ     0C5h    ;в плавающем коде
Abs2    equ     0C6h
Abs3    equ     0C7h
Ap0     equ     0CCh    ;ячейки временного хранения измеренной пробы
Ap1     equ     0CDh    ;в плавающем коде
Ap2     equ     0CEh
Ap3     equ     0CFh


vI1h     equ    0D1h     ;старший байт измерительного канала перв.дл.волны
vI1m     equ    0D2h     ;средний байт измерительного канала перв.дл.волны
vI1l     equ    0D3h     ;младший байт измерительного канала перв.дл.волны
vI1oh    equ    0D4h     ;старший байт опорного канала перв.дл.волны
vI1om    equ    0D5h     ;средний байт опорного канала перв.дл.волны
vI1ol    equ    0D6h     ;младший байт опорного канала перв.дл.волны

vI2h     equ    0D7h     ;старший байт измерительного канала втор.дл.волны
vI2m     equ    0D8h     ;средний байт измерительного канала втор.дл.волны
vI2l     equ    0D9h     ;младший байт измерительного канала втор.дл.волны
vI2oh    equ    0DAh     ;старший байт опорного канала втор.дл.волны
vI2om    equ    0DBh     ;средний байт опорного канала втор.дл.волны
vI2ol    equ    0DCh     ;младший байт опорного канала втор.дл.волны

vIzh     equ    0DDh     ;старший байт нуля измерительного канала
vIzm     equ    0DEh     ;средний байт нуля измерительного канала
vIzl     equ    0DFh     ;младший байт нуля измерительного канала
vIozh    equ    0E0h     ;старший байт нуля опорного канала
vIozm    equ    0E1h     ;средний байт нуля опорного канала
vIozl    equ    0E2h     ;младший байт нуля опорного канала

vIz2h    equ    0E3h     ;старший байт нуля измерительного канала на второй длине волны
vIz2m    equ    0E4h     ;средний байт нуля измерительного канала на второй длине волны
vIz2l    equ    0E5h     ;младший байт нуля измерительного канала на второй длине волны
vIoz2h   equ    0E6h     ;старший байт нуля опорного канала на второй длине волны
vIoz2m   equ    0E7h     ;средний байт нуля опорного канала на второй длине волны
vIoz2l   equ    0E8h     ;младший байт нуля опорного канала на второй длине волны

vADR0   equ     0E9h     ;ячейки временного хранения
vADR1   equ     0EAh
vADR2   equ     0EBh
vADR3   equ     0ECh

NToch   equ     0EDh    ;ячейка для задания количества точек при задании графика

spTm2   equ     0F0h    ;набор ячеек для сохранения параметров при прерывании таймера 2 из-за 
                        ;переполнения стека

spSmBus equ     0F6h    ;набор ячеек для сохранения при прерывании I2c шины

logPr   equ     0FCh    ;промеж. ячейка для логарифма

LO0     equ     P5.6    ;Линия опроса клавиатуры  0
LO1     equ     P5.7    ;                         1
LV0     equ     P6.0    ;Линия возврата           0 
LV1     equ     P6.1    ;                         1
LV2     equ     P6.2    ;                         2
LV3     equ     P6.3    ;                         3
LV4     equ     P6.4    ;                         4
LV5     equ     P6.5    ;                         5
LV6     equ     P6.6    ;                         6
LV7     equ     P6.7    ;                         7

SEK     equ     00h     ;регистр секунд в м/с DS1307
MINUT   equ     01h     ;регистр минут  в м/с DS1307
HOURS   equ     02h     ;регистр часов  в м/с DS1307
DAY     equ     03h     ;регистр дней недели в м/с DS1307
DATE    equ     04h     ;регистр числа  в м/с DS1307
MONTH   equ     05h     ;регистр месяца в м/с DS1307
YEAR    equ     06h     ;регистр года   в м/с DS1307
CONTR   equ     07h     ;регистр контроля в м/с DS1307

;константы
NulLinH equ     9h      ;константы для задания смещения ШД от нулевой линии
NulLinL equ     0Bh
NAKOPLEN        equ     4h      ;константа указывающая степень накопление 2**NAKOP
NumSer  equ     0FF0h   ;номер ячейки EEPROM в которую заносится номер серии результата (max = 100)
                        ;результаты пишутся с ячейки с адресом 1000h

TemperH equ     0FF2h   ;ячейки для задания температуры термостата - целая часть
TemperL equ     0FF3h   ;                                          - дробная часть   

KorRep	equ	0FF5h	;ячейка для поправки реперной точки +/- 50 шагов ШД



BaseSer equ     1000h   ;номер ячейки EEPROM с которой начинается нулевая серия (база)

PrinAdr equ     0h      ;адрес с которого начинаются принтерные ячейки в ОЗУ при EMI0CN = 0
Kin     equ     0h      ;адрес с которого начинается хранение результатов измерения для
                        ;кинетики при EMI0CN = 1 
rezult  equ     0h      ;адрес с которого временно хранится результат серии при  EMI0CN = 2

x0      equ     0h      ;адреса Х-ов для построения графика по 10- точкам EMI0CN = 4
y0      equ     50h     ;адреса Y-ов для построения графика по 10- точкам EMI0CN = 4

TempTrH equ     0h      ;Aдрес для задания целой части требуемой температуры    при EMI0CN = 5
TempTrL equ     1h      ;Aдрес для задания дробной части требуемой температуры  при EMI0CN = 5

;		 Состояния шины
SMB_BUS_ERROR 	EQU 	00h 	; (all modes) ошибка шины
SMB_START 	EQU 	08h 	; (MT & MR) передано состояние START 
SMB_RP_START 	EQU 	10h 	; (MT & MR) повторена передача состояния START
SMB_MTADDACK 	EQU 	18h 	; (MT) Ведомый адрес + W передан, ACK принят
SMB_MTADDNACK 	EQU 	20h 	; (MT) Ведомый адрес + W передан, NACK принят
SMB_MTDBACK 	EQU 	28h 	; (MT) Байт данных передан, ACK принят
SMB_MTDBNACK 	EQU 	30h 	; (MT) Байт данных передан, NACK принят
SMB_MTARBLOST 	EQU 	38h 	; (MT) Арбитраж пуст
SMB_MRADDACK 	EQU 	40h 	; (MR) Ведомый адрес + R передан, ACK принят
SMB_MRADDNACK 	EQU 	48h 	; (MR) Ведомый адрес + R передан, NACK принят
SMB_MRDBACK 	EQU 	50h 	; (MR) Байт данных принят, ACK передан
SMB_MRDBNACK 	EQU 	58h 	; (MR) Байт данных принят, NACK передан
;-----------------------------------------------------------------------------------
DS1624W         equ     92h     ;выбор DS1624 для записи
DS1624R         equ     93h     ;выбор DS1624 для чтения
DS1307W         equ     0D0h    ;выбор DS1307 для записи
DS1307R         equ     0D1h    ;выбор DS1307 для чтения
FM2464W         equ     0A0h    ;выбор FM2464 для записи
FM2464R         equ     0A1h    ;выбор FM2464 для чтения
;----------------------------------------------------------------------------------
;Коды клавиатуры 
;----------------------------------------------------------------------------------
Kl0     equ     0
Kl1     equ     1
Kl2     equ     2
Kl3     equ     3
Kl4     equ     4
Kl5     equ     5
Kl6     equ     6
Kl7     equ     7
Kl8     equ     8
Kl9     equ     9
KlA     equ     12h
KlNiz   equ     13h
KlStart equ     14h
KlZero  equ     15h
KlEnter equ     11h
KlF     equ     10h

KlL0    equ     16h
KlL     equ     17h
KlPrint equ     18h
KlT     equ     19h
KlminL  equ     20h
KlmaxL  equ     21h
KlS     equ     22h
KlVerx  equ     23h
KlZpt   equ     24h
KlEsc   equ     25h
Kld     equ     26h
KlFEnter        equ     27h

;-------------------------------------------------------------------------------------
;Номера ошибок
Err_OKRUGL      equ     1h      ;ошибка при округлении десятичного числа (> 9999,999)
                                ;т. е. число >9999  (okrugl3)
Err_FREAL       equ     2h      ;ошибка при переводе числа с фиксированной запятой в плавающий формат                              ;плавающий формат
                                ;т. е. целая часть больше чем 4 знака (FtoReal)
Err_HIGHMUL     equ     3h      ;переполнение при умножении (porRez, lg)
Err_DIVZERO     equ     4h      ;деление на 0 (div3, div3x3)
Err_NORMMAN     equ     5h      ;ошибка при нормализации мантисс (normMan)
Err_REALIN      equ     6h      ;нарушение формата при переводе из плавающего формата в формат с
                                ;фиксированной запятой (realIn)
Err_YRPOR       equ     7h      ;ошибка выравнивания порядков (yrPor)
Err_SUMMANT     equ     8h      ;переполнение при суммировании мантисс (sumMant)
Err_CONCENT     equ     9h      ;концентрация превышает 999 (obch1, obch2)

Err_SD          equ     10h     ;ошибка нахождения репера (reper)
Err_ADRI2C      equ     11h     ;ошибка адреса I2C шины
Err_CIKL        equ     12h     ;ошибка I2C шины вечный цикл


;-----------------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; RESET and INTERRUPT VECTORS
;-----------------------------------------------------------------------------

               ; Reset Vector
               cseg AT 0
               ljmp Main               ; Locate a jump to the start of code at 

        org     03h
        jmp     prINT0
                        ;        jmp     int0
        ORG     0BH
;        jmp     T0              ;Таймер 0 (мешалка + передача по IRPS)
        ORG     13H
        reti
;        jmp     INT1            ;Прерывание 1 (конец преобразования)
        ORG     23H
        jmp     iiIRPS          ;Прерывание интерфейса
        ORG     2BH
        jmp     TM2             ;Таймер 2 (термостат)
; Вектор прерывания I2C шины
	org 	03Bh
	ljmp 	SMBus_ISR
;------------------------------------------------------------------------------------

                                       ; the reset vector.

;-----------------------------------------------------------------------------
; CODE SEGMENT
;-----------------------------------------------------------------------------

Blink          segment  CODE

               rseg     Blink          ; Switch to this code segment.
               using    0              ; Specify register bank for the following
                                       ; program code.


        org     30h


Main:          ; Disable the WDT. (IRQs not enabled at this point.)
               ; If interrupts were enabled, we would need to explicitly disable
               ; them so that the 2nd move to WDTCN occurs no more than four clock 
               ; cycles after the first move to WDTCN.

               mov   WDTCN, #0DEh
               mov   WDTCN, #0ADh

               ; Use SFRs on the Configuration Page
               mov   SFRPAGE, #0Fh

               ; Enable the Port I/O Crossbar
	       mov	XBR0,#05h	;разрешить UART0 на выводы P0.0(TxD),P0.1(RxD)
                                        ;и SMBus на выводы P0.2(SDA),P0.3(SCL)
               mov      XBR1,#00000100b ;разрешить вход INT0
               mov   	XBR2,#0C0h	;подтяжка выводов и разрешить CrossBar


;	       mov	EMI0CF,#00010011b

               ; Set P1.6 (LED) as digital output in push-pull mode.  
        mov     P7MDOUT,#1
        mov     P6MDOUT,#0
        mov     P5MDOUT,#0
        mov	P0MDOUT,#01h
	mov	P1MDOUT,#0h
        mov	P2MDOUT,#00000111b
	mov	P3MDOUT,#0h

        mov     P2MDIN,#00001111b
        mov     SFRPGCN,#0              ;запретить автоматическое переключение страниц

	call	zvyk
        mov     R5,#3		;временная задержка для сброса индикатора
        mov     R6,#0FFh
        mov     R7,#0FFh
m11:    djnz    R7,$
;        cpl     P1.7
        djnz    R6,m11
        djnz    R5,m11

        mov     ERROR,#0	;Начальная установка переменных
;        mov      FAZ,#0
        clr     t
        clr     incL
        clr     neprer
        clr     konec
        clr     nul1
        clr     stand
	clr 	SM_BUSY
        clr     strtKin
        clr     KomandEF

	clr	yskor


        mov     prJ,#0
        mov     podRej,#0
        mov     Rejim,#0
        mov     StRs,#0
        clr     IRP1
        mov     YSR,#0
;	mov	YSR,#4		;задает количество усреднений
        clr     bitKomE                 ;
        clr     bitKom5
	clr	trstat          ;выключить термостат
        setb    prTrst
        mov     R0,#StTm2
        clr     A
        mov     @R0,A
        clr     prF

;*****************************************************
;Программирование внутреннего таймера
;Таймер 0 задействован...
;Таймер 1 задействован под интерфейс
;Таймер 2 задействован...
;*****************************************************
        mov     PCON,#0
;	mov	TMOD,#00100010B	;ТАЙМЕР
                ;     0         -управление блокировкой T1
                ;      0        -бит выбора таймера или счетчика
                ;       1       -автоперезагружаемый счетчик T1
                ;        0
                ;         0     -управление блокировкой T0
                ;          0    -бит выбора таймера или счетчика
                ;           1   -автоперезагружаемый счетчик T0
                ;            0
;	mov	TH1,#0F4H       ;перезагружаемое число T1 (2400)
;	setb	TCON.6		;пуск таймера 1

;----------------------------------------------------------------------
;ПРОГРАММИРОВАНИЕ UART0
;----------------------------------------------------------------------
        mov     SFRPAGE,#0h
	mov	SCON0,#01010000b
                ;      0         -УАПП-8 бит, изменяемая скорость передачи
                ;       1
                ;        0       -уст. прогр. для запрета приема сообщения
                ;                 в котор. 9-й бит имеет знач. 0
                ;         1      -бит разрешения приема
                ;          0     -передача бита 8
                ;           0    -прием бита 8
                ;            0   -флаг прерывания передатчика
                ;             0  -флаг прерывания приемника
        mov     SSTA0,#00001010b
                ;      0         - ошибка фрейма 
                ;       0        - ошибка потери принятого байта
                ;        0       - ошибка записи
                ;         1      - бит удвоенной скорости передачи
                ;          1     - источник скорости передачи таймер 3
                ;           0
                ;            1   - источник скорости приема таймер 3
                ;             0  
;----------------------------------------------------------------------
;ПРОГРАММИРОВАНИЕ внутреннего генератора на частоту 24,5 Мгц
;----------------------------------------------------------------------
        mov     SFRPAGE, #0Fh
        mov     OSCICN,#11000011b
kk:     mov     A,OSCICN
        jnb     ACC.6,kk
;----------------------------------------------------------------------
;ПРОГРАММИРОВАНИЕ таймера 3 для работы UART0 на частоте 2400
;----------------------------------------------------------------------
        mov     SFRPAGE,#1h     ;
        mov     TMR3CF,#00001000b      ; Timer 3 Configuration
        mov     RCAP3L,#82h     ; Timer 3 Reload Register Low Byte
        mov     RCAP3H,#0FDh    ; Timer 3 Reload Register High Byte
        mov     TMR3H,#0h       ; Timer 3 High Byte
        mov     TMR3L,#0h       ; Timer 3 Low Byte
        mov     TMR3CN,#4h      ; Timer 3 Control Register (включение)
;----------------------------------------------------------------------
;ПРОГРАММИРОВАНИЕ таймера 2 для работы термостата
        mov     SFRPAGE,#0h     ;
        mov     TMR2CF,#00000000b      ; Timer 2 Configuration на сложение
                                ;системная частота делится на 12
        mov     RCAP2L,#01h     ; Timer 2 Reload Register Low Byte
        mov     RCAP2H,#00h     ; Timer 2 Reload Register High Byte
        mov     TMR2H,#0h       ; Timer 2 High Byte
        mov     TMR2L,#0h       ; Timer 2 Low Byte
        mov     TMR2CN,#4h      ; Timer 3 Control Register (включение)
;-----------------------------------------------------------------------
; Инициализация шины I2c
;-----------------------------------------------------------------------
SMBus_Init:
        mov   	SFRPAGE, #0
	mov 	SMB0CN, #04h 	; Конфигурирование SMBus с уст. флага когда ACK = 0
	mov 	SMB0CR, #8Fh 	; Установить скорость = 100KHz, в SMB0CR из уравнения
				; SMB0CR = -(SYSCLK)/(2*Fscl)
	setb 	ENSMB 		; Разрешить SMBus
	orl 	EIE1, #02h 	; Разрешить прерывание SMBus 
	clr 	SM_BUSY
;	ret
;------------------------------------------------------------------------
;Инициализация компаратора 0
;------------------------------------------------------------------------
        mov     SFRPAGE,#1
        mov     CPT0CN,#10000000b
        mov     CPT0MD,#00110000b

;------------------------------------------------------------------------
;Инициализация компаратора 2
;------------------------------------------------------------------------
        mov     SFRPAGE,#3
        mov     CPT2CN,#10000000b
        mov     CPT2MD,#00110000b
;-------------------------------------------------------------------------
;Инициализация АЦП 1
;-------------------------------------------------------------------------
        mov     SFRPAGE, #0
	mov	AMX0SL,#00h	;однополярный режим АЦП
	mov	ADC0CF,#00000000b
	mov	REF0CN,#3	;разрешить цепи внутренних опорныз напряжений
	setb	AD0EN		;разрешить работу АЦП
	setb	AD0TM		;режим слежения задается битами AD0CM1-0
	clr	AD0CM1		;00 - запуск по установке бита ADBUSY
	clr	AD0CM0
;-------------------------------------------------------------------------
;Инициализация АЦП 2
;-------------------------------------------------------------------------
        mov     SFRPAGE, #1
	mov	ADC1CF,#0
	mov	REF1CN,#3
	setb	AD1EN		;разрешить работу АЦП
	setb	AD1TM		;режим слежения задается битами AD0CM1-0
	clr	AD1CM0		;00 - запуск по установке бита ADBUSY
	clr	AD1CM1
	clr	AD1CM2

;-------------------------------------------------------------------------
;Программирование внешнего прерывания INT0
;-------------------------------------------------------------------------
        mov     SFRPAGE,#0
        setb    TCON.0          ;Прерывание по фронту



        setb    IE.0            ;Разрешение прерывания



        mov   SFRPAGE, #0Fh
;------------------------------------------------------------
;        setb    IE.1            ;разрешить прерывание от таймера T0
;------------------------------------------------------------
	setb	IE.4		;разрешить прерывание интерфейса
	setb	IE.7		;разрешение всех прерываний

	mov	IP,#10h		;высший приоритет интерфейса
        orl     EIP1,#00000010b ;высший приоритет SMBUS
;-----------------------------------------------------------------
;Инициализация индикатора
;-----------------------------------------------------------------
	mov	istochnik,#0f0h ;инициализация  индикатора
	call	ini_lcd
	call	zanTab
;-----------------------------------------------------------------
;Запуск DS1624 на преобразование температуры
;-----------------------------------------------------------------
        call    wrStat
        call    wrStat
        call    wrStat
        call    StartConvT
        call    StartConvT
        call    StartConvT
;------------------------------------------------------------------
;занесение в память требуемого значения температуры
;------------------------------------------------------------------
        mov     ADRh,#HIGH(TemperH)     ;занесение в  ячейки температуры требуемого значения
        mov     ADRl,#LOW(TemperH)
        call    readFM
        mov     SFRPAGE,#0
        mov     EMI0CN,#5
        mov     R0,#TempTrH
        mov     A,DANl
        movx    @R0,A

        mov     ADRh,#HIGH(TemperL)     
        mov     ADRl,#LOW(TemperL)
        call    readFM
        mov     SFRPAGE,#0
        mov     EMI0CN,#5
        mov     R0,#TempTrL
        mov     A,DANl
        movx    @R0,A
        mov     SFRPAGE,#0Fh
        
        setb    prTrst          ;клавиша ENTER
        setb    IE.5
        setb    trstat          ;выключить термостат
;------------------------------------------------------------------
;Анализ клавиатуры. Если клавиша нажата в момент включения то на texRej
;------------------------------------------------------------------
        call    stKey	
        jz      nac
        mov     TekSdH,#0
        jmp     texRej
;*******************************************************
;Начало выполнения программы
;---------------------------------------------------------------------------------
nac:    mov     DPTR,#iPV       ;индикация "SOLAR  PV1251"
        call    zagr
        call    out_str1
        mov     DPTR,#iWait     ;индикация "   Подождите   "
        call    zagr
        call    out_str2



        clr     lamp            ;выключить лампочку
        clr     maxLamp
        clr     medLamp

        setb    IE.5            ;разрешить прерывание таймера 2

        mov     TekSdH,#0

        call    reper1          ;найти исходн. точку  *
        mov     TekWlH,#1       ;устан. текущ. длину волны 325нм (145h)
        mov     TekWlL,#45h
        mov     codeH,#NulLinH  ;установить текущее положение шагов
        mov     codeL,#NulLinL
	call	NstP            ;выехать на 325 нм
	call	obest           ;обесточить ШД
        mov     TekSdH,#NulLinH ;установить текущее положение шагов
        mov     TekSdL,#NulLinL
        call    izmTemn

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Выключение термостата
;        clr     IE.5
;        clr     prTrst          ;клавиша ENTER
;        clr     trstat          ;выключить термостат
;-----------------------------------------------------------------------
;УСТАНОВКА 1 ГЦ
	mov     ADRl,#SEK       ;останов часов
        mov     DANl,#80h
        call    wrDS

	mov	ADRl,#CONTR     ;посылка кода в регистр контроля
	mov	DANl,#10010000b
	call	wrDS

	mov     ADRl,#SEK       ;пуск часов
        mov     DANl,#0h
        call    wrDS
        call    zvyk
        call    zvyk
        call    zvyk
;**************************************************************
;Работа по программам аналогичных старому спектрофотометру
;**************************************************************
pv1251:
        setb    IE.0            ;Разрешение прерывания
        mov     DPTR,#iOchist
        call    zagr
        call    out_str2
pv_0:   mov     DPTR,#iL
        call    zagr
        mov     BIN0,#0
        mov     BIN1,TekWlH     ;вместо NNN занести текущую длину волны
        mov     BIN2,TekWlL
        call    p1610
        mov     R1,#ZN6         ;в ZN6 - старшую цифру
        mov     A,DES2
        call    zanCH
        mov     A,DES3
        swap    A
        call    zanCH
        mov     A,DES3
        call    zanCH
pv_0a:
        call    out_str1
pv_1:   mov     DES0,#0         ;обнуление ячеек для занесения длины волны
        mov     DES1,#0
        mov     DES2,#0
        mov     DES3,#0
pv_1x:
        call    stKey
        jnz     pv_1y
        jnb     IRP1,pv_1x
        jmp     komRS
pv_1y:
        call    key             ;ждем нажатия клавиши
       
        jnb     prF,pv_1b
;;        call    zvyk            ;если клавиша "F" то в 1-й позиции F
;        mov     R0,#ZN1
;        mov     A,#0DFh
;        mov     @R0,A
        jmp     pv_1
pv_1b:  cjne    A,#KlZero,pv_2
;------------------------------------------------------------
pv_1a:  call    zvyk            ;ОТРАБОТКА КЛАВИШИ    "ZERO"
        mov     DPTR,#iWait     ;индикация "   Подождите   "
        call    zagr
        call    out_str2

        call    izmTemn
        call    izmer           ;измерить OК

        mov     Iozh,I1oh       ;переслать в Iozh,Iozm,Iozl
        mov     Iozm,I1om
        mov     Iozl,I1ol
        mov     Izh,I1h         ;переслать в Izh,Izm,Izl
        mov     Izm,I1m
        mov     Izl,I1l
        setb    nul1            ;установить признак измерения контроля
        call    zvyk            ;подать протяжный звуковой сигнал
        call    zvyk
        call    zvyk
pv112:
        mov     DPTR,#iAR       ;вывод А= 0,000 Б в первую строку
        call    zagr
        call    out_str1 
        
        mov     DPTR,#iOchist
        call    zagr
        call    out_str2
         
pv111:  call    klav
        cjne    A,#KlL,pv_1_1
        jmp     pv10a
pv_1_1: cjne    A,#KlL0,pv_1_2
        jmp     pv_7a
pv_1_2: cjne    A,#KlminL,pv_1_3
        jmp     pv_8_1
pv_1_3: cjne    A,#KlmaxL,pv_1_4
        jmp     pv_9_1      
pv_1_4: cjne    A,#KlZero,pv_1_5
        jmp     pv_1a
pv_1_5: cjne    A,#KlA,pv_1_6
        jmp     pv_2_1
pv_1_6: cjne    A,#KlT,pv_1_7
        jmp     pv_6_1
pv_1_7: cjne    A,#KlFEnter,pv_1_8
        jmp     pv11a
pv_1_8:
        jnb     prF,pv112
;        call    zvyk            ;если клавиша "F" то в 1-й позиции F
;        mov     R0,#ZN1
;        mov     A,#0DFh
;        mov     @R0,A
;        call    out_str1
;;        jmp     pv_0a
pv_1_9:
        jmp     pv111
;------------------------------------------------------------
pv_30:  jmp     pv_3
pv_2:   cjne    A,#KlA,pv_30
pv_2_1: call    zvyk            ;ОТРАБОТКА КЛАВИШИ  'A'
        jb      nul1,pv_2f
        mov     DPTR,#iIzNul
        call    zagr
        call    out_str1
pv22a:  call    klav
        cjne    A,#KlZero,pv22b
        jmp     pv_1a
pv22b:
        jmp     pv_0

pv_2f:  
        mov     DPTR,#iWait     ;индикация "   Подождите   "
        call    zagr
        call    out_str2
        call    izmTemn
     
        call    izmer           ;измерить OК
	call	zvyk
        call    zvyk
        call    zvyk
        call    D1
        mov     A,ERROR
        jz      pv_2a
        jmp     pv_2d           ;на отработку ошибки
pv_2a:  call    realIn
        call    btod
        call    okrygl3
        mov     DPTR,#iAR       ;вывод плотности на индикатор
        call    zagr
        mov     R0,#ZN7
        jnb     F0,pv_2b
        mov     @R0,#2Dh
        jmp     pv_2c
pv_2b:  mov     @R0,#20h
pv_2c:  mov     A,DES3
        orl     A,#30h
        mov     R0,#ZN8
        mov     @R0,A
        mov     A,DES4
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN10
        mov     @R0,A
        mov     A,DES4
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN11
        mov     @R0,A
        mov     A,DES5
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN12
        mov     @R0,A
        call    out_str1

        mov     DPTR,#iOchist
        call    zagr
        call    out_str2

pv_222:
        call    klav
        cjne    A,#KlL,pv2_1
        jmp     pv10a
pv2_1: cjne    A,#KlL0,pv_2_2
        jmp     pv_7a
pv_2_2: cjne    A,#KlminL,pv_2_3
        jmp     pv_8_1
pv_2_3: cjne    A,#KlmaxL,pv_2_4
        jmp     pv_9_1      
pv_2_4: cjne    A,#KlZero,pv_2_5
        jmp     pv_1a
pv_2_5: cjne    A,#KlA,pv_2_6
        jmp     pv_2_1
pv_2_6: cjne    A,#KlT,pv_2_7
        jmp     pv_6_1
pv_2_7: cjne    A,#KlFEnter,pv2_7a
        jmp     pv11a

pv2_7a:
;        jnb     prF,pv_2_8
;        call    zvyk            ;если клавиша "F" то в 1-й позиции F
;        mov     R0,#ZN1
;        mov     A,#0DFh
;        mov     @R0,A
;        call    out_str1
;;        jmp     pv_0a
;pv_2_8:
        jmp     pv_222
pv_2d:  call    och             ;отработка ошибки плотности
        mov     ERROR,#0
        jmp     pv1251
;-----------------------------------------------------------------------
;отработка функциональных клавиш
pv_3:   
        cjne    A,#KlZero,pv_6  ;отработка клавиши 'ZERO'
        jmp     pv_1a
;----------------------------------------------------------------------
pv_6fd: jmp     pv_6f
;----------------------
pv_70:  jmp     pv_7
pv_6:
        cjne    A,#KlT,pv_70
pv_6_1: call    zvyk            ;ОТРАБОТКА КЛАВИШИ  'T%'
        jb      nul1,pv_6fd
        mov     DPTR,#iIzNul
        call    zagr
        call    out_str1
pv66a:  call    klav
        cjne    A,#KlZero,pv66b

        call    zvyk            ;ОТРАБОТКА КЛАВИШИ    "ZERO"
        mov     DPTR,#iWait
        call    zagr
        call    out_str2


        call    izmTemn
        call    izmer           ;измерить OК

        mov     Iozh,I1oh       ;переслать в Iozh,Iozm,Iozl
        mov     Iozm,I1om
        mov     Iozl,I1ol
        mov     Izh,I1h         ;переслать в Izh,Izm,Izl
        mov     Izm,I1m
        mov     Izl,I1l
        setb    nul1            ;установить признак измерения контроля
        call    zvyk            ;подать протяжный звуковой сигнал
        call    zvyk
        call    zvyk
        mov     DPTR,#iATR       ;вывод T= 100 % во вторую строку
        call    zagr
        call    out_str1 
        mov     DPTR,#iOchist
        call    zagr
        call    out_str2
        
        
        
         
pv111i: call    klav
        cjne    A,#KlL,pv_1_1i
        jmp     pv10a
pv_1_1i: 
        cjne    A,#KlL0,pv_1_2i
        jmp     pv_7a
pv_1_2i: 
        cjne    A,#KlminL,pv_1_3i
        jmp     pv_8_1
pv_1_3i: 
        cjne    A,#KlmaxL,pv_1_4i
        jmp     pv_9_1      
pv_1_4i: 
        cjne    A,#KlZero,pv_1_5i
        jmp     pv_1a
pv_1_5i: 
        cjne    A,#KlA,pv_1_6i
        jmp     pv_2_1
pv_1_6i: 
        cjne    A,#KlT,pv_1_7i
        jmp     pv_6_1
pv_1_7i: 
        cjne    A,#KlFEnter,pv_1_8i
        jmp     pv11a
pv_1_8i:
;        jnb     prF,pv_1_9i
;        call    zvyk            ;если клавиша "F" то в 1-й позиции F
;        mov     R0,#ZN1
;        mov     A,#0DFh
;        mov     @R0,A
;        call    out_str1
;;        jmp     pv_0a
;pv_1_9i:
        jmp     pv111i
;------------------------------------------------------------




;        jmp     pv_1a
pv66b:
        jmp     pv_0
pv_6f:  
        mov     DPTR,#iWait
        call    zagr
        call    out_str2

        call    izmTemn
        call    izmer           ;измерить OК
	call	zvyk
        call    zvyk
        call    zvyk
pv_6a:  call    tay
        mov     A,ERROR
        jz      pv_6b
        jmp     pv_2d
pv_6b:  call    realIn
        call    btod
        call    okrygl3
        mov     DPTR,#iTR       ;вывод пропускания на индикатор
        call    zagr
        mov     A,DES3
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN7
        mov     @R0,A
        mov     A,DES4
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN8
        mov     @R0,A
        mov     A,DES4
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN9
        mov     @R0,A
	mov	R0,#ZN10
	mov	@R0,#2Ch
	mov	R0,#ZN11
        mov     A,DES5
        swap    A
        anl     A,#0Fh
        orl     A,#30h
	mov	@R0,A
        call    out_str1
        clr     prF

        mov     DPTR,#iOchist
        call    zagr
        call    out_str2


pv_666:
        call    klav
        cjne    A,#KlL,pv6_1
        jmp     pv10a
pv6_1: cjne    A,#KlL0,pv_6_2
        jmp     pv_7a
pv_6_2: cjne    A,#KlminL,pv_6_3
        jmp     pv_8_1
pv_6_3: cjne    A,#KlmaxL,pv_6_4
        jmp     pv_9_1      
pv_6_4: cjne    A,#KlZero,pv_6_5
        jmp     pv_1a
pv_6_5: cjne    A,#KlA,pv_6_6
        jmp     pv_2_1
pv_6_6: cjne    A,#KlT,pv_6_7
        jmp     pv_6_1
pv_6_7:
        cjne    A,#KlFEnter,pv6_7a
        jmp     pv11a
pv6_7a:
;        jnb     prF,pv_6_8
;;        call    zvyk            ;если клавиша "F" то в 1-й позиции .
;        mov     R0,#ZN1
;        mov     A,#0DFh
;        mov     @R0,A
;        call    out_str1
;;        jmp     pv_0a
;pv_6_8:
        jmp     pv_666
;--------------------------------------------------------------------
pv_7:   cjne    A,#KlL0,pv_8    ; ОТРАБОТКА КЛАВИШИ 'ЛЯМБДА 0'
pv_7a:  call    zvyk
        clr     nul1

        mov     DPTR,#iWait     ;индикация "   Подождите   "
        call    zagr
        call    out_str2

        call    reper1          ;найти исходн. точку  *
        mov     TekWlH,#1       ;устан. текущ. длину волны 325нм (145h)
        mov     TekWlL,#45h
        mov     codeH,#NulLinH  ;установить текущее положение шагов
        mov     codeL,#NulLinL
	call	NstP            ;выехать на 325 нм
	call	obest           ;обесточить ШД
        mov     TekSdH,#NulLinH ;установить текущее положение шагов
        mov     TekSdL,#NulLinL
        call    zvyk
        jmp     pv1251
;----------------------------------------------------------------------
pv_8:   cjne    A,#KlminL,pv_9  ;ОТРАБОТКА КЛАВИШИ '< L'
pv_8_1: call    zvyk
        clr     nul1
        mov     DPH,TekWlH      ;декремент через DPTR
        mov     DPL,TekWlL
        dec     DPL
        mov     A,DPL
        cjne    A,#0FFh,pv_8a
        dec     DPH
pv_8a:  mov     ModWlH,DPH      ;в ячейках ModWlH,ModWlL
        mov     ModWlL,DPL      ;декрементированая длина волны
        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,pv_8b
        call    prstr
pv_8b:  jmp     pv1251
;----------------------------------------------------------------------                         
pv_9:   cjne    A,#KlmaxL,pv_10 ;ОТРАБОТКА КЛАВИШИ '> L'
pv_9_1: call    zvyk
        clr     nul1
        mov     DPH,TekWlH      ;декремент через DPTR
        mov     DPL,TekWlL
        inc     DPTR
        jmp     pv_8a
;----------------------------------------------------------------------
pv_10:  cjne    A,#KlL,pv_11   ;ОТРАБОТКА КЛАВИШИ ' L' 
pv10a:  call    zvyk
        jmp     pv1251  
;----------------------------------------------------------------------
pv_11:  cjne    A,#KlFEnter,pv_4
pv11a:  call    zvyk
        jmp     n1
;-----------------------------------------------------------------------
pv_4:   cjne    A,#10,pv_4a     ;ввод первой цифры длины волны
pv_4a:  jc      pv_4b           ;была нажата цифровая клавиша
        jmp     pv_4k
pv_4b:  clr     nul1
        push    ACC
        call    zvyk
        pop     ACC
        call    indLA               
        call    out_str1
        call    ohStr2          ;очистить вторую строку
        call    klav
pv_4c:  cjne    A,#10,pv_4d     ;ввод второй цифры длины волны
pv_4d:  jc      pv_4e           ;была нажата цифровая клавиша
        jmp     pv_4k
pv_4e:  push    ACC
        call    zvyk
        pop     ACC
        call    indLA               
        call    out_str1
        call    klav
pv_4f:  cjne    A,#10,pv_4g     ;ввод третьей цифры длины волны
pv_4g:  jc      pv_4z           ;была нажата цифровая клавиша
        jmp     pv_4k
pv_4z:  push    ACC
        call    zvyk
        pop     ACC
        call    indLA               
        call    out_str1
        call    klav
        cjne    A,#KlEnter,pv_4k
        call    zvyk
;--------------------------------------------------------------------
;отработка введенной длины волны
        mov     DES0,#0         ;
;        mov     BIN1,DES1
        mov     A,DES2
        swap    A
        orl     A,DES3
        mov     DES3,A
        mov     DES2,DES1
        mov     DES1,#0
        call    p1016
        mov     ModWlH,BIN1     ;
        mov     ModWlL,BIN2
        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,pv_4j

        mov     DPTR,#iWait     ;индикация "   Подождите   "
        call    zagr
        call    out_str2

        call    prstr
        call    zvyk
pv_4j:  jmp     pv1251
;----------------------------------------------------------------------
;подача продолжительного звука при неправильно нажатой клавише
pv_4k:  call    zvyk
        call    zvyk
        call    zvyk
        call    zvyk
        jmp     pv1251
;----------------------------------------------------------------------
;----------------------------------------------------------------------
;-----------------------------------------------------------------------
;Подпрограмма индикации длины волны
indLA:
        mov     DES1,DES2
        mov     DES2,DES3
        mov     DES3,A          ;первую цифру сохранить в DES3
        mov     R0,#ZN11
        mov     A,DES1
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,DES2
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,DES3
        orl     A,#30h
        mov     @R0,A
        ret
;-----------------------------------------------------------------------
;xx:
;        jb      prSmT,xx_1      ;prSmT устанавливается в подпрограмме прерывания таймера T2
;        jnb     prTrst,n1       ;prTrst - бит признак включения термостата
;        call    stKey
;        jz      xx2
;        call    zvyk
;        jmp     n1
;xx2:    jnb     IRP1,xx         ;анализ интерфейса
;        jmp     komRS
;xx_1:   
;        mov     DPTR,#iPV       ;индикация "SOLAR  PV1251"
;        call    zagr
;        call    out_str1
;        mov     DPTR,#iGrC
;        call    zagr
;        mov     a,ChSt
;        mov     b,#10
;        div     ab
;        mov     R0,#ZN1
;        orl     A,#30h
;        mov     @R0,A
;        inc     R0
;        orl     B,#30h
;        mov     @R0,b
;        inc     R0
;        mov     @R0,#2Ch
;        inc     R0
;        mov     A,ChMl
;        anl     A,#0F0h
;        swap    A
;        orl     A,#30h
;        mov     @R0,A
;        inc     R0
;        mov     A,ChMl
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     @R0,A
;        call    out_str2
;        clr     prSmT
;        jmp     xx


;******************************************************************************************
;******************************************************************************************
;******************************************************************************************
;******************************************************************************************
n1:     setb    IE.0            ;Разрешение прерывания
        mov     ERROR,#0
         
        mov     DPTR,#iVibRej   ;в перв. строке  ВЫБЕРИТЕ РЕЖИМ
        call    zagr
        call    out_str1
an10:   mov     A,Rejim
        cjne    A,#7,an11
        mov     DPTR,#iPlotn    ;индикация измерения ПЛОТHОСТИ
        jmp     an18
an11:   cjne    A,#8,an12
        mov     DPTR,#iProp     ;индикация измерения ПРОПУСКАHИЯ
        jmp     an18
an12:   cjne    A,#0,an13
        mov     DPTR,#iProg     ;индикация ПРОГРАММ
        jmp     an18
an13:   cjne    A,#1,an14
        mov     DPTR,#iWrPrg    ;индикация ЗАПИСИ ПРОГРАММ
        jmp     an18
an14:   cjne    A,#4,an15
        mov     DPTR,#iPechP    ;индикация ПЕЧАТИ ПРОГРАММ
        jmp     an18
an15:   cjne    A,#5,an15a
        mov     DPTR,#iPechR    ;индикация ПЕЧАТИ РЕЗУЛЬТАТОВ
        jmp     an18
an15a:  cjne    A,#2,an15b
        mov     DPTR,#iObnPrg   ;индикация ОБНУЛЕНИЕ ПРОГРАММ
        jmp     an18
an15b:  cjne    A,#6,an16
        mov     DPTR,#iTermo    ;индикация Вкл/Выкл ТЕРМО
        jmp     an18
an16:   cjne    A,#3,an16a
        mov     DPTR,#iObnRez    ;индикация ОБНУЛЕНИЕ РЕЗУЛЬТАТОВ
        jmp     an18
an16a:  cjne    A,#9,an16b
        mov     DPTR,#iVremia
        jmp     an18

an16b:  mov     A,Rejim
        cjne    A,#0FFh,an17
        mov     Rejim,#8
        jmp     an10
an17:   mov     Rejim,#0
        jmp     an10
an18:   call    zagr
        call    out_str2
bn10:
        jb      IRP1,irrrr     ;анализ интерфейса
        call    stKey          ;анализ клавиатуры
        jz      bn10
        call    key
        cjne    A,#KlFEnter,bn10a
        call    zvyk
        jmp     pv1251
bn10a:
        cjne    A,#KlVerx,bn11 ;клавиша ВВЕРХ
        call    zvyk
        dec     Rejim
        jmp     an10
irrrr:  jmp     komRS
bn11:   cjne    A,#KlNiz,bn12  ;клавиша ВHИЗ
        call    zvyk
        inc     Rejim
bn11a:  jmp     an10
bn12:   cjne    A,#KlEnter,bn11a    ;клавиша ВВОД
        call    zvyk
        clr     konec
;*************************************************************
cn10:   mov     A,Rejim
        cjne    A,#7,cn11
        clr     t               ;измерение плотности
        call    izD
        jmp     n1
cn11:   cjne    A,#8,cn12
        setb    t               ;измерение пропускания
        call    izD
        jmp     n1
cn12:   cjne    A,#0,cn13
        call    izPrg           ;работа по программам
        jmp     n1
cn13:   cjne    A,#1,cn14
        call    zapPrg		;запись программ
        jmp     n1
cn14:   cjne    A,#2,cn15       ;обнуление программ
        call    obnulPrg
        jmp     n1
cn15:   cjne    A,#6,cn16       ;вкл/выкл термостата
        call    vvTer
        jmp     n1
cn16:   cjne    A,#3,cn17       ;обнуление серий (результатов)
        mov     ADRh,#HIGH(NumSer)     ;занесение в принтерные ячейки номера серии
        mov     ADRl,#LOW(NumSer)
        mov     DANl,#0
        call    wrFM

        mov     DPTR,#iRezObn
        call    zagr
        call    out_str1
        mov     DPTR,#iNagPusk
        call    zagr
        call    out_str2
cn16a:
        call    klav
        cjne    A,#KlEnter,cn16a
        call    zvyk
        jmp     n1        
cn17:   cjne    A,#4,cn18
        call    pechPrg         ;Печать программ
        jmp     n1
cn18:   cjne    A,#5,cn19
        call    pechRez         ;печать результатов
        jmp     n1
cn19:   cjne    A,#9,cn20
	call	sendClock       ;установка времени
        jmp     n1

cn20:   jmp     n1
;********************************************************************
;Подпрограмма для работы по программам
;********************************************************************
izPrg:  call	chtPrg
        jnb     konec,izP0
        ret
izP0:	mov	A,podRej
	cjne	A,#0,izP2
;	jb	nul1,izP1
;	ret
izP1:	call	KtFBb		;Кон. точка Фактор Без бланков
	ret
izP2:	cjne	A,#4,izP4
;	jb	nul1,izP3
;	ret
izP3:	call	KtSBb		;Кон. точка Стандарт Без бланков
	ret
izP4: 	cjne	A,#10h,izP6
;	jb	nul1,izP5
;	ret
izP5:   call    KtFCb          ;Конечная точка Фактор с бланком пробы  
        ret
izP6: 	cjne	A,#14h,izP8
;	jb	nul1,izP7
;	ret
izP7:   call    KtSCBp         ;Конечная точка Стандарт с бланком пробы
        ret
izP8:   cjne    A,#24h,izP10
;	jb	nul1,izP9
;	ret
izP9:   call    KtSCBs          ;Конечная точка Стандарт с бланком стандарта
	ret
izP10: 	cjne	A,#34h,izP12
;	jb	nul1,izP11
;	ret
izP11:  call    KtSCBps        ;Конечная точка Стандарт с бланком пробы + бланк стандарта
        ret

izP12: 	cjne	A,#05h,izP14
;	jb	nul1,izP13
;	ret
izP13:  call    K2S            ;двухволновой Стандарт с бланком пробы + бланк стандарта
        ret
izP14: 	cjne	A,#1h,izP16
;	jb	nul1,izP15
;	ret
izP15:  call    K2F            ;двухволновой  Фактор Без бланков
        ret

izP16: 	cjne	A,#2h,izP18
;	jb	nul1,izP17
;	ret
izP17:  call    KinF           ;кинетика Фактор Без бланков
        ret
izP18: 	cjne	A,#6h,izP20
;	jb	nul1,izP19
;	ret
izP19:  call    KinS           ;кинетика СТАНДАРТ
;        ret
izP20: 	cjne	A,#8h,izP22
;	jb	nul1,izP21
;	ret
izP21:  call    KtG            ;Конечная точка График

izP22:  ret



;**********************************************************************
;Чтение программ и  их выполнение
;**********************************************************************
;**********************************************************************
chtPrg: clr     konec
        clr     incL
        clr     enter
        call    vvodNP          ;ввод номера программы
        jnb     konec,cP1
        setb     konec
        ret
cP1:    mov     A,NP            ;считывание из ПЗУ
        mov     B,#32
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        call    readFM
        mov     A,DANl
        anl     A,#7Fh
        cjne    A,#66h,cP3
        mov     R1,#Test        ;запись в ячейки
cP2:    mov     @R1,DANl
        inc     ADRl
        call    readFM
        inc     R1
        cjne    R1,#LL+1,cP2
        call    indPrg          ;проиндицировать программу
        jnb     incL,cP2a
        clr     incL
        inc     NP
        mov     A,NP
        cjne    A,#100,cP2b
        jmp     cP2c
cP2b:           
        mov     A,NP
        mov     B,#32
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        call    readFM
        mov     A,DANl
        jnz     cP1
        inc     NP
        mov     A,NP
        cjne    A,#100,cP2b
;        jmp     vvNP12
cP2c:   mov     DPTR,#iPrgNet   ;вывод сообщения ПРОГРАММ HЕТ
        call    zagr
        call    out_str1
        mov     DPTR,#iNagPusk ;вывод сообщения ПРОГРАММ HЕТ
        call    zagr
        call    out_str2



cP2e:
        call    klav
        cjne    A,#KlEsc,cP2d
        call    zvyk
        setb    konec
        ret
cP2d:   cjne    A,#KlEnter,cP2e
        call    zvyk
        mov     DPTR,#iVibRej ;вывод сообщения ПРОГРАММ HЕТ
        call    zagr
        call    out_str1


        jmp     chtPrg

cP2a:
        jnb     konec,cP5       ;проанализировать нажимаемые клавиши
;        clr     konec           ;СТОП или ВВОД,если ВВОД то на cP5
        ret
;-------------------------------------------------------------------
cP3:    mov     DPTR,#iPrgNoZ   ;высветить сообщ. ПРГ. не ЗАПИСАHА
        call    zagr
        call    out_str2
cP4:    call    klav		
        cjne    A,#KlEsc,cP4    ;ESC
        call    zvyk
        jmp     chtPrg
;-------------------------------------------------------------------
cP5:    mov     R0,#Rej
        mov     podRej,@R0      ;заполнить яч. podRej

        mov     A,podRej
        jnb     ACC.1,cP5_1
        call    anKin
        jnb     konec,cP5_1
        ret
cP5_1:
        mov     R0,#Lw1h        ;заполнить ячейки волны
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
cP6:    call    prstr           ;перестроить ШД
	call	izmTemn
        call    izmKontr        ;измерить контроль
        jb      konec,cP7
	setb	nul1
cP7:    ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;*******************************************************************
;ВЫПОЛНЕНИЕ ПРОГРАММ
;*******************************************************************
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;*******************************************************************
;Режим 	КОН. ТОЧКА 
;	Стандарт 
;	Без бланков             {C = Ap / As * Cs}
;*******************************************************************
KtSBb:  
        call    vichislF
	jnb	konec,KtSBb_7a
	ret

KtSBb_7a:
	mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2

KtSBb_8:
        call    klav
        cjne    A,#KlEsc,KtSBb_9
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtSBb_9:	
        cjne    A,#KlStart,KtSBb_8
KtSBb_10:
        call    zvyk            ;нажата СТАРТ
KtSBb_11:
        call    izmer           ;измерить OК (проба)
        call    D1
        mov     A,ERROR
        jz      KtSBb_13
        jmp     KtSBb_16
KtSBb_13:
        mov     R0,#vADR0       ;временные ячейки во второе слагаемое
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    mul3            ;Умножение пробы на вычисленный фактор

        mov     A,ERROR
        jz      KtSBb_13b
        jmp     KtSBb_16
KtSBb_13b:
        call    zapRez          ;запись результата в память
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,KtSBb_13v
        ret
KtSBb_13v:
        call    out_str2

KtSBb_14:
        call    klav		;опрос клавиатуры
        cjne    A,#KlEsc,KtSBb_15	;ESC
        call    zvyk
        setb    konec
        ret
KtSBb_15:
        cjne    A,#KlStart,KtSBb_17	;Start
	jmp	KtSBb_10		
KtSBb_16:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret
KtSBb_17:
        cjne    A,#KlPrint,KtSBb_14
        call    zvyk
        call    pInf1
        jmp     KtSBb_14

;-------------------------------------------------------------------------------------------
;Подпрограмма вычисления фактора по концентрации стандарта и плотности этого стандарта
;Результат в первом слагаемом и временных ячейках vADR0..vADR3
;-------------------------------------------------------------------------------------------
vichislF:
;        call    izmTemn
        mov     DPTR,#iCsRavno  ;Высветить "Изменить Cs"
        call    zagr
        mov     R0,#ZnCs
        mov     R1,#ZN7
        call    indChislo
        call    out_str1
        mov     DPTR,#iDaNet    ;"1-Да   2-Нет"
        call    zagr
        call    out_str2
KtSBb_1:
        call    klav
        cjne    A,#KlEsc,KtSBb_1a
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtSBb_1a:
        cjne    A,#Kl2,KtSBb_2    
        call    zvyk            ;"Да"
        call    vvodCs          ;вводим Cs
        jmp     KtSBb_3
KtSBb_2:
        cjne    A,#Kl1,KtSBb_1
        call    zvyk            ;"Нет"
KtSBb_3:
        mov     R0,#Test        ;анализ промерялся ли стандарт вообще
        mov     A,@R0
        jnb     ACC.7,KtSBb_6   ;если нет то на KtSBb_6
;стандарт был измерен - спросить о перемерении
        mov     DPTR,#iIzmDs    ;Высветить "Измеpить Ds"
        call    zagr
        call    out_str1
        mov     DPTR,#iDaNet    ;  "1)Да   2)Нет"
        call    zagr
        call    out_str2
KtSBb_4:
        call    klav
        cjne    A,#KlEsc,KtSBb_4a
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtSBb_4a:
        cjne    A,#Kl1,KtSBb_5    
        call    zvyk            ;"Да"
        jmp     KtSBb_6
KtSBb_5:
        cjne    A,#Kl2,KtSBb_4
        call    zvyk            ;"Нет"
        jmp     KtSBb7b
KtSBb_6:
        call	izmSt		;Измерение стандарта  и сохранение в As0..As3
	jnb	konec,KtSBb_7
	ret
KtSBb_7:	
;------------------------------------------------------
;Cохранение стандарта и вычисление фактора
        call    out_str2
        call    zdInd           ;задержка для временной индикации стандарта
KtSBb7b:
        call    wrBlok2         ;запись в EEPROM 
        call    CstoReal        ;занести концентрацию стандарта в первое слагаемое
        mov     R0,#As0         ;занести во второе слагаемое плотность стандарта
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    div3            ;получение фактора  в ADR0..ADR3
        mov     A,ERROR
        jnz     KtSBb7c  

        mov     R0,#vADR0       ;сохранение во временных ячейках vADR0..vADR3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        ret
KtSBb7c:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret
;--------------------------------------------------------------------------------

;------------------------------------------------------------------------
;вывод концентрации на индикатор
vivC:   mov     R0,#Unit1       ;вывод C=           единицa измерения
        mov     A,@R0
        cjne    A,#0,vivC_1
        mov     DPTR,#iCRavno
        jmp     vivC_2
vivC_1: mov     DPTR,#iBezEd1
        mov     B,#16
        mul     AB
        add     A,DPL
        mov     DPL,A
        mov     A,B
        addc    A,DPH
        mov     DPH,A
vivC_2: call    zagr
	call	obch1
        mov     A,ERROR
        cjne    A,#Err_CONCENT,vivC_3
        mov     ERROR,#0
        mov     R0,#ZN3
        mov     @R0,#'>'
        inc     R0
        mov     @R0,#'9'
        inc     R0
        mov     @R0,#'9'
        inc     R0
        mov     @R0,#'9'
        inc     R0
        mov     @R0,#'9'
        inc     R0
        mov     @R0,#' '
        ret
vivC_3: mov     R0,#ZN3
        mov     @R0,BIN0
        inc     R0
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        inc     R0
        mov     @R0,BIN3
        inc     R0
        mov     @R0,BIN4
        inc     R0
        mov     @R0,BIN5
        ret

;----------------------------------------------------------------
zdInd:  mov     R5,#150
        mov     R6,#0FFh
        mov     R7,#0FFh
w1:     djnz    R7,w1
        djnz    R6,w1
        djnz    R5,w1
        ret
;----------------------------------------------------------------
;Вывод на принтер информации для одноволнового режима
pInf1:
        clr     IE.5            ;запретить прерывание термостата
        call    pStr1
        call    pStr2
        call    pStr3
        call    pStr4
        mov     SFRPAGE,#0
        mov     R0,#5
pInf1_1:
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
        djnz    R0,pInf1_1

;        mov     SFRPAGE,#0Fh
        call    RS2400
        setb    IE.5            ;разрешить прерывание термостата
        ret

;----------------------------------------------------------------
;Вывод на принтер информации для кинетики
pInf2:
        clr     IE.5            ;запретить прерывание термостата
        call    pStr1
        call    pStr2
        call    pStr3
        call    pStr4
        call    pStr5
        mov     SFRPAGE,#0
        mov     R0,#5
pInf2_1:
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
        djnz    R0,pInf2_1

;        mov     SFRPAGE,#0Fh
        call    RS2400
        setb    IE.5            ;разрешить прерывание термостата
        ret

 

;*******************************************************************
;Режим 	КОН. ТОЧКА 
;	Фактор 
;	Без бланков     {C = Ap * F}
;*******************************************************************
KtFBb:  
;        call    izmTemn
        mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart ;измерение пробы
        call    zagr
        call    out_str2
KtFBb_1:
        call    klav
        cjne    A,#KlEsc,KtFBb_2
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtFBb_2:	
        cjne    A,#KlStart,KtFBb_1
KtFBb_2a:
        call    zvyk            ;нажата START
;        mov     A,podRej
KtFBb_3:
        call    izmer           ;измерить OК
;        mov     Iozh,I1oh       ;переслать в Iozh,Iozm,Iozl
;        mov     Iozm,I1om
;        mov     Iozl,I1ol
        call    D1		;вычислить плотность
        mov     A,ERROR
        jz      KtFBb_5
        jmp     KtFBb_8
KtFBb_5:
	call	mv4_0		;сохранить ее во втором слагаемом 
	call	FtoReal		;перевести фактор в плавающий формат
				;и поместить его в первое слагаемое
	call	mul3		;умножить фактор на плотность

        call    zapRez
        call    vivC                    ;вывод концентрации на индикатор
        jnb     konec,KtFBb_5a
        ret
KtFBb_5a:
        call    out_str2

;        mov     DPTR,#iProbaD   ;вывод плотности на индикатор
;	call	zagr
;	call	obch2
KtFBb_6:
        call    klav		;опрос клавиатуры
;        jnb     prF,KtFBb_7
        cjne    A,#KlEsc,KtFBb_7	;ESC
;        clr     prF
        call    zvyk
        setb    konec
        ret
KtFBb_7:
        cjne    A,#KlStart,KtFBb_9	;СТАРТ
	jmp	KtFBb_2a		
KtFBb_8:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret

KtFBb_9:
        cjne    A,#KlPrint,KtFBb_6
        call    zvyk
        call    pInf1
        jmp     KtFBb_6



;*******************************************************************
;Режим 	КОН. ТОЧКА 
;	Фактор 
;	с бланком пробы    {C = (Ap - Abp) * F}
;*******************************************************************

KtFCb:  
;        call    izmTemn
        call	izmBp		;Измерение бланка пробы и сохранение в Abp0..3
	jnb	konec,KtFCb_1
	ret
KtFCb_1:

        call    zdInd

        mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart ;измерение пробы
        call    zagr
        call    out_str2
KtFCb_2:
        call    klav
        cjne    A,#KlEsc,KtFCb_3
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtFCb_3:	
        cjne    A,#KlStart,KtFCb_2
KtFCb_4:
        call    zvyk            ;нажата Start
;        mov     A,podRej
        call    izmer           ;измерить OК
;        mov     Iozh,I1oh       ;переслать в Iozh,Iozm,Iozl
;        mov     Iozm,I1om
;        mov     Iozl,I1ol
;        call    izmIK           ;измерить ИК
        call    D1		;вычислить плотность
        mov     A,ERROR
        jz      KtFCb_5
        jmp     KtFCb_8
KtFCb_5:
        mov     R0,#Abp0        ;занесение во второе слагаем. бланка пробы
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    subb3
	call	mv4_0		;сохранить разность плотностей во втором слагаемом
	call	FtoReal		;перевести фактор в плавающий формат
				;и поместить его в первое слагаемое
	call	mul3		;умножить фактор на разность плотностей

        call    zapRez
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,KtFCb_5a
        ret
KtFCb_5a:
        call    out_str2

;        mov     DPTR,#iProbaD   ;вывод плотности на индикатор
;	call	zagr
;	call	obch2
KtFCb_6:
        call    klav   		;опрос клавиатуры
        cjne    A,#KlEsc,KtFCb_7	;ESC
        call    zvyk
        setb    konec
        ret
KtFCb_7:
        cjne    A,#KlStart,KtFCb_9	;СТАРТ
	jmp	KtFCb_4		;
KtFCb_8:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret
KtFCb_9:
        cjne    A,#KlPrint,KtFCb_10
        call    zvyk            ;вывод результата на принтер
        call    pInf1
        jmp     KtFCb_6
KtFCb_10:
	cjne	A,#KlEnter,KtFCb_6
	call	zvyk
	jmp	KtFCb


;*******************************************************************
;Режим 	КОН. ТОЧКА 
;	Стандарт 
;	c бланком пробы             {C = (Ap - Abp) / As * Cs}
;*******************************************************************
KtSCBp: 

        call    vichislF
	jnb	konec,KtSCBp_8
	ret
KtSCBp_8:
        call    izmBP           ;Измерение БЛАНКА ПРОБЫ
        jnb     konec,KtSCBp_9
        ret
KtSCBp_9:
        call    out_str2        ;индикация бланка пробы
        call    zdInd           ;

	mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
KtSCBp_10:
        call    klav
        cjne    A,#KlEsc,KtSCBp_11
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtSCBp_11:	
        cjne    A,#KlStart,KtSCBp_10
KtSCBp_12:
        call    zvyk            ;нажата СТАРТ
;        mov     A,podRej
KtSCBp_13:
        call    izmer           ;измерить OК (проба)
;        mov     Iozh,I1oh       ;переслать в Iozh,Iozm,Iozl
;        mov     Iozm,I1om
;        mov     Iozl,I1ol
;        call    izmIK           ;измерить ИК (проба)
        call    D1
        mov     A,ERROR
        jz      KtSCBp_14
        jmp     KtSCBp_17
KtSCBp_14:
        mov     R0,#Abp0	;занесение во второе слагаем. плотности бланка пробы
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    subb3           ;получение Ap - Abp



; 	call	mv4_0		;сохранить  во втором слагаемом
;	call	CstoReal	;перевод введенной в память конц. в плав. формат	
;	call	mul3		;и умножение ее на Ap - Abp
        mov     A,ERROR
        jnz     KtSCBp_17
;        jmp     KtSCBp_17
KtSCBp_14a:
        mov     R0,#vADR0       ;временные ячейки во второе слагаемое
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    mul3            ;Умножение пробы на вычисленный фактор

;        mov     R0,#As0		;занесение во второе слагаем. плотности  стандарта
;        mov     ADR4,@R0
;        inc     R0
;        mov     ADR5,@R0
;        inc     R0
;        mov     ADR6,@R0
;        inc     R0
;        mov     ADR7,@R0
;        call	div3            ;получение конечного результата
        mov     A,ERROR
        jz      KtSCBp_14b
        jmp     KtSCBp_17
KtSCBp_14b:
  
        call    zapRez          ;запись результата в память
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,KtSCBp_14v
        ret
KtSCBp_14v:
        call    out_str2
        		
KtSCBp_15:
        call    klav		;опрос клавиатуры
        cjne    A,#KlEsc,KtSCBp_16	;ESC
        call    zvyk
        setb    konec
        ret
KtSCBp_16:
        cjne    A,#KlStart,KtSCBp_18	;Start
	jmp	KtSCBp_12		
KtSCBp_17:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret

KtSCBp_18:
        cjne    A,#KlPrint,KtSCBp_19     ;вывод на принтер
        call    zvyk
        call    pInf1
        jmp     KtSCBp_15

KtSCBp_19:
	cjne	A,#KlEnter,KtSCBp_15
	call	zvyk
	jmp	KtSCBp_8




;*******************************************************************
;Режим 	КОН. ТОЧКА 
;	Стандарт 
;	c бланком стандарта            {C = [Ap/(As - Abs)] * Cs }
;*******************************************************************
KtSCBs: 
        call    vichislF
	jnb	konec,KtSCBs_8
	ret

KtSCBs_8:
        call    izmBS           ;Измерение БЛАНКА СТАНДАРТА
        jnb     konec,KtSCBs_9
        ret
KtSCBs_9:
        call    out_str2        ;индикация бланка стандарта
        call    zdInd           ;
        call    mv4_0           ;сохранить бланк стандарта во втором слагаемом
        mov     R0,#As0         ;занесение в первое слагаемое плотности стандарта
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    subb3           ;получить (As - Abs)
        mov     A,ERROR
        jnz     KtSCBs_17
        call    mv4_0           ;сохранить во втором слагаемом
        call    CstoReal        ;занести концентрацию стандарта в первое 
        call    div3            ;получить Cs/(As - Abs) 
        mov     A,ERROR
        jnz     KtSCBs_17  
        mov     R0,#vADR0       ;сохранение во временных ячейках vADR0..vADR3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3



	mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2



KtSCBs_10:
        call    klav
        cjne    A,#KlEsc,KtSCBs_11
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtSCBs_11:	
        cjne    A,#KlStart,KtSCBs_10
KtSCBs_12:
        call    zvyk            ;нажата СТАРТ

        call    izmer           ;измерить OК (проба)
        call    D1
        mov     A,ERROR
        jz      KtSCBs_14
        jmp     KtSCBs_17
KtSCBs_14:

        mov     R0,#vADR0       ;временные ячейки во второе слагаемое
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    mul3            ;Умножение пробы 
        mov     A,ERROR
        jnz     KtSCBs_17

        call    zapRez          ;запись результата в память
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,KtSCBs_14a
        ret
KtSCBs_14a:
        call    out_str2

;        mov     DPTR,#   ;вывод плотности на индикатор
;	call	zagr
;	call	obch2
KtSCBs_15:
        call    klav		;опрос клавиатуры
        cjne    A,#KlEsc,KtSCBs_16	;ESC
        call    zvyk
        setb    konec
        ret
KtSCBs_16:
        cjne    A,#KlStart,KtSCBs_18	;Start
	jmp	KtSCBs_12		
KtSCBs_17:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret
KtSCBs_18:
        cjne    A,#KlPrint,KtSCBs_19
        call    zvyk
        call    pInf1
        jmp     KtSCBs_15
KtSCBs_19: 
	cjne	A,#KlEnter,KtSCBs_15
	call	zvyk
	jmp	KtSCBs_8	

;*******************************************************************
;Режим 	КОН. ТОЧКА 
;	Стандарт 
;	c бланком стандарта  и бланком пробы          {C = [(Ap - Abp) / (As -Abs)] * Cs}
;*******************************************************************
KtSCBps:
;        call    vichislF
;	jnb	konec,KtSCBps_8
;	ret


;_______________________________________________________________________________

        mov     DPTR,#iCsRavno  ;Высветить "Изменить Cs"
        call    zagr
        mov     R0,#ZnCs
        mov     R1,#ZN7
        call    indChislo
        call    out_str1
        mov     DPTR,#iDaNet    ;"1-Да   2-Нет"
        call    zagr
        call    out_str2
KtSB_1:
        call    klav
        cjne    A,#KlEsc,KtSB_1a
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtSB_1a:
        cjne    A,#Kl2,KtSB_2    
        call    zvyk            ;"Да"
        call    vvodCs          ;вводим Cs
        jmp     KtSB_3
KtSB_2:
        cjne    A,#Kl1,KtSB_1
        call    zvyk            ;"Нет"
KtSB_3:
        mov     R0,#Test        ;анализ промерялся ли стандарт вообще
        mov     A,@R0
        jnb     ACC.7,KtSB_6    ;если нет то на KtSBb_6
;стандарт был измерен - спросить о перемерении
        mov     DPTR,#iIzmDs    ;Высветить "Измеpить Ds"
        call    zagr
        call    out_str1
        mov     DPTR,#iDaNet    ;  "1)Да   2)Нет"
        call    zagr
        call    out_str2
KtSB_4:
        call    klav
        cjne    A,#KlEsc,KtSB_4a
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtSB_4a:
        cjne    A,#Kl1,KtSB_5    
        call    zvyk            ;"Да"
        jmp     KtSB_6
KtSB_5:
        cjne    A,#Kl2,KtSB_4
        call    zvyk            ;"Нет"
        jmp     KtSCBps_9       ;KtSB7b
KtSB_6:
        call    izmBS           ;Измерение БЛАНКА СТАНДАРТА
        jnb     konec,KtSB_6a
        ret
KtSB_6a:
        call    out_str2
        call    zdInd           ;задержка для временной индикации бланка стандарта
        call	izmSt		;Измерение стандарта  и сохранение в As0..As3
	jnb	konec,KtSB_7
	ret
KtSB_7:	
;------------------------------------------------------
;Cохранение стандарта и вычисление фактора
        call    out_str2
        call    zdInd           ;задержка для временной индикации стандарта
KtSB7b:
        mov     R0,#Abs0        ;занесение во второе слагаемое бланка стандарта Abs
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        mov     R0,#As0         ;занесение в первое слагаемое плотности стандарта As
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    subb3           ;получить (As - Abs) и эту величину обозначим просто стандартом
                                ;занесем ее на место стандарта в EEPROM для последующего вычисления фактора
        mov     A,ERROR
        jz      KtSB_7d
        jmp     KtSCBps_19

KtSB_7d:
        mov     R0,#As0		;сохранить стандарт (As - Abs) в ячейках As0..As3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        call    wrBlok2         ;запись в EEPROM 
;        call    CstoReal        ;занести концентрацию стандарта в первое слагаемое



;        mov     R0,#As0         ;занести во второе слагаемое плотность стандарта
;        mov     ADR4,@R0
;        inc     R0
;        mov     ADR5,@R0
;        inc     R0
;        mov     ADR6,@R0
;        inc     R0
;        mov     ADR7,@R0
;        call    div3            ;получение фактора  в ADR0..ADR3
;        mov     A,ERROR
;        jnz     KtSB7c  
;        mov     R0,#vADR0       ;сохранение во временных ячейках vADR0..vADR3
;        mov     @R0,ADR0
;        inc     R0
;        mov     @R0,ADR1
;        inc     R0
;        mov     @R0,ADR2
;        inc     R0
;        mov     @R0,ADR3
;        ret
;KtSB7c:
;	call    och             ;проиндицировать ошибку
;        ret
;--------------------------------------------------------------------------------

;___________________________________________________________________________________






;KtSCBps_8:
;        call    izmBS           ;Измерение БЛАНКА СТАНДАРТА
;        jnb     konec,KtSCBps_9
;        ret
KtSCBps_9:
;        call    out_str2        ;индикация бланка стандарта
;        call    zdInd           ;
        call    izmBP           ;Измерение БЛАНКА ПРОБЫ
        jnb     konec,KtSCBps_11
        ret
KtSCBps_11:
        call    out_str2        ;индикация бланка пробы
        call    zdInd           ;

;        mov     R0,#Abs0        ;занесение во второе слагаемое бланка стандарта Abs
;        mov     ADR4,@R0
;        inc     R0
;        mov     ADR5,@R0
;        inc     R0
;        mov     ADR6,@R0
;        inc     R0
;        mov     ADR7,@R0
;        mov     R0,#As0         ;занесение в первое слагаемое плотности стандарта As
;        mov     ADR0,@R0
;        inc     R0
;        mov     ADR1,@R0
;        inc     R0
;        mov     ADR2,@R0
;        inc     R0
;        mov     ADR3,@R0
;        call    subb3           ;получить (As - Abs)
;        mov     A,ERROR
;        jz      KtSCBps_11a
;        jmp     KtSCBps_19
;
;KtSCBps_11b:
;        jmp     KtSCBps_19

KtSCBps_11a:
;        call    mv4_0           ;сохранить во втором слагаемом
;ВЫЧИСЛЕНИЕ ФАКТОРА
        call    CstoReal        ;занести концентрацию стандарта в первое 

        mov     R0,#As0         ;занести во второе слагаемое плотность стандарта
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
 
        call    div3            ;получить Cs/(As - Abs) 
        mov     A,ERROR
        jnz     KtSCBps_15a;11b
        mov     R0,#vADR0       ;сохранение во временных ячейках vADR0..vADR3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
 	mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
KtSCBps_12:
        call    klav
        cjne    A,#KlEsc,KtSCBps_13
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtSCBps_13:	
        cjne    A,#KlStart,KtSCBps_12
KtSCBps_14:
        call    zvyk            ;нажата СТАРТ

KtSCBps_15:
        call    izmer           ;измерить OК (проба)
        call    D1
        mov     A,ERROR
        jz      KtSCBps_16
KtSCBps_15a:
        jmp     KtSCBps_19
KtSCBps_16:
        mov     R0,#Abp0		;занесение во второе слагаем. плотности бланка пробы
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    subb3           ;вычисление Ap-Abp
        mov     A,ERROR
        jnz     KtSCBps_19
        mov     R0,#vADR0       ;временные ячейки во второе слагаемое
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    mul3            ;Умножение 
        mov     A,ERROR
        jnz     KtSCBps_19

        call    zapRez          ;запись результата в память
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,KtSCBps_16a
        ret
KtSCBps_16a:
        call    out_str2
KtSCBps_17:
        call    klav		;опрос клавиатуры
        cjne    A,#KlEsc,KtSCBps_18	;ESC
        call    zvyk
        setb    konec
        ret
KtSCBps_18:
        cjne    A,#KlStart,KtSCBps_20	;Start
	jmp	KtSCBps_14		
KtSCBps_19:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret
KtSCBps_20:
        cjne    A,#KlPrint,KtSCBps_21
        call    zvyk
        call    pInf1           ;печать информации
        jmp     KtSCBps_17

KtSCBps_21:
	cjne	A,#KlEnter,KtSCBps_17
	call	zvyk
	jmp	KtSCBps_9	;KtSB_6	



;**********************************************************************************************
;Двухволновой режим с коррекцией по фактору
;C = (Ap1 - Ap2) * F
;**********************************************************************************************
;темновой ток и контроль на первой длине волны были измерены в общей части
;*******************************************************************
K2F:    mov     R0,#vIzh        ;сохранить контроль измер. и оп. каналов на первой волне в ячейках
        mov     @R0,Izh         ;vIzh,vIzm,vIzl и vIozh,vIozm,vIozl
        inc     R0
        mov     @R0,Izm
        inc     R0
        mov     @R0,Izl
        inc     R0
        mov     @R0,Iozh 
        inc     R0
        mov     @R0,Iozm
        inc     R0
        mov     @R0,Iozl
        mov     R0,#Lw2h        ;заполнить ячейки второй длиной волны
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
        call    prstr           ;перестроить ШД
        call    izmer           ;измерить контроль на второй длине волны и занести в ячейки
                                ;Izh,Izm,Izl и Iozh,Iozm,Iozl

        call    zvyk

        mov     R0,#vIz2h        ;сохранить контроль измер. и оп. каналов на второй волне в ячейках
        mov     @R0,I1h         ;vIz2h,vIz2m,vIz2l и vIoz2h,vIoz2m,vIoz2l
        inc     R0
        mov     @R0,I1m
        inc     R0
        mov     @R0,I1l
        inc     R0
        mov     @R0,I1oh 
        inc     R0
        mov     @R0,I1om
        inc     R0
        mov     @R0,I1ol
	setb	nul1
;        call    izmTemn
K2F_1: 
        mov     DPTR,#iProba    ;измерение пробы на первой длине волны
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2



K2F_2:  call    klav
        cjne    A,#KlEsc,K2F_3
        call    zvyk            ;нажата ESC
        setb    konec
        ret
K2F_3:	cjne    A,#KlStart,K2F_2
           ;нажата START
;        mov     A,podRej
K2F_4:  
        call    zvyk 
        mov     R0,#Lw1h        ;заполнить ячейки первой длиной волны и перестроиться на нее
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
        call    prstr           ;перестроить ШД


        call    izmer           ;измерить OК
        call    zvyk
        mov     R0,#vI1h        ;сохранить пробу измер. и оп. каналов на первой волне в ячейках
        mov     @R0,I1h         ;vI1h,vI1m,vI1l и vIo1h,vIo1m,vIo1l
        inc     R0
        mov     @R0,I1m
        inc     R0
        mov     @R0,I1l
        inc     R0
        mov     @R0,I1oh 
        inc     R0
        mov     @R0,I1om
        inc     R0
        mov     @R0,I1ol

        mov     R0,#Lw2h        ;заполнить ячейки второй длиной волны
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
        call    prstr           ;перестроить ШД
        call    izmer           ;измерить пробу на второй длине волны и занести в ячейки
                                ;vI2h,vI2m,vI2l и vIo2h,vIo2m,vIo2l
        call    zvyk
        mov     R0,#vI2h        ;сохранить пробу измер. и оп. каналов на второй волне в ячейках
        mov     @R0,I1h         ;vI2h,vI2m,vI2l и vIo2h,vIo2m,vIo2l
        inc     R0
        mov     @R0,I1m
        inc     R0
        mov     @R0,I1l
        inc     R0
        mov     @R0,I1oh 
        inc     R0
        mov     @R0,I1om
        inc     R0
        mov     @R0,I1ol
        call    D2

        mov     A,ERROR
        jz      K2F_5
        jmp     K2F_8
K2F_5:
	call	mv4_0		;сохранить ее во втором слагаемом 
	call	FtoReal		;перевести фактор в плавающий формат
        			;и поместить его в первое слагаемое
	call	mul3            ;умножить фактор на плотность
        mov     A,ERROR
        jnz     K2F_8
K2F_5a:
        call    zapRez          ;запись результата в память
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,K2F_5b
        ret
K2F_5b:
        call    out_str2
;        mov     DPTR,#iProbaD   ;вывод плотности на индикатор
;	call	zagr
;	call	obch2
K2F_6:
        call    klav		;опрос клавиатуры
;        jnb     prF,K2F_7
        cjne    A,#KlEsc,K2F_7	;ESC
        call    zvyk
        setb    konec
        ret
K2F_7:
        cjne    A,#KlStart,K2F_9	;СТАРТ
	jmp	K2F_4		
K2F_8:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret
K2F_9:
        cjne    A,#KlPrint,K2F_6
        call    zvyk
        call    pInf1
        jmp     K2F_6



;*******************************************************************
;Режим 	ДВУХВОЛНОВЫЕ ИЗМЕРЕНИЯ
;	Стандарт 
;	{C = [(Ap2 - Ap1) / (As2 - As1)] * Cs}
;*******************************************************************
;измерение контроля на первой длине волны в общей части
K2S:    
        call    zvyk
        mov     R0,#vIzh        ;сохранить контроль измер. и оп. каналов на первой волне в ячейках
        mov     @R0,Izh         ;vIzh,vIzm,vIzl и vIozh,vIozm,vIozl
        inc     R0
        mov     @R0,Izm
        inc     R0
        mov     @R0,Izl
        inc     R0
        mov     @R0,Iozh 
        inc     R0
        mov     @R0,Iozm
        inc     R0
        mov     @R0,Iozl
        mov     R0,#Lw2h        ;заполнить ячейки второй длиной волны
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
        call    prstr           ;перестроить ШД
        call    izmer           ;измерить контроль на второй длине волны и занести в ячейки
                                ;Izh,Izm,Izl и Iozh,Iozm,Iozl
        call    zvyk
        mov     R0,#vIz2h       ;сохранить контроль измер. и оп. каналов на второй волне в ячейках
        mov     @R0,I1h         ;vIz2h,vIz2m,vIz2l и vIoz2h,vIoz2m,vIoz2l
        inc     R0
        mov     @R0,I1m
        inc     R0
        mov     @R0,I1l
        inc     R0
        mov     @R0,I1oh 
        inc     R0
        mov     @R0,I1om
        inc     R0
        mov     @R0,I1ol
	setb	nul1
;------------------------------------------------------------------------------------------------
;пока измерен и сохранен только контроль

;        call    izmTemn
        mov     DPTR,#iIzmCs    ;Высветить "Изменить Cs"
        call    zagr
        call    out_str1
        mov     DPTR,#iDaNet    ;"1)Да   2)Нет"
        call    zagr
        call    out_str2
K2S_1:
        call    klav
        
        cjne    A,#KlEsc,K2S_1a
        call    zvyk
        setb    konec
        ret
K2S_1a:
        cjne    A,#Kl1,K2S_2    
        call    zvyk            ;"Да"
        call    vvodCs          ;вводим Cs
        jmp     K2S_3
K2S_2:
        cjne    A,#Kl2,K2S_1
        call    zvyk            ;"Нет"
K2S_3:
        mov     R0,#Test        ;анализ промерялся ли стандарт вообще
        mov     A,@R0
        jnb     ACC.7,K2S_6     ;если нет то на K2S_6
;стандарт был измерен - спросить о перемерении
        mov     DPTR,#iIzmDs    ;Высветить "Измеpить Ds"
        call    zagr
        call    out_str1
        mov     DPTR,#iDaNet    ;  "1)Да   2)Нет"
        call    zagr
        call    out_str2
K2S_4:
        call    klav
        cjne    A,#KlEsc,K2S_4a ;ESC - выход
        call    zvyk
        setb    konec
        ret
K2S_4a:
        cjne    A,#Kl1,K2S_5    
        call    zvyk            ;"Да"
        jmp     K2S_6
K2S_5:
        cjne    A,#Kl2,K2S_4
        call    zvyk            ;"Нет"
        jmp     K2S_10ba        ;K2S_7


;.....................................................................................
;измерение стандарта на первой длине волны
K2S_6:  mov     R0,#Lw1h        ;заполнить ячейки первой длиной волны и перестроиться на нее
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
        call    prstr           ;перестроить ШД

        mov     DPTR,#iStnd
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
K2S_7:  call    klav
        cjne    A,#KlEsc,K2S_8
        call    zvyk            ;нажата ESC
        setb    konec
        ret
K2S_8:	cjne    A,#KlStart,K2S_7
        call    zvyk            ;нажата START
;        mov     A,podRej
K2S_9:  call    izmer           ;измерить СТАНДАРТ НА ПЕРВОЙ ВОЛНЕ
        call    zvyk
        mov     R0,#vI1h        ;сохранить стандарт  на первой волне в ячейках
        mov     @R0,I1h         ;vI1h,vI1m,vI1l и vIo1h,vIo1m,vIo1l
        inc     R0
        mov     @R0,I1m
        inc     R0
        mov     @R0,I1l
        inc     R0
        mov     @R0,I1oh 
        inc     R0
        mov     @R0,I1om
        inc     R0
        mov     @R0,I1ol

        mov     R0,#Lw2h        ;заполнить ячейки второй длиной волны
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
        call    prstr           ;перестроить ШД
        call    izmer           ;измерить стандарт на второй длине волны и занести в ячейки
                                ;vI2h,vI2m,vI2l и vIo2h,vIo2m,vIo2l
        call    zvyk
        mov     R0,#vI2h        ;сохранить стандарт измер. и оп. каналов на второй волне в ячейках
        mov     @R0,I1h         ;vI2h,vI2m,vI2l и vIo2h,vIo2m,vIo2l
        inc     R0
        mov     @R0,I1m
        inc     R0
        mov     @R0,I1l
        inc     R0
        mov     @R0,I1oh 
        inc     R0
        mov     @R0,I1om
        inc     R0
        mov     @R0,I1ol
        call    D2              ;получение As2 - As1
        mov     A,ERROR
        jz      K2S_10
        jmp     K2S_err
K2S_10:
        mov     R0,#As0		;сохранить стандарт в ячейках As0..As3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        setb    stand
K2S_10a:

        call    indD
        call    zdInd
;        call    out_str2
;        call    zdInd           ;задержка для временной индикации стандарта
K2S_10b:
        call    wrBlok2         ;запись в EEPROM  с кодом E6


K2S_10ba:
        call    CstoReal        ;занести концентрацию стандарта в первое слагаемое
        mov     R0,#As0         ;занести во второе слагаемое плотность стандарта
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    div3            ;получение фактора  в ADR0..ADR3
        mov     A,ERROR
        jz      K2S_10c
        jmp     K2S_err  
K2S_10c:
        mov     R0,#KIN0       ;сохранение Фактора во временных ячейках KIN0..KIN3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
;стандарт измерен и вычислен фактор
;-------------------------------------------------------------------------------------      
        mov     DPTR,#iProba    ;измерение пробы на первой длине волны
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2

;далее будет измерение пробы
K2S_11: 
K2S_12: call    klav
        cjne    A,#KlEsc,K2S_13
        call    zvyk            ;нажата ESC
        setb    konec
        ret
K2S_13:	cjne    A,#KlStart,K2S_12


K2S_13a:
        call    zvyk            ;нажата START
        mov     R0,#Lw1h        ;заполнить ячейки первой длиной волны и перестроиться на нее
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
        call    prstr           ;перестроить ШД

;        mov     A,podRej
K2S_14: call    izmer           ;измерить OК
        call    zvyk
        mov     R0,#vI1h        ;сохранить пробу измер. и оп. каналов на первой волне в ячейках
        mov     @R0,I1h         ;vI1h,vI1m,vI1l и vIo1h,vIo1m,vIo1l
        inc     R0
        mov     @R0,I1m
        inc     R0
        mov     @R0,I1l
        inc     R0
        mov     @R0,I1oh 
        inc     R0
        mov     @R0,I1om
        inc     R0
        mov     @R0,I1ol

        mov     R0,#Lw2h        ;заполнить ячейки второй длиной волны
        mov     ModWlH,@R0
        inc     R0
        mov     ModWlL,@R0
        call    prstr           ;перестроить ШД
        call    izmer           ;измерить пробу на второй длине волны и занести в ячейки
                                ;vI2h,vI2m,vI2l и vIo2h,vIo2m,vIo2l

        mov     R0,#vI2h        ;сохранить пробу измер. и оп. каналов на второй волне в ячейках
        mov     @R0,I1h         ;vI2h,vI2m,vI2l и vIo2h,vIo2m,vIo2l
        inc     R0
        mov     @R0,I1m
        inc     R0
        mov     @R0,I1l
        inc     R0
        mov     @R0,I1oh 
        inc     R0
        mov     @R0,I1om
        inc     R0
        mov     @R0,I1ol
        call    D2
        mov     A,ERROR
        jnz     K2S_err
;плотность измерена и хранится в первом слагаемом
K2S_15:

        mov     R0,#KIN0        ;временные ячейки в которых фактор во второе слагаемое
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    mul3            ;Умножение пробы на вычисленный фактор

        mov     A,ERROR
        jnz     K2S_err
K2S_15a:
        call    zapRez          ;запись результата в память
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,K2S_15b
        ret
K2S_15b:
        call    out_str2

K2S_16:
        call    klav		;опрос клавиатуры
        cjne    A,#KlEsc,K2S_17	;ESC
        call    zvyk
        setb    konec
        ret
K2S_17:
        cjne    A,#KlStart,K2S_18	;Start
	jmp	K2S_13a
        		
K2S_18:
        cjne    A,#KlPrint,K2S_16
        call    zvyk
        call    pInf1
        jmp     K2S_16

K2S_err:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret


;*******************************************************************************
;Кинетические измерения по стандарту
;*******************************************************************************
KinS:

;        call    anKin
;        jnb     konec,KinS_0
;        ret


KinS_0:
        mov     DPTR,#iIzmCs    ;Высветить "Изменить Cs"
        call    zagr
        call    out_str1
        mov     DPTR,#iDaNet    ;"1)Да   2)Нет"
        call    zagr
        call    out_str2
KinS_1:
        call    klav
        cjne    A,#KlEsc,KinS_1a
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KinS_1a:
        cjne    A,#Kl1,KinS_2    
        call    zvyk            ;"Нет"
        call    vvodCs          ;вводим Cs
        jmp     KinS_3
KinS_2:
        cjne    A,#Kl2,KinS_1
        call    zvyk            ;"Да"
KinS_3:
        mov     R0,#Test        ;анализ промерялся ли стандарт вообще
        mov     A,@R0
        jnb     ACC.7,KinS_6    ;если нет то на KinS_6
;стандарт был измерен - спросить о перемерении
        mov     DPTR,#iIzmDs    ;Высветить "Измеpить Ds"
        call    zagr
        call    out_str1
        mov     DPTR,#iDaNet    ;  "1)Да   2)Нет"
        call    zagr
        call    out_str2
KinS_4:
        call    klav
        cjne    A,#KlEsc,KinS_4a
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KinS_4a:
        cjne    A,#Kl1,KinS_5    
        call    zvyk            ;"Да"
        jmp     KinS_6
KinS_5:
        cjne    A,#Kl2,KinS_4
        call    zvyk            ;"Нет"
        jmp     KinS_23
;..........................................................................
;Измерение кинетики стандарта
KinS_6:
        mov     DPTR,#iStnd    ;измерение стандарта
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2

KinS_7: call    klav
        cjne    A,#KlEsc,KinS_8
        call    zvyk            ;нажата ESC
        setb    konec
        clr     strtKin
        ret
KinS_8: cjne    A,#KlStart,KinS_7       ;


KinS_9:                                                                         
        call    zvyk            ;нажата START
        mov     PrJ,#0          ;ПРОМЕЖУТОЧНАЯ ЯЧЕЙКА - это счетчик циклов ФАЗ кинетики
KinS_10:                                                                         
        clr     timEnd          ;обнулить бит конца таймера
        clr     BitSEC          ;обнулить бит смены индикации
 
        setb    strtKin         ;включить таймер на обратный отсчет

        call    TLag            ;заполнить ячейки для таймера для лагфазы

;        setb    IE.0            ;запускаем таймер на отсчет секунд


KinS_11:
;        setb    strtKin
        mov     A,PrJ
        jnz     KinS_12
        call    indLag          ;индикация обратного отсчета времени Лагфазы
        call    out_str1 
        mov     DPTR,#iOchist
        call    zagr
        call    out_str2
        jmp     KinS_13
KinS_12:
        call    indFaz          ;индикация обратного отсчета времени фазы
        call    out_str1  
;        mov     DPTR,#iOchist
;        call    zagr
;        call    out_str2
        
KinS_13:
        setb    strtKin
        jb      timEnd,KinS_15
        jnb     BitSEC,KinS_14
        clr     BitSEC   
        jmp     KinS_11
KinS_14:
        call    stKey
        jz      KinS_13
        call    Key
        cjne    A,#KlEsc,KinS_13
        call    zvyk
        setb    konec
        clr     strtKin
;        clr     IE.0            ;при выходе запретить прерывания
        ret
KinS_15:
;        clr     strtKin
        call    izmer           ;закончено время - измеряем
        call    D1
        mov     A,ERROR
        jz      KinS_16
        jmp     KinS_err
KinS_16:
;..............................................................................
        clr     IE.5            ;запретить прерывания таймера, который может изменить SFRPAGE
        mov     SFRPAGE,#0
        mov     EMI0CN,#1       ;сохранение измерений в ОЗУ процессора
        mov     A,PrJ           ;вычисление адреса ОЗУ по формуле 4*PrJ
        mov     B,#4
        mul     AB
        mov     R0,A            ;посылка первого байта
        mov     A,ADR0          ;
        movx    @R0,A
        inc     R0              ;посылка второго байта
        mov     A,ADR1
        movx    @R0,A
        inc     R0              ;посылка третьего байта
        mov     A,ADR2
        movx    @R0,A
        inc     R0              ;посылка четвертого байта
        mov     A,ADR3
        movx    @R0,A
        setb    IE.5            ;разрешить прерывания таймера

        mov     SFRPAGE,#0Fh

        call    obch1           ;Вывод во вторую строку плотности
        mov     DPTR,#iAp
        call    zagr
        mov     A,PrJ
        inc     A
        orl     A,#30h
        mov     R0,#ZN6         ;в ZN6 заносится номер фазы измерения
        mov     @R0,A               
        mov     R0,#ZN8
        mov     @R0,BIN0
        inc     R0
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        inc     R0
        mov     @R0,BIN3
        inc     R0
        mov     @R0,BIN4
        inc     R0
        mov     @R0,BIN5
        call    out_str2
;..............................................................................
        mov     R0,#NPh
        mov     A,@R0
        cjne    A,PrJ,KinS_17
;        clr     IE.0            ;при выходе запретить прерывания
        jmp     KinS_18
KinS_17:                                                                         ;9
        inc     PrJ
        clr     timEnd          ;обнулить бит конца таймера
        clr     BitSEC          ;обнулить бит смены индикации
        call    TFaz            ;заполнить ячейки для таймера для фазы
        jmp     KinS_11
KinS_18:
;.............................................................................
        call    delta           ;получение  [(Dn - D0)/T
        mov     A,ERROR
        jz      KinS_19
        jmp     KinS_err
KinS_19:
        mov     R0,#As0		;сохранить стандарт в ячейках As0..As3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        setb    stand
KinS_20:
        call    out_str2
        call    zdInd           ;задержка для временной индикации стандарта
KinS_21:

        call    wrBlok2         ;запись в EEPROM 
        call    CstoReal        ;занести концентрацию стандарта в первое слагаемое

        mov     R0,#As0         ;занести во второе слагаемое плотность стандарта
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    div3            ;получение фактора  в ADR0..ADR3
        mov     A,ERROR
        jz      KinS_22
        jmp     KinS_err  
KinS_22:
        mov     R0,#vADR0       ;сохранение Фактора во временных ячейках vADR0..vADR3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
;стандарт измерен и вычислен фактор
;..........................................................................
;..........................................................................
;Измерение кинетики пробы
KinS_23:
        mov     DPTR,#iProba   ;измерение Пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
KinS_24:
        call    klav
        cjne    A,#KlEsc,KinS_25
        call    zvyk            ;нажата ESC
        setb    konec
        clr     strtKin
;        clr     IE.0            ;при выходе запретить прерывания
        ret
KinS_25:
        cjne    A,#KlStart,KinS_24
KinS_26:
        call    zvyk            ;нажата START

        mov     PrJ,#0
KinS_27:
        clr     timEnd          ;обнулить бит конца таймера
        clr     BitSEC          ;обнулить бит смены индикации
        setb    strtKin
        call    TLag            ;заполнить ячейки для таймера для лагфазы
;        setb    IE.0            ;запускаем таймер на отсчет секунд
KinS_28:                                                                              
        mov     A,PrJ
        jnz     KinS_29
        call    indLag          ;индикация обратного отсчета времени Лагфазы
        call    out_str1 
        mov     DPTR,#iOchist
        call    zagr
        call    out_str2
        jmp     KinS_30
KinS_29:                                                                               
        call    indFaz          ;индикация обратного отсчета времени фазы
        call    out_str1   
;        mov     DPTR,#iOchist
;        call    zagr
;        call    out_str2

KinS_30: 

        setb    strtKin
        jb      timEnd,KinS_32
        jnb     BitSEC,KinS_31
        clr     BitSEC   
        jmp     KinS_28
KinS_31:        
        call    stKey
        jz      KinS_30
        call    Key
        cjne    A,#KlEsc,KinS_30
        call    zvyk
        setb    konec
        clr     strtKin
;        clr     IE.0            ;при выходе запретить прерывания
        ret
KinS_32:
        call    izmer           ;закончено время - измеряем
        call    D1
        mov     A,ERROR
        jz      KinS_33
        jmp     KinS_err
KinS_33:
;..............................................................................
        clr     IE.5            ;запретить прерывания таймера, который может изменить SFRPAGE
        mov     SFRPAGE,#0
        mov     EMI0CN,#1       ;сохранение измерений в ОЗУ процессора
        mov     A,PrJ           ;вычисление адреса ОЗУ по формуле 4*PrJ
        mov     B,#4
        mul     AB
        mov     R0,A            ;посылка первого байта
        mov     A,ADR0          ;
        movx    @R0,A
        inc     R0              ;посылка второго байта
        mov     A,ADR1
        movx    @R0,A
        inc     R0              ;посылка третьего байта
        mov     A,ADR2
        movx    @R0,A
        inc     R0              ;посылка четвертого байта
        mov     A,ADR3
        movx    @R0,A
        setb    IE.5            ;разрешить прерывания таймера

        call    obch1           ;Вывод во вторую строку плотности
        mov     DPTR,#iAp
        call    zagr
        mov     A,PrJ
        inc     A
        orl     A,#30h
        mov     R0,#ZN6         ;в ZN6 заносится номер фазы измерения
        mov     @R0,A               
        mov     R0,#ZN8
        mov     @R0,BIN0
        inc     R0
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        inc     R0
        mov     @R0,BIN3
        inc     R0
        mov     @R0,BIN4
        inc     R0
        mov     @R0,BIN5
        call    out_str2
;..............................................................................
        mov     R0,#NPh
        mov     A,@R0
        cjne    A,PrJ,KinS_34
;        clr     IE.0            
        jmp     KinS_35
KinS_34:                                                                         ;17
        inc     PrJ
        clr     timEnd          ;обнулить бит конца таймера
        clr     BitSEC          ;обнулить бит смены индикации
        call    TFaz            ;заполнить ячейки для таймера для фазы
        jmp     KinS_28
KinS_35:                                                                        ;18
;.............................................................................
        call    delta           ;получение  [(Dn - D0)/T
        mov     A,ERROR
        jz      KinS_36
        jmp     KinS_err
KinS_36:                                                                        ;19
;.........................................................................................
        mov     R0,#vADR0
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
	call	mul3		;умножить фактор на [(Dn - D0)*2/TPh]/NPh
        mov     A,ERROR
        jz      KinS_37
        jmp     KinS_err
KinS_37:
        mov     R0,#Abp0        ;временное хранение результата в ячейках для бланка пробы
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        call    zapRez
        call    vivC            ;вывод концентрации на индикатор
        call    out_str2        ;*****************

        mov     R0,#NPh         ;узнаем количество фаз и если их больше двух то во вторую строку
                                ;выведем коэффициент вариации
        mov     A,@R0
        cjne    A,#2,KinS_38
KinS_38:
        jnc     KinS_39

        mov     DPTR,#iOchist
        call    zagr
        call    out_str1
        jmp     KinS_41
KinS_39:
        call    kVar
        mov     R0,#Cv0        ;хранение коэффициента вариации 
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        call    obch1
        mov     A,ERROR
        jz      KinS_40
        cjne    A,#Err_CONCENT,KinS_err
        mov     DPTR,#iCVarMnogo
        call    zagr
        call    out_str1
        jmp     KinS_41
KinS_40:
        mov     DPTR,#iCVar
        call    zagr
        mov     R0,#ZN6
        mov     @R0,BIN0
        inc     R0
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        inc     R0
        mov     @R0,BIN3
        inc     R0
        mov     @R0,BIN4
        inc     R0
        mov     @R0,BIN5
        call    out_str1        ;вывод этой же информации в первую строку чтобы во второй
                                ;вывести коэффициент вариации


        mov     R0,#Abp0        ;возврат результата из ячеек для бланка пробы
        mov     ADR0,@R0        ;этот результат может использоваться при выводе на принтер
        inc     R0              ;pStr4
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0

KinS_41:
        call    klav
        cjne    A,#KlEsc,KinS_42	;ESC
        call    zvyk
        clr     strtKin
        setb    konec
        ret
KinS_42:
        cjne    A,#KlStart,KinS_43	;Start
	jmp	KinS_26
        		
KinS_43:
        cjne    A,#KlPrint,KinS_41
        call    zvyk
        clr     strtKin
        call    pInf2

        jmp     KinS_41

KinS_err:
	call    och             ;проиндицировать ошибку
        clr     strtKin
;        setb    konec
        ret

;**************************************************************************************
;--------------------------------------------------------------------------------------
;КИНЕТИЧЕСКИЕ ИЗМЕРЕНИЯ
;--------------------------------------------------------------------------------------
;**************************************************************************************
;C=(An-A1)xF
KinF:   
;        call    izmTemn
;        call    anKin
;        jnb     konec,KinF_0
;        ret
;KinF_0:
        mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2

KinF_1: call    klav
        cjne    A,#KlEsc,KinF_2
        call    zvyk            ;нажата ESC
        setb    konec
;        clr     IE.0            ;при выходе запретить прерывания
        ret
KinF_2: cjne    A,#KlStart,KinF_1
KinF_3:
        call    zvyk            ;нажата START
;        setb    strtKin
        mov     PrJ,#0
KinF_3a: 
        clr     timEnd          ;обнулить бит конца таймера
        clr     BitSEC          ;обнулить бит смены индикации

        setb    strtKin         ;включить таймер на обратный отсчет

        call    TLag            ;заполнить ячейки для таймера для лагфазы

;        setb    IE.0            ;запускаем таймер на отсчет секунд
KinF_4: mov     A,PrJ           ;если PrJ =0 то лагфаза иначе отсчет фазы
        jnz     KinF_4a
        call    indLag          ;индикация обратного отсчета времени Лагфазы
        call    out_str1 
        mov     DPTR,#iOchist
        call    zagr
        call    out_str2
        jmp     KinF_5
KinF_4a:
        call    indFaz          ;индикация обратного отсчета времени фазы
        call    out_str1
;        mov     DPTR,#iOchist
;        call    zagr
;        call    out_str2
          
KinF_5:
        setb    strtKin
        jb      timEnd,KinF_7
        jnb     BitSEC,KinF_6
        clr     BitSEC   
        jmp     KinF_4
KinF_6: call    stKey
        jz      KinF_5
        call    Key
        cjne    A,#KlEsc,KinF_5
        call    zvyk
        setb    konec
        clr     strtKin
;        clr     IE.0            ;при выходе запретить прерывания
        ret
KinF_7:
;        clr     strtKin
        call    izmer           ;закончено время - измеряем
        call    D1
        mov     A,ERROR
        jz      KinF_8
        jmp     KinF_err
KinF_8: 
;..............................................................................
        clr     IE.5
        mov     SFRPAGE,#0
        mov     EMI0CN,#1       ;сохранение измерений в ОЗУ процессора
        mov     A,PrJ           ;вычисление адреса ОЗУ по формуле 4*PrJ
        mov     B,#4
        mul     AB
        mov     R0,A            ;посылка первого байта
        mov     A,ADR0          ;
        movx    @R0,A
        inc     R0              ;посылка второго байта
        mov     A,ADR1
        movx    @R0,A
        inc     R0              ;посылка третьего байта
        mov     A,ADR2
        movx    @R0,A
        inc     R0              ;посылка четвертого байта
        mov     A,ADR3
        movx    @R0,A
        setb    IE.5

        mov     SFRPAGE,#0Fh

        call    obch1           ;Вывод во вторую строку плотности
        mov     DPTR,#iAp
        call    zagr
        mov     A,PrJ
        inc     A
        orl     A,#30h
        mov     R0,#ZN6         ;в ZN6 заносится номер фазы измерения
        mov     @R0,A               
        mov     R0,#ZN8
        mov     @R0,BIN0
        inc     R0
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        inc     R0
        mov     @R0,BIN3
        inc     R0
        mov     @R0,BIN4
        inc     R0
        mov     @R0,BIN5
        call    out_str2
;..............................................................................
        mov     R0,#NPh
        mov     A,@R0
        cjne    A,PrJ,KinF_9
;        clr     IE.0            ;при выходе запретить прерывания
        jmp     KinF_10
KinF_9:
        inc     PrJ
        clr     timEnd          ;обнулить бит конца таймера
        clr     BitSEC          ;обнулить бит смены индикации
        call    TFaz            ;заполнить ячейки для таймера для лагфазы
        jmp     KinF_4
       
KinF_10:
        nop
;.............................................................................
        call    delta           ;получение  [(Dn - D0)*2/TPh]/NPh
        mov     A,ERROR
        jz      KinF_10a
        jmp     KinF_err
KinF_10a:
	call	mv4_0		;сохранить ее во втором слагаемом 
	call	FtoReal		;перевести фактор в плавающий формат
				;и поместить его в первое слагаемое
	call	mul3		;умножить фактор на [(Dn - D0)*2/TPh]/NPh
        mov     A,ERROR
        jz      KinF_11
        jmp     KinF_err

KinF_11:
        mov     R0,#Abp0        ;временное хранение результата в ячейках для бланка пробы
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3

        call    zapRez
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,KinF_11a
        clr     strtKin
        ret
KinF_11a:
        call    out_str2


        mov     R0,#NPh         ;узнаем количество фаз и если их больше двух то во вторую строку
                                ;выведем коэффициент вариации
        mov     A,@R0
        cjne    A,#2,KinF_12
KinF_12:
        jnc     KinF_13
        mov     DPTR,#iOchist
        call    zagr
        call    out_str1
        jmp     KinF_14
KinF_13:
        call    kVar
        mov     R0,#Cv0        ;хранение коэффициента вариации 
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        call    obch1
        mov     A,ERROR
        jz      KinF_13a
        cjne    A,#Err_CONCENT,KinF_err
        mov     DPTR,#iCVarMnogo
        call    zagr
        call    out_str1
        jmp     KinF_14
KinF_13a:
        mov     DPTR,#iCVar
        call    zagr
        mov     R0,#ZN6
        mov     @R0,BIN0
        inc     R0
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        inc     R0
        mov     @R0,BIN3
        inc     R0
        mov     @R0,BIN4
        inc     R0
        mov     @R0,BIN5
        call    out_str1        ;вывод этой же информации в первую строку чтобы во второй
                                ;вывести коэффициент вариации


        mov     R0,#Abp0        ;возврат результата из ячеек для бланка пробы
        mov     ADR0,@R0        ;этот результат может использоваться при выводе на принтер
        inc     R0              ;pStr4
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0


KinF_14:
        call    klav
        cjne    A,#KlEsc,KinF_15	;ESC
        call    zvyk
        clr     strtKin
        setb    konec
        ret
KinF_15:
        cjne    A,#KlStart,KinF_16	;Start
	jmp	KinF_3
        		
KinF_16:
        cjne    A,#KlPrint,KinF_14
        call    zvyk

        call    pInf2

        jmp     KinF_14

;.......................................................................................
KinF_err:
	call    och             ;проиндицировать ошибку
;        setb    konec
        clr     strtKin
        ret
iCVar:
 db    20h,20h,43h,76h,3Dh,20h,20h,20h,20h,20h,20h,20h,25h,20h,20h,20h
;      .   .   C   v   =   .   .   .   .    .  .   .   %   .   .   . 
iCVarMnogo:
 db    20h,20h,43h,76h,3Dh,2Eh,39h,39h,39h,39h,20h,20h,25h,20h,20h,20h
;      .   .   C   v   =   >   9   9   9    9  .   .   %   .   .   . 

;-----------------------------------------------------------------------------------------
;*********************************************************************************************
;Подпрограмма вычисления коэффициента вариации. Часто употребляемая величина delta хранится
;в DELT0..DELT3, а const1 в KIN0..KIN3.
; Промежуточная сумма (накопления) в ADR8..ADR11
;*********************************************************************************************
kVar:  
        mov     ADR12,#40h      ;Обнуление ячеек для накопления суммы
        mov     ADR13,#0
        mov     ADR14,#0
        mov     ADR15,#0

        mov     PrJ,#0
;считывание из ОЗУ  c младшим индексом во второе слагаемое, а со старшим в первое слагаемое
;и получение их разности
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

kVar_1:
        clr     IE.5
        mov     SFRPAGE,#0
        mov     EMI0CN,#1       ;
        mov     A,PrJ
        mov     B,#4
        mul     AB              ;в ACC. начальный адрес последнего байта
        mov     R0,A            ;чтение первого байта  
        movx    A,@R0
        mov     ADR4,A          ;
        inc     R0              ;чтение второго байта
        movx    A,@R0        
        mov     ADR5,A
        inc     R0              ;чтение третьего байта
        movx    A,@R0        
        mov     ADR6,A
        inc     R0              ;чтение четвертого байта
        movx    A,@R0        
        mov     ADR7,A
;........................................
        inc     R0              ;чтение первого байта 
        movx    A,@R0
        mov     ADR0,A          ;
        inc     R0              ;чтение второго байта
        movx    A,@R0        
        mov     ADR1,A
        inc     R0              ;чтение третьего байта
        movx    A,@R0        
        mov     ADR2,A
        inc     R0              ;чтение четвертого байта
        movx    A,@R0        
        mov     ADR3,A
        setb    IE.5
        mov     SFRPAGE,#0Fh
;.........................................
        call    subb3           ;вычислено Di
        mov     A,ERROR
        jz      kVar_1a
        jmp     kVar_err
;.........................................
kVar_1a:
        mov     R0,#KIN0        ;длительность фазы в минутах заносим во второе слагаемое
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
;.........................................
        call    div3            ;вычислено Di/Tф
        mov     A,ERROR
        jz      kVar_1b
        jmp     kVar_err
kVar_1b:
        call    mv4_0           
        mov     R0,#DELT0       ;заносим дельту в первое слагаемое
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    subb3           ;delta - Di/Tф
        mov     A,ERROR
        jz      kVar_1c
        jmp     kVar_err

kVarDop:
        jmp     kVar_1


kVar_1c:
        call    mv4_0           ;заносим во второе слагаемое
        call    mul3            ;(delta - Di/Tф)**2  возведение в квадрат
        mov     A,ERROR
        jnz     kVar_err
        call    mv4_12
        call    add3            ;накопление суммы
        mov     A,ERROR
        jnz     kVar_err
        call    mv12_0          ;сохранение суммы

        inc     PrJ
        mov     R0,#NPh
        mov     A,@R0
        cjne    A,PrJ,kVarDop
;        call    sqrt            ;вычисление квадратного корня
;        mov     A,ERROR
;        jnz     kVar_err
;        call    mv12_0          ;сохранение в третьем слагаемом
        mov     R0,#NPh         ;вычисление N-1 и перевод в плавающий формат
        mov     A,@R0
        dec     A
        clr     F0
        mov     BIN0,#0
        mov     BIN1,#0
        mov     BIN2,A
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal
        call    mv4_0
        call    mv0_12
        call    div3
        mov     A,ERROR
        jnz     kVar_err


        call    sqrt            ;вычисление квадратного корня
        mov     A,ERROR
        jnz     kVar_err
        call    mv12_0          ;сохранение в третьем слагаемом


        mov     R0,#DELT0       ;заносим дельту во второе слагаемое
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    div3
        mov     A,ERROR
        jnz     kVar_err
        call    mv4_0

        clr     F0              ;умножить на 100
        mov     BIN0,#0
        mov     BIN1,#0
        mov     BIN2,#100
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal
        call    mul3
        mov     A,ERROR
        jnz     kVar_err
        ret
kVar_err:
	call    och             ;проиндицировать ошибку
;        setb    konec
        clr     strtKin
        ret

;*********************************************************************************************
;Подпрограмма вычисления разности плотностей между последним и первым измерениями в кинетике,
;приведенная к одной минуте
;результат в ADR0..ADR3                 (Dn - Do)/{(PhH,PhL)*NPh/60}
;*********************************************************************************************
delta:  call    const1          ;вычисление часто употребляемых констант

        mov     R0,#NPh         ;занести в аккумулятор количество ФАЗ
        mov     A,@R0
;считывание из ОЗУ последнего измерения в первое слагаемое
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
        clr     IE.5
        mov     SFRPAGE,#0
        mov     EMI0CN,#1       ;
        mov     B,#4
        mul     AB              ;в ACC. начальный адрес последнего байта
        mov     R0,A            ;чтение первого байта  
        movx    A,@R0
        mov     ADR0,A          ;
        inc     R0              ;чтение второго байта
        movx    A,@R0        
        mov     ADR1,A
        inc     R0              ;чтение третьего байта
        movx    A,@R0        
        mov     ADR2,A
        inc     R0              ;чтение четвертого байта
        movx    A,@R0        
        mov     ADR3,A
;считывание из ОЗУ первого измерения во второе слагаемое
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
        mov     EMI0CN,#1       ;
        mov     A,#0
        mov     B,#4
        mul     AB              ;в ACC. начальный адрес первого байта
        mov     R0,A            ;чтение первого байта  
        movx    A,@R0
        mov     ADR4,A          ;
        inc     R0              ;чтение второго байта
        movx    A,@R0        
        mov     ADR5,A
        inc     R0              ;чтение третьего байта
        movx    A,@R0        
        mov     ADR6,A
        inc     R0              ;чтение четвертого байта
        movx    A,@R0        
        mov     ADR7,A
        setb    IE.5
        mov     SFRPAGE,#0Fh

;вычисление разности
;............................................................................
        call    subb3           ;Dn - Do
;.......................................................................
        mov     R0,#KIN4
        mov     ADR4,@R0       ;занесение константы во второе слагаемое
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    div3            ;получение (Dn - Do)/{(PhH,PhL)*NPh/60}
        mov     R0,#DELT0       ;сохранение результата в DELT0..DELT4
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
 ;..............................................................................
        ret

;**************************************************************
;Вычисление {(PhH,PhL)*NPh/60}, т.е. вычисление общего времени кинетики, выраженное в минутах 
;Результат в ADR0..ADR3, а также в DES0..DES3.,KIN4..KIN7
;Вычисляется (PhH,PhL)/60 и заносится в ячейки KIN0..KIN3 в плавающем формате
;а затем умножается на количество ФАЗ
;*************************************************************
const1:
;.................................................................
        clr     F0              ;перевод фазы в плавающий формат
        mov     BIN0,#0         
        mov     R0,#PhH
        mov     BIN1,@R0
        inc     R0
        mov     BIN2,@R0
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal
;        call    mv4_0           ;переслать во второе слагаемое
        mov     ADR4,#46H       ;занесение числа 60 во второе слагаемое
        mov     ADR5,#0H
        mov     ADR6,#0
        mov     ADR7,#0F0H
        call    div3            ;деление
        mov     R0,#KIN0        ;сохранение длительности фазы в минутах (PhH,PhL)/60 в KIN0..KIN3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        call    mv4_0           ;переслать во второе слагаемое

        clr     F0              ;перевод количества фаз в плавающий формат
        mov     BIN0,#0         
        mov     BIN1,#0
        mov     R0,#NPh
        mov     BIN2,@R0
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal
        call    mul3

        mov     R0,#KIN4        ;сохранение {(PhH,PhL)*NPh/60} в KIN4..KIN7
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        mov     DES0,ADR0
        mov     DES1,ADR1
        mov     DES2,ADR2
        mov     DES3,ADR3
        ret
;..................................................................               

;*****************************************************************
;Подпрограмма вычисления плотности в зависимости от режима
;Результат в первом слагаемом
;*****************************************************************
;plotn:  mov     R1,#Rej
;        mov     A,@R1
;        cjne    A,#0,pl1	;0h - измерение плотности
;        call    D1		;
;        ret
;pl1:    cjne	A,#1,pl2	;1h - измерение пропускания
;        ret
;pl2:    cjne	A,#2,pl3	;2h - работа по программам;
;	mov	A,podRej
;	cjne	A,#0,pl2_1
;	call	D1
;	ret
;pl2_1:	nop
;	ret                        
                        
;pl3:	nop
;	ret                        
                        

;***************************************************************
;Подпрограмма вычисления плотности в 1-волновом режиме
;***************************************************************
D1:
        mov     SFRPAGE,#0h     ; выключить таймер 2  (выключение)
        clr     TR2
        mov     SFRPAGE,#0Fh
        call    tay             ;выводим D 1-волнов.
        mov     A,ERROR
        jnz     D1_1
        call    mv4_0
        call    zan11           ;в первое слагаемоe занести 1
        call    div3
        call    lg
D1_1:
        mov     SFRPAGE,#0h     ; включить таймер 2 
        setb    TR2             ; Timer 2 Control Register (включение)
        mov     SFRPAGE,#0Fh    
   	ret
;***************************************************************
;Подпрограмма вычисления плотности в 2-волновом режиме
;***************************************************************
D2:    
        mov     SFRPAGE,#0h     ; выключить таймер 2 на момент измерения (выключение)
        clr     TR2
        mov     SFRPAGE,#0Fh
        mov     R0,#vIzh        ;восстановить контроль на первой длине волны
        mov     Izh,@R0
        inc     R0
        mov     Izm,@R0
        inc     R0
        mov     Izl,@R0
        inc     R0
        mov     Iozh,@R0
        inc     R0
        mov     Iozm,@R0
        inc     R0
        mov     Iozl,@R0

        mov     R0,#vI1h        ;восстановить пробу на первой длине волны
        mov     I1h,@R0
        inc     R0
        mov     I1m,@R0
        inc     R0
        mov     I1l,@R0
        inc     R0
        mov     I1oh,@R0
        inc     R0
        mov     I1om,@R0
        inc     R0
        mov     I1ol,@R0
        call    D1              ;выводим D на первой волне.
        mov     A,ERROR
        jnz     D2_1

        mov     R0,#vADR0       ;сохранение плотности в vADR0..vADR3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3

        mov     R0,#vIz2h       ;восстановить контроль на второй длине волны
        mov     Izh,@R0
        inc     R0
        mov     Izm,@R0
        inc     R0
        mov     Izl,@R0
        inc     R0
        mov     Iozh,@R0
        inc     R0
        mov     Iozm,@R0
        inc     R0
        mov     Iozl,@R0

        mov     R0,#vI2h        ;восстановить пробу на второй длине волны
        mov     I1h,@R0
        inc     R0
        mov     I1m,@R0
        inc     R0
        mov     I1l,@R0
        inc     R0
        mov     I1oh,@R0
        inc     R0
        mov     I1om,@R0
        inc     R0
        mov     I1ol,@R0
        call    D1              ;выводим D на второй волне.
        mov     A,ERROR
        jnz     D2_1
        mov     R0,#vADR0        ;восстановление  плотности на первой волне в ADR4..ADR7
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    subb3           ;получение разности

D2_1:   mov     SFRPAGE,#0h
        setb    TR2             ; Timer 2 Control Register (включение)
        mov     SFRPAGE,#0Fh      
        ret
;***************************************************************
;******************************************************************
;Подпрограмма преобразования стандарта Cs в плавающий формат
;Результат в первом слагаемом ADR0,ADR1,ADR2,ADR3
;******************************************************************
CstoReal:
	mov	R0,#ZnCs	;считывание знака и положения запятой в ACC
	mov	A,@R0
	clr	F0		;предположение что число положительное F=0
	jnb	ACC.7,CstoR_1	;анализ знака
	setb	F0		;число отрицательное F=1
CstoR_1:
	anl	A,#0Fh		;очистить знак и сохранить положение запятой
	mov	R1,A		;в регистре R1
	mov	R0,#CsH	        ;старший байт фактора в R2	
	mov	2,@R0		;
	mov	R0,#CsL	        ;младший байт фактора в R3
	mov	3,@R0		;
        jmp     FtoR_1a

;******************************************************************
;Подпрограмма преобразования Фактора F в плавающий формат
;Результат в первом слагаемом ADR0,ADR1,ADR2,ADR3
;******************************************************************
FtoReal:
	mov	R0,#ZnFakt	;считывание знака и положения запятой в ACC
	mov	A,@R0
	clr	F0		;предположение что число положительное F=0
	jnb	ACC.7,FtoR_1	;анализ знака
	setb	F0		;число отрицательное F=1
FtoR_1:	anl	A,#0Fh		;очистить знак и сохранить положение запятой
	mov	R1,A		;в регистре R1
	mov	R0,#FaktH	;старший байт фактора в R2	
	mov	2,@R0		;
	mov	R0,#FaktL	;младший байт фактора в R3
	mov	3,@R0		;
FtoR_1a:
	mov	DES0,#0		;обнуление десятичных ячеек
	mov	DES1,#0
	mov	DES2,#0
	mov	DES3,#0
	mov	DES4,#0
	mov	DES5,#0
	mov	DES6,#0

;далее идет занесение Фактора в ячейки DES0-2,DES3-DES6 в зависимости от поло-
;жения запятой
	cjne	R1,#1,FtoR_2	;запятая после ПЕРВОГО знака
	mov	A,R2		;выделяем старшую тетраду
	swap	A		;
	anl	A,#0Fh		;
	mov	DES3,A		;помещаем целую часть в DES3
	mov	A,R2		;выделяем старшую тетраду
	swap	A		;
	anl	A,#0F0h		;
	mov	R2,A
	mov	A,R3		;выделяем старшую тетраду
	swap	A		;
	anl	A,#0Fh		;
	orl	A,R2
	mov	DES4,A		;помещаем старшую дробную цифру в DES4
	mov	A,R3		;выделяем старшую тетраду
	swap	A		;
	anl	A,#0Fh		;
	mov	DES5,A		;
	jmp	FtoR_5
FtoR_2:	cjne	R1,#2,FtoR_3	;запятая после ВТОРОГО знака
	mov	DES3,2		;помещаем целую часть в DES3
	mov	DES4,3		;помещаем дробную цифру в DES4
	jmp	FtoR_5
FtoR_3:	cjne	R1,#3,FtoR_4	;запятая после ТРЕТЬЕГО знака
	mov	A,R2		;выделяем старшую тетраду
	swap	A		;
	anl	A,#0Fh		;
	mov	DES2,A		;помещаем старшую целую часть в DES2
	mov	A,R2		;выделяем младшую целую тетраду
	swap	A		;
	anl	A,#0F0h		;
	mov	R2,A
	mov	A,R3		;
	swap	A		;
	anl	A,#0Fh		;
	orl	A,R2
	mov	DES3,A		;помещаем старшую дробную цифру в DES3
	mov	A,R3		;выделяем старшую тетраду
	swap	A		;
	anl	A,#0Fh		;
	mov	DES4,A		;
	jmp	FtoR_5
FtoR_4:	cjne	R1,#4,FtoR_6	;запятой нет
	mov	DES2,2		;помещаем целую часть в DES1
	mov	DES3,3		;DES2
FtoR_5:	call	dtob
	call	inReal
	ret
FtoR_6:	mov	ERROR,#Err_FREAL
	call	och
	ret


;**********************************************************************
;**********************************************************************
;Запись программ и сохранение их в РПЗУ
;**********************************************************************
;**********************************************************************
zapPrg: mov     podRej,#0
        mov     R0,#Test
        mov     @R0,#66h
        call    vvodNP          ;ввод номера программы и сохранение в ячейке NP
        jnb     konec,zP1
        clr     konec
        ret
;***************************************************************************
;выбор подрежима и занесение в ячейку podRej:	0 - конечная точка
;(используют 2 мл. бита)			1 - двухволновой
;						2 - кинетика
;*************************************************************************** 
zP1:    mov     DPTR,#iVibRej   ;в перв. строке  ВЫБЕРИТЕ РЕЖИМ
        call    zagr
        call    out_str1
zP2:    mov     A,podRej
        cjne    A,#0,zP3
        mov     DPTR,#iKonT     ;индикация подрежимов КОH.ТОЧКА
        jmp     zP7
zP3:    cjne    A,#1,zP4
        mov     DPTR,#iDvl      ;ДВУХВОЛHОВОЙ
        jmp     zP7
zP4:    cjne    A,#2,zP5
        mov     DPTR,#iKin      ;КИHЕТИКА
        jmp     zP7
zP5:    mov     A,podRej
        cjne    A,#0FFh,zP6
        mov     podRej,#2
        jmp     zP1
zP6:    mov     podRej,#0
        jmp     zP1
zP7:    call    zagr
        call    out_str2
zP8:    call    stKey           ;анализ клавиатуры
        jz      zP8
        call    key
        cjne    A,#KlVerx,zP9      ;клавиша ВВЕРХ
        call    zvyk
        inc     podRej
        jmp     zP2
zP9:    cjne    A,#KlNiz,zP10     ;клавиша ВHИЗ
        call    zvyk
        dec     podRej
zP9a:   jmp     zP2
zP10:   cjne    A,#KlEsc,zP10a    ;клавиша ESC
        call    zvyk
        ret
;        jmp     zapPrg

zP10a:  cjne    A,#KlEnter,zP9a     ;клавиша ВВОД
        call    zvyk
        call    out_str1        ;перевести вторую строку в первую

;************************************************************************
;ввод коррекции по ФАКТОРУ или СТАHДАРТУ или ГРАФИКУ
;Результат в codeH - 0-ФАКТОР, 1-СТАHДАРТ, 2-ГРАФИК
;************************************************************************
zP10b:  clr     konec
        call    vvodKor         ;ввод коррекции
        jnb     konec,zP11
        ret
;        jmp     zP1
;*****************************************************************
;ввод бланков. Результат в codeL:  0-без бланков,
; 1-БЛАHК ПРОБЫ, 2- БЛАHК СТАHДАРТА, 3-БЛАHК СТАHДАРТА + ПРОБА
;*****************************************************************
zP11:   clr     konec
        mov     codeL,#0
        mov     A,podRej        ;бланки только для конечноточечных измерений
        anl     A,#3
        jnz     zP12        
        call    vvodBl          ;ввод бланков
        jnb     konec,zP12
        ret
;        jmp     zP10b
;полное формирование ячейки podRej в соответствии с таблицей обозначения ячейки
;и запись ее в ячейку Rej
zP12:   mov     A,codeH
        rl      A
        rl      A
        orl     A,podRej
        mov     podRej,A
        mov     A,codeL
        swap    A
        orl     A,podRej
        mov     podRej,A        ;в podRej сформирован полный код подрежима
        mov     R0,#Rej         ;запись в ячейку Rej
        mov     @R0,A
;**********************************************************************
;Подпрограмма ввода с клавиатуры значения фактора F в ячейки FaktH,FaktL
;и его знака в ячейку ZnFakt
;**********************************************************************
zP13:   mov     A,podRej
        anl     A,#0Ch
        cjne    A,#0,zP14
        call    vvodF           ;ввод фактора
        jnb     konec,zP16
        ret
;        jmp     zP1
;        jmp     zP16
;**********************************************************************
;Подпрограмма ввода с клавиатуры значения стандарта S в ячейки FaktH,FaktL
;и его знака в ячейку ZnFakt
;**********************************************************************
zP14:   cjne    A,#04h,zP15
        call    vvodCs          ;ввод стандарта
        jnb     konec,zP16
        ret
;        jmp     zP1
;        jmp     zP16
zP15:   nop                     ;ввод режима графики
        nop
;************************************************************************
;Ввод длины волны
;************************************************************************
zP16:   mov     A,podRej        ;ВВОД ДЛИHЫ ВОЛHЫ
        anl     A,#03h
        cjne    A,#0,zP17
        jmp     zP18
zP17:   cjne    A,#2h,zP19
zP18:   mov     DPTR,#iWl       ;для одноволнового режима
        call    vvodL1
        jnb     konec,zP21
        ret
;        jmp     zP21
zP19:   mov     DPTR,#iWl1      ;для двухволнового режима
        call    vvodL1          ;первая длина
        jnb     konec,zP20
        ret
zP20:   mov     DPTR,#iWl2      ;для двухволнового режима
        call    zagr            ;вторая длина
        call    out_str1
        call    vvodL
        jnb     konec,zP20a
        ret
zP20a:
        mov     R0,#Lw2h
        mov     A,ModWlH
        mov     @R0,A
        mov     R0,#Lw2l
        mov     A,ModWlL
        mov     @R0,A
;***********************************************************************
;Выбор единицы измерения и помещение кода в ячейку Unit1
;***********************************************************************
zP21:   mov     DPTR,#iVibEI    ;выбор единицы измерения
        call    zagr
        call    out_str1
zP22:   mov     prJ,#0
zP23:   mov     DPTR,#iBezEd
	call    adrDP           ;вычисление адреса DPTR
;	call	zagr
        call    out_str2
zP23a:  call    klav            ;анализ клавиатуры
        cjne    A,#KlVerx,zP25     ;ВВЕРХ
        call    zvyk
        dec     prJ
zP24:   mov     A,prJ
        cjne    A,#0FFh,zP23
        mov     prJ,#9
        jmp     zP23
zP25:   cjne    A,#KlNiz,zP26     ;ВHИЗ
        call    zvyk
        inc     prJ
	mov	A,prJ		
        cjne    A,#10,zP23
        mov     prJ,#0
        jmp     zP23
zP26:   cjne    A,#KlEsc,zP27     ;клавиша ESC
        call    zvyk
        ret
;        jmp     zP19
zP27:   cjne    A,#KlEnter,zP23     ;клавиша ВВОД
        call    zvyk
        mov     R0,#Unit1
        mov     A,prJ
        mov     @R0,A
;********************************************************************
;Выбор методики и помещение кода в ячейку Metod
;********************************************************************
zP28:   mov     DPTR,#iVibTest  ;выбор методики
        call    zagr
        call    out_str1
zP29:   mov     prJ,#0
zP30:   mov     DPTR,#iMetod
	call    adrDP           ;вычисление адреса DPTR в зависимости
        call    out_str2
zP30a:  call    klav            ;анализ клавиатуры
        cjne    A,#KlVerx,zP32     ;ВВЕРХ
        call    zvyk
        dec     prJ
zP31:   mov     A,prJ
        cjne    A,#0FFh,zP30
        mov     prJ,#21h
        jmp     zP30
zP32:   cjne    A,#KlNiz,zP33     ;ВHИЗ
        call    zvyk
        inc     prJ
	mov	A,prJ
        cjne    A,#22h,zP30
        mov     prJ,#0
        jmp     zP30
zP33:   cjne    A,#KlEsc,zP34     ;клавиша СТОП
        call    zvyk
        ret
;        jmp     zP22
zP34:   cjne    A,#KlEnter,zP30     ;клавиша ВВОД
        call    zvyk
        mov     R0,#Metod
        mov     A,prJ
        mov     @R0,A
;*************************************************************************
        mov     A,podRej        ;ввод доп. параметров для кинетики
        anl     A,#3h
        cjne    A,#2,zP35
        jmp     zP36
zP35:   jmp     zP56		;для других режимов на высвечивание программы	
;***************************************************
;Для кинетики ВЫБОР ЛАГФАЗЫ и запись ее в ячейки LagH,LagL
;***************************************************
zP36:   mov     DPTR,#iVvedLag  ;выбор Лагфазы
        call    zagr
        call    out_str1
        call    vvodLag
        jnb     konec,zP43
        ret


;        ret


;zP37:   mov     prJ,#1
;zP38:   mov     DPTR,#i0c
;	call    adrDP           ;вычисление адреса DPTR в зависимости
;        call    out_str2
;zP38a:  call    klav            ;анализ клавиатуры
;        cjne    A,#KlVerx,zP40     ;ВВЕРХ
;        call    zvyk
;        dec     prJ
;zP39:   mov     A,prJ
;        cjne    A,#0h,zP38
;        mov     prJ,#10
;        jmp     zP38
;zP40:   cjne    A,#KlNiz,zP41     ;ВHИЗ
;        call    zvyk
;        inc     prJ
;	mov	A,prJ
;        cjne    A,#11,zP38
;        mov     prJ,#1
;        jmp     zP38
;zP41:   cjne    A,#KlEsc,zP42     ;клавиша ESC
;        call    zvyk
;        jmp     zP28
;zP42:   cjne    A,#KlEnter,zP37     ;клавиша ВВОД
;        call    zvyk
;        mov     R0,#Tl
;        mov     A,prJ
;        mov     @R0,A
;***************************************************
;Для кинетики ВЫБОР ФАЗЫ и запись ее в ячейку ТPh
;***************************************************
zP43:   mov     DPTR,#iVvedFaz  ;выбор ФАЗЫ
        call    zagr
        call    out_str1
        call    vvodPH
        jnb     konec,zP50
        ret
;        ret


;zP44:   mov     prJ,#1
;zP45:   mov     DPTR,#i0c
;	call    adrDP           ;вычисление адреса DPTR в зависимости
;        call    out_str2
;zP45a:  call    klav            ;анализ клавиатуры
;        cjne    A,#KlVerx,zP47     ;ВВЕРХ
;        call    zvyk
;        dec     prJ
;zP46:   mov     A,prJ
;        cjne    A,#0h,zP45
;        mov     prJ,#10
;        jmp     zP45
;zP47:   cjne    A,#KlNiz,zP48     ;ВHИЗ
;        call    zvyk
;        inc     prJ
;	mov	A,prJ
;        cjne    A,#11,zP45
;        mov     prJ,#1
;        jmp     zP45
;zP48:   cjne    A,#KlEsc,zP49     ;клавиша СТОП
;        call    zvyk
;        jmp     zP36
;zP49:   cjne    A,#KlEnter,zP44     ;клавиша ВВОД
;        call    zvyk
;        mov     R0,#TPh
;        mov     A,prJ
;        mov     @R0,A
;***************************************************
;Для кинетики ВЫБОР КОЛИЧЕСТВА ФАЗ и запись ее в ячейку NPh
;***************************************************
zP50:   mov     DPTR,#iVvedKF   ;выбор кол. фаз
        call    zagr
        call    out_str1
zP51:   mov     DPTR,#iN        ;высветить N=
        call    zagr
        call    out_str2
zP52:   call    vZN8
        jnb     enter,zP53
zP52a:  call    zvyk
        call    zvyk
        call    zvyk
        jmp     zP52
zP53:   jnb     konec,zP54
        call    zvyk
        jmp     zP43
zP54:	mov     A,BIN0
        cjne    A,#0,zP55
        jmp     zP52a
zP55:   call	vZN8
	jnb	konec,zP55a
	call	zvyk
	jmp	zP43
zP55a:	jnb	enter,zP55b
	call	zvyk
	mov	A,BIN0
	jmp	zP55c
zP55b:	mov     A,BIN0		;проверка на 0
        cjne    A,#0,zP55
        jmp     zP52
zP55c:	mov     R0,#NPh
        mov     @R0,A
;*******************************************************
;Высветить всю программу
;*******************************************************
zP56:   call    indPrg          ;высветить всю программу
zP57:   jnb     konec,zP57a
        ret
zP57a:
        mov     A,NP            ;записать в ПЗУ
        mov     B,#32
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        mov     R1,#Test
        mov     @R1,#66h
zP58:   mov     a,@R1
        mov     DANl,A
        call    wrFM
        inc     ADRl
        inc     R1
        cjne    R1,#LL+1,zP58
        ret
;zP59:   jmp     zapPrg

;********************************************************************
;Процедура измерения плотности и пропускания
;********************************************************************
izD:    clr     konec
        mov     DPTR,#iVibRej   ;в перв. строке  ВЫБЕРИТЕ РЕЖИМ
        call    zagr
        call    out_str1
aiz0:   jb      neprer,aiz1
        mov     DPTR,#iOdin     ;Одиночный
        jmp     aiz2
aiz1:   mov     DPTR,#iNepr     ;Hепрерывный
aiz2:   call    zagr
        call    out_str2
aiz3:   call    stKey           ;анализ клавиатуры
        jz      aiz3
        call    key
        cjne    A,#KlVerx,aiz4     ;клавиша ВВЕРХ
        call    zvyk
        cpl     neprer
        jmp     aiz0
aiz4:   cjne    A,#KlNiz,aiz5     ;клавиша ВHИЗ
        call    zvyk
        cpl     neprer
aiz4a:  jmp     aiz0
aiz5:   cjne    A,#KlEnter,aiz4a    ;клавиша ВВОД
        call    zvyk

        mov     DPTR,#iWl       ;вывод в первую строку сообщения
        call    zagr            ;<ВВЕДИТЕ ДЛ.ВОЛHЫ>
        call    out_str1
        call    vvodL
        jnb     konec,aiz6
        ret                     ;была нажата СТОП

aiz6:   call    prstr           ;перестроить ШД
	call	obest
	call	izmTemn

        call    izmKontr        ;измерить контроль
        jnb     konec,aiz7
        ret
aiz7:   mov     DPTR,#iProba
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
aiz8:   call    klav
        cjne    A,#KlEsc,aiz9
        call    zvyk            ;нажата ESC
        setb    konec
        ret
;        jmp     aiz6
aiz9:   cjne    A,#KlStart,aiz8
        call    zvyk            ;нажата Start
aiz10:  jnb     konec,aiz10a    ;если была ошибка то выход из подпрограммы
        ret
aiz10a:

;	call	izmTemn		;ДОБАВЛЕНО

        call    izmer           ;измерить OК
;       call    izmIK           ;измерить ИК
;***
        clr     maxLamp         ;минимальная яркость
        clr     medLamp
;***



        jb      t,aiz12
        call    D1
        mov     A,ERROR
        jz      aiz11
        jmp     aiz19
aiz11:  
        call    obch1

;        call    realIn
;        call    btod
;        call    okrygl3
        mov     DPTR,#iProbaD   ;вывод плотности на индикатор
        call    zagr

        
        mov     R1,#ZN6
        mov     @R1,BIN0        ;знак
        inc     R1
        mov     @R1,BIN1
        inc     R1
        mov     @R1,BIN2
        inc     R1
        mov     @R1,BIN3
        inc     R1
        mov     @R1,BIN4
        inc     R1
        mov     @R1,BIN5
 
;        mov     A,DES3
;        orl     A,#30h
;        mov     R1,#ZN9
;        mov     @R1,A
;        mov     A,DES4
;        swap    A
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     R1,#ZN11
;        mov     @R1,A
;        mov     A,DES4
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     R1,#ZN12
;        mov     @R1,A
;        mov     A,DES5
;        swap    A
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     R1,#ZN13
;        mov     @R1,A
        jmp     aiz16
aiz12:  call    tay
        mov     A,ERROR
        jz      aiz12a
        jmp     aiz19
aiz12a: call    realIn
        call    btod
        call    okrygl3
        mov     DPTR,#iProbaT   ;вывод пропускания на индикатор
        call    zagr
        mov     A,DES3
        anl     A,#0Fh
        orl     A,#30h
aiz13:  mov     R1,#ZN8
        mov     @R1,A
        mov     A,DES4
        swap    A
        anl     A,#0Fh
        orl     A,#30h
aiz14:  mov     R1,#ZN9
        mov     @R1,A
        mov     A,DES4
        anl     A,#0Fh
        orl     A,#30h
aiz15:  mov     R1,#ZN10
        mov     @R1,A
	mov	R1,#ZN11
	mov	@R1,#2Ch
	mov	R1,#ZN12
        mov     A,DES5
        swap    A
        anl     A,#0Fh
        orl     A,#30h
	mov	@R1,A

aiz16:  call    out_str2
        jb      neprer,aiz17
        jb      neprer,aiz17
        jb      neprer,aiz17

        jmp     aiz8
aiz17:  call	stKey
	call    ojid
        jz      aiz18
        call    key
        cjne    A,#KlEsc,aiz18  ;ESC
        call    zvyk
        setb    konec
        ret
aiz18:  jmp     aiz10
aiz19:  call    och             ;проиндицировать ошибку
        ret


;************************************************************************
;Подпрограмма ввода номера программы
;************************************************************************
vvodNP: mov     DPTR,#iVvodNP   ;вывод
        call    zagr
        call    out_str2
vvNP1:  mov     DES2,#0         ;обнулить ячейки для записи номера программы
        mov     DES3,#0
        mov     A,#0CDh         ;установить моргающий курсор в поз. ZN14
        call    out_ins
        mov     A,#0Fh
        call    out_ins
vvNP1a: call    klav
;        cjne    A,#KlmaxL,vvNP2
;        setb    incL
;        call    zvyk
;        mov     A,#0Ch          ;убрать моргание курсора
;        call    out_ins
;        ret
;        cjne    A,#KlmaxL,vvNP2
;        mov     A,Rejim         ;ПЕРЕХОД К ОЧЕРЕДНОЙ ЗАПИСАННОЙ ПРОГРАММЕ
;        cjne    A,#1,vvNP1b     ;если режим ЗАПИСИ программы то vvNP1a
;        jmp     vvNP1a
;vvNP1b: call    zvyk
;        inc     NP 
;        mov     A,NP
;        cjne    A,#100,vvNP1c
;;        mov     NP,#0
;        jmp     vvNP12
        
                     ;поиск первой записанной прогр.
;vvNP1c: mov     A,NP
;        mov     B,#32
;        mul     AB
;        mov     ADRh,B
;        mov     ADRl,A
;        call    readFM
;        mov     A,DANl
;        jnz     vvNP3b
;        inc     NP
;        mov     A,NP
;        cjne    A,#100,vvNP1c
;        jmp     vvNP12




vvNP2:  cjne    A,#KlEsc,vvNP3  ;нажата ESC
        call    zvyk
        setb    konec
        mov     A,#0Ch          ;убрать моргание курсора и выход
        call    out_ins
        ret
vvNP3:  cjne    A,#KlmaxL,vvNP4  ;нажата клавиша KlmaxL
        mov     A,Rejim         ;
        cjne    A,#1,vNP3       ;если режим ЗАПИСИ программы то vvNP1a
        jmp     vvNP1a
vNP3:   call    zvyk
        mov     NP,#0           ;поиск первой записанной прогр.
vvNP3a: mov     A,NP
        mov     B,#32
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        call    readFM
        mov     A,DANl
        jnz     vvNP3b
        inc     NP
        mov     A,NP
        cjne    A,#100,vvNP3a
        jmp     vvNP12
vvNP3b: mov     DPTR,#iVvodNP   ;вывод сообщ. ПРОГРАММА #..
        call    zagr            ;
        mov     A,NP
        mov     B,#10
        div     AB
        mov     R1,#ZN13
        mov     @R1,A
        inc     R1
        mov     @R1,B
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        call    out_str2        ;вывод сообщ. ПРОГРАММА #..
        ret
vvNP4:  cjne    A,#10,vvNP4a
vvNP4a: jc      vvNP5
        jmp     vvNP1
vvNP5:  push    ACC
        call    zvyk
        pop     ACC
        mov     DES2,A          ;сохранить перв. цифру в DES2
        mov     A,#0CCh         ;установить моргающий курсор в поз. ZN13
        call    out_ins
        mov     A,DES2
        orl     A,#30h          ;вывод первой цифры
        call    out_dan
        mov     A,#0Fh
        call    out_ins
vvNP6:  
        call    klav
        cjne    A,#KlEnter,vvNP6a
        push    ACC
        call    zvyk
        pop     ACC
        mov     DES3,DES2
        mov     DES2,#0
        jmp     vvvNP9b
vvNP6a:
        cjne    A,#KlEsc,vvNP6b
        push    ACC
        call    zvyk
        pop     ACC
        jmp     vvodNP
vvNP6b:
        cjne    A,#10,vvNP7
vvNP7:  jc      vvNP8
        jmp     vvNP6
vvNP8:  push    ACC
        call    zvyk
        pop     ACC
        mov     DES3,A          ;сохранить втор. цифру в DES3
        mov     A,#0CDh         ;установить моргающий курсор в поз. ZN14
        call    out_ins
        mov     A,#0Fh
        call    out_ins



        mov     A,DES3
        orl     A,#30h          ;вывод второй цифры
        call    out_dan
        mov     A,#0CDh         ;установить моргающий курсор в поз. ZN14
        call    out_ins
vvNP9:  
        mov     A,#0CDh         ;установить моргающий курсор в поз. ZN14
        call    out_ins
        mov     A,#0Fh
        call    out_ins

        call    klav
        cjne    A,#KlEnter,vvNP10
vvNP9a:
        call    zvyk            ;нажата ВВОД
vvvNP9b:
        mov     A,DES2
        swap    A
        orl     A,DES3
        mov     DES3,A
vvNP9b: mov     DES0,#0
        mov     DES1,#0
        mov     DES2,#0
        call    p1016
        mov     NP,BIN2
        mov     A,Rejim
        cjne    A,#1,vNP9b      ;если режим ЗАПИСИ программы то vvNP9e
        jmp     vvNP9e
vNP9b:  mov     A,NP
        mov     B,#32
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        call    readFM
        mov     A,DANl
        jnz     vvNP9e
vvNP9c: mov     DPTR,#iVvodNP   ;вывод сообщ. ПРОГРАММА #..
        call    zagr            ;          HЕ ЗАПИСАHА
        mov     A,NP
        mov     B,#10
        div     AB
	orl	A,#30h
	orl	B,#30h
        mov     R1,#ZN13
        mov     @R1,A
        inc     R1
        mov     @R1,B
        call    out_str1        ;вывод сообщ. ПРОГРАММА #..
        mov     DPTR,#iNeZapis
        call    zagr
        call    out_str2        ;  HЕ ЗАПИСАHА
vvNP9d: call    klav

        cjne    A,#KlEsc,vvNP9f
        call    zvyk
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        setb    konec
        ret
vvNP9f:
        cjne    A,#KlEnter,vvNP9d
        call    zvyk
        jmp     vvodNP
vvNP9e: mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vvNP10: cjne    A,#KlEsc,vvNP11   ;нажата ESC
        call    zvyk
        jmp     vvodNP
vvNP11: jmp     vvNP9
vvNP12: mov     DPTR,#iPrgNet   ;вывод сообщения ПРОГРАММ HЕТ
        call    zagr
        call    out_str2
        jmp     vvNP1a

;************************************************************************
;Подпрограмма ввода коррекции по ФАКТОРУ или СТАHДАРТУ или ГРАФИКУ
;Результат в codeH - 0-ФАКТОР, 1-СТАHДАРТ, 2-ГРАФИК
;************************************************************************
vvodKor:
        mov     codeH,#0        ;промежуточная ячейка
vvK1:   mov     A,codeH
        cjne    A,#0,vvK2
        mov     DPTR,#iFakt     ;индикация ФАКТОР
        jmp     vvK6
vvK2:   cjne    A,#1,vvK3
        mov     DPTR,#iStand    ;СТАHДАРТ
        jmp     vvK6
vvK3:   cjne    A,#2,vvK4
        mov     A,podRej        ;график показываем только в одноволновом режиме
        anl     A,#3h
        cjne    A,#0,vvK5    
        mov     DPTR,#iGraf     ;ГРАФИКА
        jmp     vvK6
vvK4:   mov     A,codeH
        cjne    A,#0FFh,vvK5
        mov     A,podRej        ;график показываем только в одноволновом режиме
        anl     A,#3h
        cjne    A,#0,vvK4a    
        mov     codeH,#2
        jmp     vvK1
vvK4a:  mov     codeH,#1
        jmp     vvK1
vvK5:   mov     codeH,#0
        jmp     vvK1
vvK6:   call    zagr
        call    out_str2
vvK7:   call    stKey           ;анализ клавиатуры
        jz      vvK7
        call    key
        cjne    A,#KlNiz,vvK8     ;клавиша ВНИЗ
        call    zvyk
        inc     codeH
        jmp     vvK1
vvK8:   cjne    A,#KlVerx,vvK10    ;клавиша ВВЕРХ
        call    zvyk
        dec     codeH
vvK9:   jmp     vvK1
vvK10:  cjne    A,#KlEsc,vvK11    ;клавиша Esc
        call    zvyk
        setb    konec
        ret
vvK11:  cjne    A,#KlEnter,vvK9     ;клавиша ВВОД
        call    zvyk
        ret

;*****************************************************************
;Подпрограмма ввода бланков. Результат в codeL:  0-без бланков,
; 1-БЛАHК ПРОБЫ, 2- БЛАHК СТАHДАРТА, 3-БЛАHК СТАHДАРТА + ПРОБА
;****************************************************************
vvodBl:
        mov     codeL,#0        ;промежуточная ячейка
        mov     A,codeH         ;проверка работы по фактору
        cjne    A,#2,vvB0a
        ret
vvB0a:
        jnz     vvB0
        jmp     vvB13

vvB0:   cjne    A,#1,vvB1
        jmp     vvB23

;_______________________________________________________________________
vvB1:   mov     A,codeL
        cjne    A,#0,vvB2
        mov     DPTR,#iBezBl    ;индикация БЕЗ БЛАHКОВ
        jmp     vvB7
vvB2:   cjne    A,#1,vvB3
        mov     DPTR,#iBlP      ;БЛАHК ПРОБЫ
        jmp     vvB7
vvB3:   cjne    A,#2,vvB4
        mov     DPTR,#iBlS      ;БЛАHК СТАHДАРТА
        jmp     vvB7
vvB4:   cjne    A,#3,vvB5
        mov     DPTR,#iBlSP     ;БЛАHК СТАHДАРТА + ПРОБА
        jmp     vvB7
vvB5:   mov     A,codeL
        cjne    A,#0FFh,vvB6
        mov     codeL,#3
        jmp     vvB1
vvB6:   mov     codeL,#0
        jmp     vvB1
vvB7:   call    zagr
        call    out_str2
vvB8:   call    stKey           ;анализ клавиатуры
        jz      vvB8
        call    key
        cjne    A,#KlVerx,vvB9     ;клавиша ВВЕРХ
        call    zvyk
        inc     codeL
        jmp     vvB1
vvB9:   cjne    A,#KlNiz,vvB11    ;клавиша ВHИЗ
        call    zvyk
        dec     codeL
vvB10:  jmp     vvB1
vvB11:  cjne    A,#KlEsc,vvB12    ;клавиша СТОП
        call    zvyk
        setb    konec
        ret
vvB12:  cjne    A,#KlEnter,vvB10    ;клавиша ВВОД
        call    zvyk
        ret
;-------------------------------------------------------------
vvB13:  mov     A,codeL
        cjne    A,#0,vvB14
        mov     DPTR,#iBezBl    ;индикация БЕЗ БЛАHКОВ
        jmp     vvB17
vvB14:  cjne    A,#1,vvB15
        mov     DPTR,#iCBlPr ;индикация С бланками
        jmp     vvB17

vvB15:  mov     A,codeL
        cjne    A,#0FFh,vvB16
        mov     codeL,#1
        jmp     vvB13
vvB16:  mov     codeL,#0
        jmp     vvB13
vvB17:  call    zagr
        call    out_str2
vvB18:  call    stKey           ;анализ клавиатуры
        jz      vvB18
        call    key
        cjne    A,#KlVerx,vvB19     ;клавиша ВВЕРХ
        call    zvyk
        inc     codeL
        jmp     vvB13
vvB19:  cjne    A,#KlNiz,vvB21    ;клавиша ВHИЗ
        call    zvyk
        dec     codeL
vvB20:  jmp     vvB13
vvB21:  cjne    A,#KlEsc,vvB22    ;клавиша СТОП
        call    zvyk
        setb    konec
        ret
vvB22:  cjne    A,#KlEnter,vvB13   ;клавиша ВВОД
        call    zvyk
        ret


;-------------------------------------------------------------
vvB23:  mov     A,codeL
        cjne    A,#0,vvB24
        mov     DPTR,#iBezBl    ;индикация БЕЗ БЛАHКОВ
        jmp     vvB26
vvB24:  cjne    A,#3,vvB25
        mov     DPTR,#iCBlPr ;индикация С бланками
        jmp     vvB26

vvB25:  mov     codeL,#0
        jmp     vvB23

vvB26:  call    zagr
        call    out_str2
vvB27:  call    stKey           ;анализ клавиатуры
        jz      vvB27
        call    key
        cjne    A,#KlVerx,vvB31     ;клавиша ВВЕРХ
vvB28:
        call    zvyk
        mov     A,codeL
        cjne    A,#0,vvB29
        mov     codeL,#3
        jmp     vvB23
vvB29:  cjne    A,#3h,vvB30
        mov     codeL,#0
        jmp     vvB23

vvB30:  jmp     vvB25

vvB31:  cjne    A,#KlNiz,vvB32    ;клавиша ВHИЗ
        jmp     vvB28
        
vvB32:  cjne    A,#KlEsc,vvB33    ;клавиша СТОП
        call    zvyk
        setb    konec
        ret
vvB33:  cjne    A,#KlEnter,vvB23   ;клавиша ВВОД
        call    zvyk
        ret



;*******************************************************

iCBlPr:
 db    20h,20h,20h,43h,20h,0B2h,0BBh,61h,0BDh,0BAh,61h,0BCh,0B8h,20h,20h,20h
;      .           C       б    л    a   н    к    a   м    и    .   .   .



;**********************************************************************
;**********************************************************************
;Подпрограмма ввода с клавиатуры значения фактора F в ячейки FaktH,FaktL
;и его знака в ячейку ZnFakt
;**********************************************************************
vvodF:  mov     DPTR,#iVvedF    ;вывод ВВЕДИТЕ ФАКТОР
        call    zagr
        call    out_str1
vvF1:   mov     DPTR,#iFaktor        ;высветить F=
        call    zagr
        call    out_str2
vvF2:   call    vvod4s          ;ввод четырехзначного числа
        jnb     konec,vvF3
        ret
vvF3:   mov     A,BIN1          ;сохранение фактора
        swap    A
        orl     A,BIN2
        mov     R0,#FaktH
        mov     @R0,A
        mov     A,BIN3
        swap    A
        orl     A,BIN4
        mov     R0,#FaktL
        mov     @R0,A
vvF4:   mov     DPTR,#iPolF     ;ввод знака фактора
        call    zagr
        call    out_str1
vvF5:   jb      sig,vvF6
        mov     DPTR,#iPoloj    ;положительный?
        jmp     vvF7
vvF6:   mov     DPTR,#iOtric    ;отрицательный?
vvF7:   call    zagr
        call    out_str2
vvF8:   call    klav
        cjne    A,#KlVerx,vvF9     ;ВВЕРХ
        jmp     vvF10
vvF9:   cjne    A,#KlNiz,vvF11    ;ВHИЗ
vvF10:  call    zvyk
        cpl     sig
        jmp     vvF5
vvF11:  cjne    A,#KlEsc,vvF11a
        call    zvyk
        setb    konec
        ret
vvF11a:
        cjne    A,#KlEnter,vvF8     ;ВВОД
        call    zvyk
vvF12:  mov     R0,#ZnFakt      ;сохранение знака и положения запятой
        mov     A,prJ
        anl     A,#0Fh
        jnb     sig,vvF13
        orl     A,#80h
vvF13:  mov     @R0,A
        ret



;***********************************************************************
;**********************************************************************
;Подпрограмма ввода с клавиатуры значения стандарта S в ячейки CsH,CsL
;и его знака в ячейку ZnCs (знак всегда положительный)
;**********************************************************************
vvodCs: mov     DPTR,#iVvedS    ;вывод ВВЕДИТЕ СТАHДАРТ
        call    zagr
        call    out_str1
vvS1:   mov     DPTR,#iCs        ;высветить S=
        call    zagr
        call    out_str2
vvS2:   call    vvod4s          ;ввод четырехзначного числа
        jnb     konec,vvS3
        ret
vvS3:   mov     A,BIN1          ;сохранение СТАHДАРТА
        swap    A
        orl     A,BIN2
        mov     R0,#CsH
        mov     @R0,A
        mov     A,BIN3
        swap    A
        orl     A,BIN4
        mov     R0,#CsL
        mov     @R0,A
vvS4:   mov     R0,#ZnCs      ;сохранение знака и положения запятой
        mov     A,prJ
        anl     A,#0Fh
;        orl     A,#80h
vvS5:   mov     @R0,A
        ret
;****************************************************************************

;*******************************************************************
;Подпрограмма ввода с клавиатуры четырехзначного числа с запятой
;Цифры располагаются в BIN1...BIN4, положение запятой в prJ
;*******************************************************************
;vvod4s: call    zerBIN          ;обнулить двоичные и десятичные ячейки
;        call    zerDES
;        mov     prJ,#0
;        clr     zptK
;        clr     enter
;________________________
;v4sa:   call    vZN8            ;ввод цифры в поз. ZN8
;        jnb     konec,v4s1      ;если ESC то выйти из подпрограммы
;        ret
;v4s1:   jb      enter,vvod4s
;        jb      zpt,vvod4s      ;запятую проигнорировать
;        mov     BIN1,BIN0       ;первую цифру в BIN1
;        inc     prJ
;________________________
;v4sb:   call    vZN9            ;ввод цифры в поз. ZN9  (вторая цифра)
;        jnb     konec,v4s2      ;если ESC то выйти из подпрограммы
;        ret
;v4s2:   jnb     zpt,v4s3        ;если запятая то установить признак zptK
;        setb    zptK
;        jmp     v4s5
;v4s3:   jnb     enter,v4s4      ;если ВВОД то преобразовать и сохранить число
;        jmp     v4s19
;v4s4:   mov     BIN2,BIN0       ;иначе сохр. и ввод третьей цифры
;        inc     prJ
;________________________
;v4s5:   call    vZN10           ;ввод цифры в поз. ZN10
;        jnb     konec,v4s6      ;если ESC то выйти из подпрограммы
;        ret
;v4s6:   jnb     zpt,v4s7        ;если запятая то установить признак zptK
;        setb    zptK
;        jmp     v4s9
;v4s7:   jnb     enter,v4s8      ;если ВВОД то преобразовать и сохранить число
;        jmp     v4s19
;v4s8:   mov     BIN3,BIN0       ;иначе сохр. и ввод четвертой цифры
;        jb      zptK,v4s9
;        inc     prJ
;_________________________
;v4s9:   call    vZN11
;        jnb     konec,v4s10     ;если ESC то выйти из подпрограммы
;        ret
;v4s10:  jnb     zpt,v4s11       ;если запятая то установить признак zptK
;        setb    zptK
;        jmp     v4s13
;v4s11:  jnb     enter,v4s12     ;если ВВОД то преобразовать и сохранить число
;        jmp     v4s19
;v4s12:  mov     BIN4,BIN0       ;иначе сохр. и ввод пятой цифры
;        jb      zptK,v4s13
;        inc     prJ
;_________________________
;v4s13:  call    vZN12
;        jnb     konec,v4s14     ;если ESC то выйти из подпрограммы
;        ret
;v4s14:  jnb     zpt,v4s15       ;если запятая то установить признак zptK
;        setb    zptK
;        jmp     v4s17
;v4s15:  jnb     enter,v4s16     ;если ВВОД то преобразовать и сохранить число
;        jmp     v4s19
;v4s16:  mov     BIN5,BIN0       ;иначе сохр.
;_________________________
;v4s17:  call    klav
;        cjne    A,#KlEnter,v4s18    ;ВВОД
;        call    zvyk
;        jmp     v4s19
;v4s18:  cjne    A,#KlEsc,v4s17    ;ESC
;        call    zvyk
;        setb    konec
;        ret
;_-_-_-_-_-_-_-_-_-_-_-_-_
;v4s19:  mov     A,prJ           ;получение всего числа в BIN1...BIN4
;        cjne    A,#1,v4s20
;        jmp     v4s22
;v4s20:  cjne    A,#2,v4s21
;        jmp     v4s23
;v4s21:  cjne    A,#3,v4s25
;        jmp     v4s24
;v4s22:  mov     BIN2,BIN3
;v4s23:  mov     BIN3,BIN4
;v4s24:  mov     BIN4,BIN5
;+++++++++++++++++++++++++++++
;v4s25:  ret

;********************************************************************
;*******************************************************************
;Подпрограмма ввода с клавиатуры четырехзначного числа с запятой
;Цифры располагаются в BIN1...BIN4, положение запятой в prJ
;*******************************************************************
vvod4s: 
        mov     A,#0C7h         ;установить моргающий курсор в поз. ZN8
        call    out_ins
        mov     A,#0Fh
        call    out_ins

        mov     A,#20h          ;очистка ячеек при неправильном наборе числа
        call    out_dan
        mov     A,#20h
        call    out_dan
        mov     A,#20h
        call    out_dan
        mov     A,#20h
        call    out_dan
        mov     A,#20h
        call    out_dan
        mov     A,#20h
        call    out_dan

        mov     R0,#ZN9
        mov     A,#20h
        mov     @R0,A
        inc     R0
        mov     @R0,A
        inc     R0
        mov     @R0,A
        inc     R0
        mov     @R0,A
        inc     R0
        mov     @R0,A



        call    zerBIN          ;обнулить двоичные и десятичные ячейки
        call    zerDES
        mov     prJ,#0
        clr     zptK
        clr     enter
;________________________
v4sa:   call    vvZN12          ;ввод ПЕРВОЙ цифры в поз. ZN12
        jnb     konec,v4s1      ;если ESC то выйти из подпрограммы
        ret
v4s1:   jb      enter,vvod4s
        jb      zpt,vvod4s      ;запятую проигнорировать

        mov     BIN1,BIN0       ;первую цифру в BIN1
        inc     prJ

        orl     BIN0,#30h
        mov     R0,#ZN12
        mov     @R0,BIN0
        call    out_str2     

;________________________
v4sb:   call    vZN12           ;ввод цифры в поз. ZN12  (вторая цифра)
        jnb     konec,v4s2      ;если ESC то выйти из подпрограммы
        ret
v4s2:   jnb     zpt,v4s3        ;если запятая то установить признак zptK
        setb    zptK
        jmp     v4s4a
v4s3:   jnb     enter,v4s4      ;если ВВОД то преобразовать и сохранить число
        jmp     v4s19
v4s4:   mov     BIN2,BIN0       ;иначе сохр. и ввод третьей цифры
        inc     prJ

        mov     R0,#ZN12
        mov     A,@R0
        dec     R0
        mov     @R0,A
        orl     BIN0,#30h
        mov     R0,#ZN12
        mov     @R0,BIN0
        call    out_str2  
        jmp     v4s5   
v4s4a:
        mov     R0,#ZN12
        mov     A,@R0
        dec     R0
        mov     @R0,A
        orl     BIN0,#30h
        mov     R0,#ZN12
        mov     @R0,#2Ch
        call    out_str2     


;________________________
v4s5:   call    vZN12           ;ввод цифры в поз. ZN12 (третья цифра)
        jnb     konec,v4s6      ;если ESC то выйти из подпрограммы
        ret
v4s6:   jnb     zpt,v4s7        ;если запятая то установить признак zptK
        setb    zptK
        jmp     v4s8a
v4s7:   jnb     enter,v4s8      ;если ВВОД то преобразовать и сохранить число
        jmp     v4s19
v4s8:   mov     BIN3,BIN0       ;иначе сохр. и ввод четвертой цифры
        jb      zptK,v4s8b
        inc     prJ
v4s8b:
        mov     R0,#ZN11
        mov     A,@R0
        dec     R0
        mov     @R0,A
        mov     R0,#ZN12
        mov     A,@R0
        dec     R0
        mov     @R0,A
        orl     BIN0,#30h
        mov     R0,#ZN12
        mov     @R0,BIN0
        call    out_str2 
        jmp     v4s9    

v4s8a:
        mov     R0,#ZN11
        mov     A,@R0
        dec     R0
        mov     @R0,A
        mov     R0,#ZN12
        mov     A,@R0
        dec     R0
        mov     @R0,A
        orl     BIN0,#30h
        mov     R0,#ZN12
        mov     @R0,#2Ch
        call    out_str2     
;_________________________
v4s9:   call    vZN12           ;ввод цифры в поз. ZN12 (четвертая цифра)
        jnb     konec,v4s10     ;если ESC то выйти из подпрограммы
        ret
v4s10:  jnb     zpt,v4s11       ;если запятая то установить признак zptK
        setb    zptK
        jmp     v4s12a
v4s11:  jnb     enter,v4s12     ;если ВВОД то преобразовать и сохранить число
        jmp     v4s19
v4s12:  mov     BIN4,BIN0       ;иначе сохр. и ввод пятой цифры
        jb      zptK,v4s12b
        inc     prJ
v4s12b:
        mov     R0,#ZN10
        mov     A,@R0
        dec     R0
        mov     @R0,A
        mov     R0,#ZN11
        mov     A,@R0
        dec     R0
        mov     @R0,A
        mov     R0,#ZN12
        mov     A,@R0
        dec     R0
        mov     @R0,A
        orl     BIN0,#30h
        mov     R0,#ZN12
        mov     @R0,BIN0
        call    out_str2  
        jmp     v4s13   

v4s12a:
        mov     R0,#ZN10
        mov     A,@R0
        dec     R0
        mov     @R0,A
        mov     R0,#ZN11
        mov     A,@R0
        dec     R0
        mov     @R0,A
        mov     R0,#ZN12
        mov     A,@R0
        dec     R0
        mov     @R0,A
        orl     BIN0,#30h
        mov     R0,#ZN12
        mov     @R0,#2Ch
        call    out_str2     


;_________________________
v4s13:  call    vZN12           ;ввод цифры в поз. ZN12 (пятая цифра)
        jnb     konec,v4s14     ;если ESC то выйти из подпрограммы
        ret
v4s14:  jnb     zpt,v4s15       ;если запятая то установить признак zptK
        setb    zptK
        jmp     v4s17
v4s15:  jnb     enter,v4s16     ;если ВВОД то преобразовать и сохранить число
        jmp     v4s19
v4s16:  mov     BIN5,BIN0       ;иначе сохр.
        mov     A,#0CCh         ;установить моргающий курсор в поз. ZN12
        call    out_ins
        mov     A,#0Fh
        call    out_ins
;_________________________
v4s17:  mov     A,#0CCh         ;установить моргающий курсор в поз. ZN12
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        call    klav
        cjne    A,#KlEnter,v4s18    ;ВВОД
        call    zvyk
        jmp     v4s19
v4s18:  cjne    A,#KlEsc,v4s17      ;ESC
        call    zvyk
        setb    konec
        ret
;_-_-_-_-_-_-_-_-_-_-_-_-_
v4s19:  mov     A,prJ           ;получение всего числа в BIN1...BIN4
        cjne    A,#1,v4s20
        jmp     v4s23
v4s20:  cjne    A,#2,v4s21
        jmp     v4s24
v4s21:  cjne    A,#3,v4s22
        jmp     v4s25
v4s22:  cjne    A,#4,v4s27
        jmp     v4s26

v4s23:  mov     BIN2,BIN3
v4s24:  mov     BIN3,BIN4
v4s25:  mov     BIN4,BIN5
;+++++++++++++++++++++++++++++
v4s26:  ret
;------------------------------------------
v4s27:  jb      zptK,v4s26
        jmp     vvod4s
;------------------------------------------

;********************************************************
;****************************************************************
;Подпрограмма ввода первой длины волны
;ОБЩАЯ
;****************************************************************
vvodL1:
        call    zagr
        call    out_str1
        call    vvodL
        mov     R0,#Lw1h
        mov     A,ModWlH
        mov     @R0,A
        mov     R0,#Lw1l
        mov     A,ModWlL
        mov     @R0,A
        ret
;***************************************************************
;***************************************************************
;Подпрограмма вычисления адреса
;ОБЩАЯ для един. измерения и метода  Индицирует вторую линию индикатора
;****************************************************************
adrDP:  mov     A,prJ           ;вычисление адреса DPTR в зависимости
adrA:   mov     B,#16           ;от prJ для высвечивания единиц измерения
        mul     AB
        add     A,DPL
        mov     DPL,A
        mov     A,B
        addc    A,DPH
        mov     DPH,A
        call    zagr
;        call    out_str2
        ret
;********************************************************************
;**************************************************************
;Подпрограмма обнуления десятичных ячеек
;**************************************************************
zerDES: mov     DES0,#0
        mov     DES1,#0
        mov     DES2,#0
        mov     DES3,#0
        mov     DES4,#0
        mov     DES5,#0
        mov     DES6,#0
        ret
;**************************************************************
;Подпрограмма обнуления двоичных ячеек
;**************************************************************
zerBIN: mov     BIN0,#0
        mov     BIN1,#0
        mov     BIN2,#0
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        ret

;**********************************************************************
;**********************************************************************
;Ввод цифры в позицию ZN12 второй строки
;**********************************************************************
vvZN12: mov     I2oh,#0CCh         ;установить моргающий курсор в поз. ZN12
        jmp     vZNOb1
;**********************************************************************
;Ввод цифры в позицию ZN8 второй строки
;**********************************************************************
vZN8:   mov     I2oh,#0C8h         ;установить моргающий курсор в поз. ZN8
vZnOb1: 
        clr     enter
        clr     konec
        clr     zpt
vZN81:  
        mov     A,I2oh
        call    out_ins
        mov     A,#0Fh
        call    out_ins

        call    klav
        cjne    A,#KlEsc,vZN82    ;нажата ESC
        call    zvyk
        setb    konec
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vZN82:  
        cjne    A,#KlEnter,vZN83    ;ВВОД
        call    zvyk
        setb    enter
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vZN83:  cjne    A,#10,vZN84     ;ввод цифры
vZN84:  jc      vZN85
        jmp     vZnOb1
vZN85:  push    ACC
        call    zvyk
        mov     A,I2oh
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        pop     ACC
        mov     BIN0,A          ;сохранить перв. цифру в BIN0
        orl     A,#30h          ;вывод первой цифры
        call    out_dan
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
;**********************************************************************
;Ввод цифры в позицию ZN9 второй строки
;**********************************************************************
vZN9:   mov     I2oh,#0C9h         ;установить моргающий курсор в поз. ZN9

vZNOb:  
        clr     enter
        clr     konec
        clr     zpt
vZN91:  
        mov     A,I2oh
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        call    klav
        cjne    A,#KlEsc,vZN92    ;нажата ESC
        call    zvyk
        setb    konec
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vZN92:  cjne    A,#KlEnter,vZN93    ;нажата ВВОД
        call    zvyk
        setb    enter
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vZN93:  cjne    A,#KlZpt,vZN94    ;нажата ЗАПЯТАЯ
	call	zvyk
        setb    zpt
        mov     A,I2oh
        call    out_ins
;        mov     A,#0Fh
;        call    out_ins

        mov     A,#2Ch
        jmp     vZN97
vZN94:  cjne    A,#10,vZN95
vZN95:  jc      vZN96
        jmp     vZN91
vZN96:  push    ACC
        call    zvyk
        mov     A,I2oh
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        pop     ACC
        mov     BIN0,A          ;сохранить перв. цифру в BIN0
        orl     A,#30h          ;вывод  цифры
vZN97:  call    out_dan
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
;**********************************************************************
;Ввод цифры в позицию ZN10 второй строки
;**********************************************************************
vZN10:  mov     I2oh,#0CAh         ;установить моргающий курсор в поз. ZN10
        jmp     vZNOb
;**********************************************************************
;Ввод цифры в позицию ZN11 второй строки
;**********************************************************************
vZN11:  mov     I2oh,#0CBh         ;установить моргающий курсор в поз. ZN11
        jmp     vZNOb
;**********************************************************************
;Ввод цифры в позицию ZN12 второй строки
;**********************************************************************
vZN12:  mov     I2oh,#0CCh         ;установить моргающий курсор в поз. ZN12
        jmp     vZNOb
;**********************************************************************
;Ввод цифры в позицию ZN13 второй строки
;**********************************************************************
vZN13:  mov     I2oh,#0CDh         ;установить моргающий курсор в поз. ZN13
        jmp     vZNOb
;**********************************************************************
;Ввод цифры в позицию ZN14 второй строки
;**********************************************************************
vZN14:  mov     I2oh,#0CEh         ;установить моргающий курсор в поз. ZN14
        jmp     vZNOb

;************************************************************************
;**********************************************************************
;Подпрограмма ввода с клавиатуры длины волны
;Результат в ModWlH,ModWlL
;**********************************************************************
vvodL:  mov     DPTR,#iLtek     ;вывод Lt=NNNнм L=...нм
        call    zagr
;        mov     BIN0,#0
;        mov     BIN1,TekWlH     ;вместо NNN занести текущую длину волны
;        mov     BIN2,TekWlL
;        call    p1610
;        mov     R1,#ZN4         ;в ZN4 - старшую цифру
;        mov     A,DES2
;        call    zanCH
;        mov     A,DES3
;        swap    A
;        call    zanCH
;        mov     A,DES3
;        call    zanCH
        call    out_str2
vvL1:   mov     A,#0C8h         ;установить моргающий курсор в поз. ZN9
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        call    klav
vvL2:   cjne    A,#KlEsc,vvL3     ;нажата СТОП
        call    zvyk
        setb    konec
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vvL3:   cjne    A,#10,vvL4
vvL4:   jc      vvL5
        jmp     vvL1
vvL5:   push    ACC
        call    zvyk
        pop     ACC
        mov     ModWlH,A        ;сохранить перв. цифру в ModWlH

        mov     A,#0C7h         ;установить моргающий курсор в поз. ZN13
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        mov     A,ModWlH
        orl     A,#30h          ;вывод первой цифры
        call    out_dan
vvL6:   call    klav
        cjne    A,#KlEsc,vvL6a  
        call    zvyk
        jmp     vvodL
vvL6a:
        cjne    A,#10,vvL7
vvL7:   jc      vvL8
        jmp     vvL6
vvL8:   push    ACC
        call    zvyk
        pop     ACC
        mov     ModWlL,A        ;сохранить втор. цифру в ModWlL

        mov     A,#0C6h         ;установить моргающий курсор в поз. ZN12
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        mov     A,ModWlH
        orl     A,#30h          ;
        call    out_dan
        
        mov     A,ModWlL
        orl     A,#30h          ;вывод второй цифры
        call    out_dan
vvL9:   call    klav
        cjne    A,#KlEsc,vvL9a  
        call    zvyk
        jmp     vvodL
vvL9a:
        cjne    A,#10,vvL10
vvL10:  jc      vvL11
        jmp     vvL9
vvL11:  push    ACC
        call    zvyk
        mov     A,#0C8h         ;установить моргающий курсор в поз. ZN14
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        pop     ACC
        xch     A,ModWlL
        swap    A
        orl     A,ModWlL
        xch     A,ModWlL
        orl     A,#30h          ;вывод третьей цифры
        call    out_dan

        mov     A,#0C8h         ;установить моргающий курсор в поз. ZN14
        call    out_ins
        mov     A,#0Fh
        call    out_ins
vvL12:  
        mov     A,#0C8h         ;установить моргающий курсор в поз. ZN14
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        call    klav
        cjne    A,#KlEnter,vvL13
        call    zvyk            ;нажата ВВОД
        mov     A,#0Ch          ;Убрать курсор
        call    out_ins
        mov     DES0,#0
        mov     DES1,#0
        mov     DES2,ModWlH
        mov     DES3,ModWlL
        call    p1016
        mov     ModWlH,BIN1
        mov     ModWlL,BIN2
        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,vvL13a
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vvL12a: jmp     vvL1
vvL13:  cjne    A,#KlEsc,vvL14    ;нажата ESC
        call    zvyk
vvL13a:
        jmp     vvodL

vvL14:  jmp     vvL12

;************************************************************************
;**********************************************************************
;Подпрограмма ввода с клавиатуры длительности лагфазы
;Результат в LagH,LagL
;**********************************************************************
vvodLag:  
        mov     DPTR,#iLAG      ;вывод Tл = NNN сек во вторую строку
        call    zagr
        call    out_str2
vvLag1: 
        mov     BIN0,#0
        mov     BIN1,#0
        mov     BIN2,#0
        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        call    klav
vvLag2: cjne    A,#KlEsc,vvLag3 ;нажата СТОП
        call    zvyk
        setb    konec
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vvLag3: cjne    A,#10,vvLag4
vvLag4: jc      vvLag5
        jmp     vvLag1
vvLag5: push    ACC
        call    zvyk
        pop     ACC
        mov     BIN2,A          ;сохранить перв. цифру в BIN2
        mov     A,#0C8h         ;запись в в 9-ю позицию
        call    out_ins
        mov     A,BIN2
        orl     A,#30h          ;вывод первой цифры
        call    out_dan
vvLag6: 
        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        
        call    klav
        cjne    A,#KlEsc,vvLag6a
        call    zvyk
        jmp     vvodLag
vvLag6a:
        cjne    A,#KlEnter,vvLag6b
        call    zvyk
        jmp     vvLag12b        
vvLag6b:
        cjne    A,#10,vvLag7
vvLag7: jc      vvLag8
        jmp     vvLag6
vvLag8: push    ACC
        call    zvyk
        pop     ACC

        mov     BIN1,BIN2       ;сдвиг цифры
        mov     BIN2,A          ;сохранить втор. цифру в BIN2          

        mov     A,#0C7h         ;запись в в 9-ю позицию
        call    out_ins
        mov     A,BIN1
        orl     A,#30h          ;вывод  второй цифры
        call    out_dan
        mov     A,BIN2
        orl     A,#30h
        call    out_dan

vvLag9: 
        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins

        call    klav
        cjne    A,#KlEsc,vvLag9a
        call    zvyk
        jmp     vvodLag
vvLag9a:
        cjne    A,#KlEnter,vvLag9b
        call    zvyk
        jmp     vvLag12b        
vvLag9b:
        cjne    A,#10,vvLag10

vvLag10:  
        jc      vvLag11
        jmp     vvLag9
vvLag11:  
        push    ACC
        call    zvyk
        pop     ACC
        mov     BIN0,BIN1
        mov     BIN1,BIN2
        mov     BIN2,A

;        xch     A,BIN1
;        swap    A
;        orl     A,BIN1
;        xch     A,BIN1

        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins


        mov     A,BIN2
        orl     A,#30h          ;вывод третьей цифры
        call    out_dan

        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins

vvLag12:  
        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins

        call    klav
        cjne    A,#KlEsc,vvLag12c
        call    zvyk
        jmp     vvodLag

vvLag12c:
        cjne    A,#KlEnter,vvLag13
        call    zvyk            ;нажата ВВОД
vvLag12b:
        mov     A,#0Ch          ;Убрать курсор
        call    out_ins

        mov     DES0,#0
        mov     DES1,#0
        mov     A,BIN1
        swap    A
        orl     A,BIN2
        mov     DES3,A
        mov     DES2,BIN0
        call    p1016
        mov     R0,#LagH
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        clr     TR2

        mov     MlSt,#0
        mov     MlMl,#0Ah
        mov     StSt,#1
        mov     StMl,#2Dh
        mov     ChSt,BIN1
        mov     ChMl,BIN2
        call    anSize

        mov     A,B
        setb    TR2
        cjne    A,#1,vvLag12a
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vvLag12a: 
        jmp     vvodLag
vvLag13:  
        cjne    A,#KlEsc,vvLag14    ;нажата ESC
        call    zvyk
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        setb    konec
        ret

;        jmp     vvLag1
vvLag14:  
        jmp     vvLag12



;************************************************************************
;**********************************************************************
;Подпрограмма ввода с клавиатуры длительности фазы
;Результат в LagH,LagL
;**********************************************************************
vvodPH:  
        mov     DPTR,#iPH       ;вывод Tф = NNN сек во вторую строку
        call    zagr
        call    out_str2
vvPH1:  
        mov     BIN0,#0
        mov     BIN1,#0
        mov     BIN2,#0

        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN8
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        call    klav
vvPH2:  cjne    A,#KlEsc,vvPH3 ;нажата СТОП
        call    zvyk
        setb    konec
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vvPH3:  cjne    A,#10,vvPH4
vvPH4:  jc      vvPH5
        jmp     vvPH1
vvPH5:  push    ACC
        call    zvyk
        pop     ACC
        mov     BIN2,A          ;сохранить перв. цифру в BIN0
        mov     A,#0C8h         ;запись в в 9-ю позицию
        call    out_ins
        mov     A,BIN2
        orl     A,#30h          ;вывод первой цифры
        call    out_dan
vvPH6:  
        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins

        call    klav
        cjne    A,#KlEsc,vvPH6a
        call    zvyk
        jmp     vvodPH
vvPH6a:
        cjne    A,#KlEnter,vvPH6b
        call    zvyk
        jmp     vvPH12b        
vvPH6b:

        cjne    A,#10,vvPH7
vvPH7:  jc      vvPH8
        jmp     vvPH6
vvPH8:  push    ACC
        call    zvyk
        pop     ACC

        mov     BIN1,BIN2       ;сдвиг цифры
        mov     BIN2,A          ;сохранить втор. цифру в BIN2          
        mov     A,#0C7h         ;запись в в 9-ю позицию
        call    out_ins
        mov     A,BIN1
        orl     A,#30h          ;вывод  второй цифры
        call    out_dan
        mov     A,BIN2
        orl     A,#30h
        call    out_dan

vvPH9: 
        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins
        call    klav

        cjne    A,#KlEsc,vvPH9a
        call    zvyk
        jmp     vvodPH
vvPH9a:
        cjne    A,#KlEnter,vvPH9b
        call    zvyk
        jmp     vvPH12b        
vvPH9b:
        cjne    A,#10,vvPH10
vvPH10:  
        jc      vvPH11
        jmp     vvPH9
vvPH11: push    ACC
        call    zvyk
        pop     ACC
        mov     BIN0,BIN1
        mov     BIN1,BIN2
        mov     BIN2,A

;        xch     A,BIN1
;        swap    A
;        orl     A,BIN1
;        xch     A,BIN1
        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins

        mov     A,BIN2
        orl     A,#30h          ;вывод третьей цифры
        call    out_dan

        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins
 
vvPH12: 

        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN10
        call    out_ins
        mov     A,#0Fh
        call    out_ins

        call    klav
        cjne    A,#KlEsc,vvPH12c
        call    zvyk
        jmp     vvodPH
vvPH12c:
        cjne    A,#KlEnter,vvPH13
        call    zvyk            ;нажата ВВОД

vvPH12b:
        mov     A,#0Ch          ;Убрать курсор
        call    out_ins

        mov     DES0,#0
        mov     DES1,#0
        mov     A,BIN1
        swap    A
        orl     A,BIN2
        mov     DES3,A
        mov     DES2,BIN0
        call    p1016
        mov     R0,#PhH
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2

        clr     TR2
        mov     MlSt,#0
        mov     MlMl,#0Ah
        mov     StSt,#1
        mov     StMl,#2Dh
        mov     ChSt,BIN1
        mov     ChMl,BIN2
        call    anSize
        mov     A,B
        setb    TR2

        cjne    A,#1,vvPH12a
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        ret
vvPH12a: 
        jmp     vvPH1
vvPH13:  
        cjne    A,#KlEsc,vvPH14    ;нажата ESC
        call    zvyk
        mov     A,#0Ch          ;убрать моргание курсора
        call    out_ins
        setb    konec
        ret
;        jmp     vvPH1
vvPH14:  
        jmp     vvPH12

;--------------------------------------------------------------------------------


;***********************************************************************
;индикация набранной программы
;***********************************************************************
indPrg: clr     enter
        clr     konec
        call    str1            ;вывести str1,str2
        call    out_str1
        call    str2
        call    out_str2
idPr1:  call    klav
idPr10: cjne    A,#KlEnter,idPr10a	;ВВОД
        call    zvyk            
        setb    enter
        ret
idPr10a:
        cjne    A,#KlmaxL,idPr10b
        call    zvyk
        setb    incL
        ret
idPr10b:        
        cjne    A,#KlPrint,idPr11       ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr1
;        ret
idPr11: cjne    A,#KlEsc,idPr12	;ESC
idPr11a:
        call    zvyk
        setb    konec
        ret
idPr12: cjne    A,#KlNiz,idPr1
        call    zvyk            ;ВHИЗ
idPr13: call    str2            ;вывести str2,str3
        call    out_str1
        call    str3
        call    out_str2
idPr2:  call    klav
idPr20: cjne    A,#KlEnter,idPr20a
        call    zvyk            ;ВВОД
        setb    enter
        ret
idPr20a:
        cjne    A,#KlmaxL,idPr20b
        call    zvyk
        setb    incL
        ret
idPr20b:
        cjne    A,#KlPrint,idPr21       ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr2
;        ret
idPr21: cjne    A,#KlEsc,idPr22	;ESC
        call    zvyk
        setb    konec
        ret
idPr22: cjne    A,#KlVerx,idPr23   ;ВВЕРХ
        call    zvyk
        jmp     indPrg
idPr23: cjne    A,#KlNiz,idPr2	;ВHИЗ
        call    zvyk            
idPr24:	call    str3            ;вывести str3,str4
        call    out_str1
        call    str4
        call    out_str2
idPr3:  call    klav
idPr30: cjne    A,#KlEnter,idPr30a	;ВВОД
        call    zvyk            
        setb    enter
        ret
idPr30a:
        cjne    A,#KlmaxL,idPr30b
        call    zvyk
        setb    incL
        ret
idPr30b:
        cjne    A,#KlPrint,idPr31       ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr3
;        ret

idPr31: cjne    A,#KlEsc,idPr32	;Esc
        call    zvyk
        setb    konec
        ret
idPr32: cjne    A,#KlVerx,idPr33   ;ВВЕРХ
        call    zvyk
        jmp     idPr13
idPr33: cjne    A,#KlNiz,idPr3	;ВHИЗ
        call    zvyk            
idPr34:	call    str4            ;вывести str4,str5
        call    out_str1
        call    str5
        call    out_str2
idPr4:  call    klav
idPr40: cjne    A,#KlEnter,idPr40a	;ВВОД
        call    zvyk            
        setb    enter
        ret
idPr40a:
        cjne    A,#KlmaxL,idPr40b
        call    zvyk
        setb    incL
        ret
idPr40b:
        cjne    A,#KlPrint,idPr41       ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr4
;        ret
idPr41: cjne    A,#KlEsc,idPr42	;ESC
        call    zvyk
        setb    konec
        ret
idPr42: cjne    A,#KlVerx,idPr43   ;ВВЕРХ
        call    zvyk
        jmp     idPr24
idPr43: cjne    A,#KlNiz,idPr4	;ВHИЗ
        call    zvyk            
idPr44:	call    str5            ;вывести str5,str6
        call    out_str1
        call    str6
        call    out_str2


idPr5:  call    klav
idPr50: cjne    A,#KlEnter,idPr50a	;ВВОД
        call    zvyk            
        setb    enter
        ret
idPr50a:
        cjne    A,#KlmaxL,idPr50b
        call    zvyk
        setb    incL
        ret
idPr50b:
        cjne    A,#KlPrint,idPr51       ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr5
;        ret
idPr51: cjne    A,#KlEsc,idPr52	;ESC
        call    zvyk
        setb    konec
        ret
idPr52: cjne    A,#KlVerx,idPr53   ;ВВЕРХ
        call    zvyk
        jmp     idPr34
idPr52dop: 
        jmp     idPr8

idPr53: cjne    A,#KlNiz,idPr5	;ВHИЗ
;        call    zvyk            
        mov     A,podRej	;продолжение может быть для кинетики
        anl     A,#3h
        cjne    A,#2,idPr52dop   
	call	zvyk		;звук если кинетика
idPr54:	call    str6            ;вывести str6,str7
        call    out_str1
        call    str7
        call    out_str2

idPr6:  call    klav
idPr60: cjne    A,#KlEnter,idPr60a
        call    zvyk            ;ВВОД
        setb    enter
        ret
idPr60a:
        cjne    A,#KlmaxL,idPr60b
        call    zvyk
        setb    incL
        ret
idPr60b:
        cjne    A,#KlPrint,idPr61       ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr6
;        ret
idPr61: cjne    A,#KlEsc,idPr62	;ESC
        call    zvyk
        setb    konec
        ret
idPr62: cjne    A,#KlVerx,idPr63   ;ВВЕРХ
        call    zvyk
        jmp     idPr44
idPr63: cjne    A,#KlNiz,idPr6	;ВHИЗ
        call    zvyk            
idPr64: call    str7            ;вывести str7,str8
        call    out_str1
        call    str8
        call    out_str2

idPr7:  call	klav
idPr70: cjne    A,#KlEnter,idPr70a
        call    zvyk            ;ВВОД
        setb    enter
        ret
idPr70a:
        cjne    A,#KlmaxL,idPr70b
        call    zvyk
        setb    incL
        ret
idPr70b:
        cjne    A,#KlPrint,idPr71       ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr7
;        ret
idPr71: cjne    A,#KlEsc,idPr72         ;ESC
        call    zvyk
        setb    konec
        ret
idPr72: cjne    A,#KlVerx,idPr74        ;ВВЕРХ
        call    zvyk
        jmp     idPr54


idPr73: jmp	idPr5



idPr74: cjne    A,#KlNiz,idPr7          ;ВВЕРХ
        call    zvyk
;        jmp     idPr54







;******************************************************************
;вывести строку 10    для КИНЕТИКИ
idPr100:
        mov     A,podRej	;продолжение для стандарта
        anl     A,#0Ch
        cjne    A,#4,idPr7      ;******   
;        call    zvyk
        call    str8
        call    out_str1
        call    str9
        call    out_str2
idPr101: 
        call	klav
        cjne    A,#KlEnter,idPr102
        call    zvyk            ;ВВОД
        setb    enter
        ret
idPr102:
        cjne    A,#KlmaxL,idPr103
        call    zvyk
        setb    incL
        ret
idPr103:
        cjne    A,#KlPrint,idPr104      ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr101                                          ;9
;        ret
idPr104:cjne    A,#KlEsc,idPr105        ;ESC
        call    zvyk
        setb    konec
        ret
idPr105: cjne    A,#KlVerx,idPr101         ;ВВЕРХ
        call    zvyk
        jmp     idPr64


;*******************************************************************************8
;вывести строку 9
idPr8:  mov     A,podRej	;продолжение для стандарта
        anl     A,#0Ch
        cjne    A,#4,idPr73   
        call    zvyk
        call    str6
        call    out_str1
        call    str9
        call    out_str2
idPr9:  call	klav
idPr90: cjne    A,#KlEnter,idPr90a
        call    zvyk            ;ВВОД
        setb    enter
        ret
idPr90a:
        cjne    A,#KlmaxL,idPr90b
        call    zvyk
        setb    incL
        ret
idPr90b:
        cjne    A,#KlPrint,idPr91       ;PRINT
        call    zvyk
        call    printTekPrg
        jmp     idPr9
;        ret
idPr91: cjne    A,#KlEsc,idPr92         ;ESC
        call    zvyk
        setb    konec
        ret
idPr92: cjne    A,#KlVerx,idPr9    ;ВВЕРХ
        call    zvyk
        jmp     idPr44

;*************************************************************************
;***************************************************************
;Повторяющийся кусок программы по занесению в ячейки в R1 инф. в КОI-7
;****************************************************************
zanCH:  anl     A,#0Fh
        orl     A,#30h
        mov     @R1,A
        inc     R1
        ret
;**************************************************************
;Индикация номера программы  и методики
; " Прг.#26  Щ.ФОС
;*************************************************
str1:   mov     DPTR,#iGACH
        call    zagr
        mov     A,NP            ;индикация номера программы
        mov     B,#10
        div     AB
        mov     R0,#ZN2
        mov     @R0,#0A8h       ;П
        inc     R0
        mov     @R0,#70h        ;p
        inc     R0
        mov     @R0,#0B4h       ;г
        inc     R0
        mov     @R0,#2Eh        ;.
        inc     R0
        mov     @R0,#23h        ;#
        inc     R0
        orl     A,#30h
        mov     @R0,A
        inc     R0
        orl     B,#30h
        mov     @R0,B
        call    indMet          ;и в этой же строке индикация методики
        ret
;**************************************************************
;Индикация режима работы
;
;*************************************************************
str2:   mov     R0,#Rej         ;индикация режима
        mov     A,@R0
        mov     podRej,A
        anl     A,#3h
        cjne    A,#0,str21
        mov     DPTR,#iKT       ;Кон.точка[ ]
str21:  cjne    A,#1,str22
        mov     DPTR,#iDv       ;двухволн.[ ]
str22:  cjne    A,#2,str23
        mov     DPTR,#iKn       ;Кинетика [ ]
str23:  call    zagr
        mov     A,podRej
        anl     A,#0Ch
	mov     R0,#ZN14
        cjne    A,#0,str24
        mov     @R0,#46h        ;F
str24:  cjne    A,#4,str25
        mov     @R0,#53h        ;S
str25:  cjne    A,#8,str26      ;
        mov     @R0,#47h        ;G
str26:  ret
;**************************************************************
;Индикация длин волн
;
;**************************************************************
str3:   

        mov     A,podRej
        jb      acc.0,str31


        mov     DPTR,#iGACH     ;индикация длин волн
        call    zagr
        mov     R0,#ZN5
        mov     @R0,#0          ;лямбда
        inc     R0
        mov     @R0,#31h        ;1
        inc     R0
        mov     @R0,#3Dh        ;=
        mov     BIN0,#0
	mov	R0,#Lw1h
        mov     BIN1,@R0
	mov	R0,#Lw1l
        mov     BIN2,@R0
        call    p1610
        mov     R0,#ZN8
        orl     DES2,#30h
        mov     @R0,DES2
        inc     R0
        mov     A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	mov	@R0,A
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
	orl	A,#30h
	mov	@R0,A
	inc	R0

;        mov     A,podRej
;        jb      acc.0,str31
        mov     R0,#ZN12
        mov     @R0,#0BDh       ;н
        inc     R0
        mov     @R0,#0BCh       ;м
        ret

str31:
        mov     DPTR,#iGACH     ;индикация длин волн
        call    zagr
        mov     R0,#ZN2
        mov     @R0,#0          ;лямбда
        inc     R0
        mov     @R0,#31h        ;1
        inc     R0
        mov     @R0,#3Dh        ;=
        mov     BIN0,#0
	mov	R0,#Lw1h
        mov     BIN1,@R0
	mov	R0,#Lw1l
        mov     BIN2,@R0
        call    p1610
        mov     R0,#ZN5
        orl     DES2,#30h
        mov     @R0,DES2
        inc     R0
        mov     A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	mov	@R0,A
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
	orl	A,#30h
	mov	@R0,A
	inc	R0

;        mov     A,podRej
;        jb      acc.0,str31
;        mov     R0,#ZN9
;        mov     @R0,#0BDh       ;н
;        inc     R0
;        mov     @R0,#0BCh       ;м
;        ret
str32:  mov     R0,#ZN9
;        mov     @R0,#3Bh
;        inc     R0
;        inc     R0
        mov     @R0,#0         ;лямбда
        inc     R0
        mov     @R0,#32h       ;2
        inc     R0
        mov     @R0,#3Dh       ;=
        mov     BIN0,#0
	mov	R0,#Lw2h
        mov     BIN1,@R0
	mov	R0,#Lw2l
        mov     BIN2,@R0
        call    p1610
        mov     R0,#ZN12
        orl     DES2,#30h
        mov     @R0,DES2
        inc     R0
        mov     A,DES3

	swap	A
	anl	A,#0Fh
	orl	A,#30h
	mov	@R0,A
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
	orl	A,#30h
	mov	@R0,A
	inc	R0

;        inc     R0
;        inc     R0
        mov     @R0,#0BDh      ;н
        inc     R0
        mov     @R0,#0BCh      ;м
        ret
iABravno:    
        db     'G=      x+      '
;***********************************************************
;Индикация фактора или стандарта
;
;***********************************************************
str4:   mov     DPTR,#iGACH     ;индикация фактора или станд., или а и в для графики
        call    zagr
        mov     A,podRej
        anl     A,#0Ch
        mov     R1,#ZN5
        cjne    A,#0,str41
;        mov     @R0,#30h
;        inc     R0
        mov     @R1,#46h        ;F
        inc     R1
        mov     @R1,#3Dh        ;=
        mov     R0,#ZnFakt
        jmp     str42
str41:  cjne    A,#4h,str43
        mov     R1,#ZN4
        mov     @R1,#43h        ;C
        inc     R1
        mov     @R1,#73h        ;s
        inc     R1
        mov     @R1,#3Dh        ;=
        mov     R0,#ZnCs
str42:  
        mov     R1,#ZN7
        call    indChislo
        ret  
str43:  
        mov     DPTR,#iABravno          ;выводим а и в для графики
        call    zagr
        mov     R0,#Test
        mov     A,@R0
        jb      ACC.7,str44
        mov     R0,#ZN3                 ;график не строился выводим прочерки
        mov     @R0,#2Dh
        inc     R0
        mov     @R0,#2Dh
        inc     R0
        mov     @R0,#2Dh
        mov     R0,#ZN10
        mov     @R0,#2Dh
        inc     R0
        mov     @R0,#2Dh
        inc     R0
        mov     @R0,#2Dh
        ret 
str44:  mov     R0,#As0         ;занести в первое слагаемое коэф. а
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    obch1           ;перевести в индик. коды
        mov     A,ERROR
        cjne    A,#Err_CONCENT,str45
        mov     ERROR,#0
        mov     R0,#ZN3         ;a>9999
        mov     @R0,#3Eh
        inc     R0
        mov     @R0,#39h
        inc     R0
        mov     @R0,#39h
        inc     R0
        mov     @R0,#39h
        inc     R0
        mov     @R0,#39h

        jmp     str46
str45:  
        mov     R0,#ZN3         ;a=
        mov     @R0,BIN0
        inc     R0
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        inc     R0
        mov     @R0,BIN3
        inc     R0
        mov     @R0,BIN4
        inc     R0
        mov     @R0,BIN5
str46:  mov     R0,#HH         ;занести в первое слагаемое коэф. b
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    obch1           ;перевести в индик. коды
        mov     A,ERROR
        cjne    A,#Err_CONCENT,str47
        mov     ERROR,#0
        mov     R0,#ZN11         ;b>9999
        mov     @R0,#3Eh
        inc     R0
        mov     @R0,#39h
        inc     R0
        mov     @R0,#39h
        inc     R0
        mov     @R0,#39h
        inc     R0
        mov     @R0,#39h
        jmp     str48
str47:  
        mov     R0,#ZN11         ;
        mov     @R0,BIN0
        inc     R0
        mov     @R0,BIN1
        inc     R0
        mov     @R0,BIN2
        inc     R0
        mov     @R0,BIN3
        inc     R0
        mov     @R0,BIN4
        inc     R0
        mov     @R0,BIN5
str48:
        ret
;        mov     A,@R0
;        jnb     ACC.7,str43
;        mov     R0,#ZN7
;        mov     @R0,#2Dh        ;-
;str43:  clr     ACC.7
;        mov     R1,A            ;сохранение положения знака в R1
;        mov     R0,#FaktH
;        mov     A,@R0
;        push    ACC
;        swap    A
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     R0,#ZN8
;        mov     @R0,A
;        pop     ACC
;        anl     A,#0Fh
;        orl     A,#30h
;        inc     R0
;        mov     @R0,A
;        mov     R0,#FaktL
;        mov     A,@R0
;        push    ACC
;        swap    A
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     R0,#ZN10
;        mov     @R0,A
;        inc     R0
;        pop     ACC
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     @R0,A
;        cjne    R1,#1,str44
;        mov     R0,#ZN11        ;запятая после первого знака
;        mov     A,@R0
;        inc     R0
;        mov     @R0,A
;        mov     R0,#ZN10
;        mov     A,@R0
;        inc     R0
;        mov     @R0,A
;        mov     R0,#ZN9
;        mov     A,@R0
;        inc     R0
;        mov     @R0,A
;        mov     R0,#ZN9
;        mov     @R0,#2Ch
;        jmp     str46
;str44:  cjne    R1,#2,str45
;        mov     R0,#ZN11        ;запятая после второго знака
;        mov     A,@R0
;        inc     R0
;        mov     @R0,A
;        mov     R0,#ZN10
;        mov     A,@R0
;        inc     R0
;        mov     @R0,A
;        mov      R0,#ZN10
;        mov     @R0,#2Ch
;        jmp     str46
;str45:  cjne    R1,#3,str46
;        mov     R0,#ZN11        ;запятая после третьего знака
;        mov     A,@R0
;        inc     R0
;        mov     @R0,A
;        mov      R0,#ZN11
;        mov     @R0,#2Ch
;str46:  ret
;*******************************************************
str5:   mov     A,podRej        ;индикация бланков
        anl     A,#30h
        cjne    A,#0,str51
        mov     DPTR,#iBezBl
str51:  cjne    A,#10h,str52
        mov     DPTR,#iBlP
str52:  cjne    A,#20h,str53
        mov     DPTR,#iBlS
str53:  cjne    A,#30h,str54
        mov     DPTR,#iBlSP
str54:  call    zagr
        ret
;********************************************************
str6:   mov     R0,#Unit1       ;вывод единицы измерения
        mov     A,@R0
        cjne    A,#0,str61
        mov     DPTR,#iBE
        jmp     str62
str61:  mov     DPTR,#iBezEd
        mov     B,#16
        mul     AB
        add     A,DPL
        mov     DPL,A
        mov     A,B
        addc    A,DPH
        mov     DPH,A
str62:  call    zagr
        mov     R0,#ZN2
        mov     @R0,#45h        ;E
        inc     R0
        mov     @R0,#0E3h       ;д
        inc     R0
        mov     @R0,#2Eh        ;.
        inc     R0
        mov     @R0,#0B8h       ;и
        inc     R0
        mov     @R0,#0B7h       ;з
        inc     R0
        mov     @R0,#0BCh       ;м
        inc     R0
        mov     @R0,#2Eh        ;.
        ret
;***************************************************************
str7:   
        mov     DPTR,#iFazLag
        call    zagr

        mov     R0,#PhH         ;занести длительность фазы в BIN0..BIN2
        mov     BIN0,#0
        mov     BIN1,@R0
        inc     R0
        mov     BIN2,@R0
        call    p1610

        mov     R0,#ZN6
        mov     A,DES2
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,DES3
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,DES3
        anl     A,#0Fh
        orl     A,#30h
        mov     @R0,A

        mov     R0,#LagH         ;занести длительность лагфазы в BIN0..BIN2
        mov     BIN0,#0
        mov     BIN1,@R0
        inc     R0
        mov     BIN2,@R0
        call    p1610

        mov     R0,#ZN13
        mov     A,DES2
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,DES3
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,DES3
        anl     A,#0Fh
        orl     A,#30h
        mov     @R0,A
        ret

;        mov     R0,#TPh         ;вывод длит. фазы
;        mov     A,@R0
;        mov     DPTR,#i0c
;        call    adrA
;        mov     R0,#ZN7
;        mov     ADR0,@R0        ;временное хранение длит. фазы
;        inc     R0
;        mov     ADR1,@R0
;        inc     R0
;        mov     ADR2,@R0
;        mov     R0,#Tl          ;вывод длит. Лагфазы
;        mov     A,@R0
;        mov     DPTR,#i0c
;        call    adrA

;        mov     R0,#ZN16
;        mov     @R0,#63h       ;c
;        mov     R0,#ZN9
;        mov     A,@R0
;        mov     R0,#ZN15
;        mov     @R0,A
;        mov     R0,#ZN8
;        mov     A,@R0
;        mov     R0,#ZN14
;        mov     @R0,A
;        mov     R0,#ZN7
;        mov     A,@R0
;        mov     R0,#ZN13
;        mov     @R0,A
;        dec     R0
;        mov     @R0,#2Eh        ;.
;        dec     R0

;        mov     @R0,#0B4h       ;г
;        dec     R0
;        mov     @R0,#61h        ;a
;        dec     R0
;        mov     @R0,#0A7h       ;Л
;        dec     R0
;        mov     @R0,#63h        ;c
;        dec     R0
;        mov     @R0,ADR2        ;восстановить
;        dec     R0
;        mov     @R0,ADR1
;        dec     R0
;        mov     @R0,ADR0
;        dec     R0

;        mov     @R0,#61h        ;а
;        dec     R0
;        mov     @R0,#0B7h       ;з
;        dec     R0
;        mov     @R0,#61h        ;а
;        dec     R0
;        mov     @R0,#0AAh       ;Ф
;        ret

iFazLag:
        db      20h,0AAh,61h,0B7h,61h,20h,20h,20h,0A7h,61h,0B4h,2Eh,20h,20h,20h,63h
;               .   ф    а   з    а   .   .   .   Л    а   г     ,   .   .   .   с      

;*********************************************************
str8:   mov     DPTR,#iKF       ;вывод количества фаз
        call    zagr
        mov     R0,#NPh
        mov     A,@R0
        orl     A,#30h
        mov     R0,#ZN14
        mov     @R0,A
        ret
;*************************************************************
;Вывод на индикатор плотности стандарта и соответствующего ему фактора
;*************************************************************
str9:   mov     DPTR,#iDsF
        call    zagr
        mov     R0,#Test
        mov     A,@R0
        jb      ACC.7,str91     ;если стандарт не измерялся то вводим прочерки
        mov     A,#2Dh          ;в ACC занести код прочерка
        mov     R0,#ZN5
        mov     @R0,A
        inc     R0
        mov     @R0,A
        mov     R0,#ZN12
        mov     @R0,A
        inc     R0
        mov     @R0,A
        ret
str91:  
        mov     R0,#As0         ;занести в первое слагаемое плотность стандарта
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    obch1
        mov     R1,#ZN4         ;зaнести в индикаторные ячейки плотности стандарта
        mov     @R1,BIN1
        inc     R1
        mov     @R1,BIN2
        inc     R1
        mov     @R1,BIN3
        inc     R1
        mov     @R1,BIN4
        inc     R1
        mov     @R1,BIN5

        call    CstoReal        ;занести концентрацию стандарта в первое слагаемое
        mov     R0,#As0         ;занести во второе слагаемое плотность стандарта
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    div3
        call    obch1
        mov     A,ERROR
        cjne    A,#Err_CONCENT,str92
        mov     ERROR,#0
        mov     R0,#ZN10
        mov     @R0,#'>'
        inc     R0
        mov     @R0,#'9'
        inc     R0
        mov     @R0,#'9'
        inc     R0
        mov     @R0,#'9'
        inc     R0
        mov     @R0,#'9'
        inc     R0
        mov     @R0,#' '
        inc     R0
        mov     @R0,#' '

        ret
str92:
        mov     R1,#ZN11        ;зaнести в индикаторные ячейки Фактор
        mov     @R1,BIN0
        inc     R1
        mov     @R1,BIN1
        inc     R1
        mov     @R1,BIN2
        inc     R1
        mov     @R1,BIN3
        inc     R1
        mov     @R1,BIN4
        inc     R1
        mov     @R1,BIN5




;        mov     R0,#AsH         ;занесение целой части (1 - цифра)
;        mov     A,@R0
;        swap    A
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     @R1,A
;        inc     R1
;        inc     R1
;        mov     A,@R0           ;занесение второй цифры
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     @R1,A
;        inc     R0
;        inc     R1
;        mov     A,@R0           ;занесение третьей цифры
;        swap    A
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     @R1,A
;        inc     R1
;        mov     A,@R0           ;занесение четвертой цифры
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     @R1,A
;str92:  mov     R0,#ZnFakt      ;индикация стандарта
;        mov     R1,#ZN11
;        call    indChislo
        ret  

;**********************************************************************
;***********************************************************
;Подпрограмма вывода на индикатор четырехзначного числа 
;с запятой и знаком 
;исходные данные - 	R0 - указатель на число в формате
;						1)знак в старшем бите 0 - "+", 1 - "-"
;						 	младшая тетрада - 1 - запятая после первой цифры, 
;								   2 - после второй, 
;								   3 - после третьей,
;								   4 - целое число без запятых.
;						2)старший байт;
;						3)младший байт;
;					R1 - указатель на позицию индикатора
;***********************************************************
indChislo: 

        mov     A,@R0			;переслать знак в ACC
        jnb     ACC.7,inCh1
        mov     @R1,#2Dh        ;- занесение "-" в знаковую ячейку
	jmp	inCh2
inCh1:	mov	@R1,#20h		;+ занесение кода пробела в знаковую ячейку

inCh2:  clr     ACC.7			;очистить знаковый разряд
        mov     R2,A            ;сохранение положения знака в R2
	inc	R1
	inc	R0
        mov     A,@R0			;в ACC заносим старший байт
        mov     R3,A			;и сохраняем его в R3
	call	zHtetr			;отправляем старую тетраду в знаковую ячейку
	mov     @R1,A
	inc	R1				
        mov	A,R3			;восстанавливаем в ACC старший байт
	call	zLtetr			;отправляем вторую тетраду в знаковую ячейку
	mov     @R1,A
        inc     R1
        inc     R0
;        mov     A,@R1
        mov     A,@R0			;в ACC заносим младший байт
        mov     R3,A			;и сохраняем его в R3
	call	zHtetr			;отправляем старую тетраду в знаковую ячейку
	mov     @R1,A
	inc	R1				
        mov	A,R3			;восстанавливаем в ACC старший байт
	call	zLtetr			;отправляем вторую тетраду в знаковую ячейку
	mov     @R1,A
;        inc     R1
;        mov     A,@R1			

	mov	A,R2			;АНАЛИЗ положения запятой		
        cjne    A,#1,inCh3
        mov     A,@R1			;запятая после первого знака
        inc     R1			;сдвигаем три цифры
        mov     @R1,A			;первая
	dec	R1
	dec	R1
        mov     A,@R1			;вторая
        inc     R1
        mov     @R1,A
	dec	R1
	dec	R1
        mov     A,@R1			;третья
        inc     R1
        mov     @R1,A
	dec	R1
        mov     @R1,#2Ch		;ставим запятую
        jmp     inCh5
inCh3:  cjne    A,#2,inCh4
        mov     A,@R1                   ;запятая после второго знака
        inc     R1                      ;сдвигаем две цифры
        mov     @R1,A                   ;первая
        dec     R1
        dec     R1
        mov     A,@R1			;вторая
        inc     R1
        mov     @R1,A
	dec	R1
        mov     @R1,#2Ch
        jmp     inCh5
inCh4:  cjne    A,#3,inCh5
        mov     A,@R1                   ;запятая после третьего знака
        inc     R1                      ;сдвигаем одну цифру
        mov     @R1,A
	dec	R1
        mov     @R1,#2Ch		;ставим запятую
inCh5:  ret
;*******************************************************************************************
zHtetr:	swap    A
        anl     A,#0Fh
        orl     A,#30h
	ret
;*******************************************************************************************
zLtetr: anl     A,#0Fh
        orl     A,#30h
	ret

;**********************************************************************
;********************************************************************
ini_lcd:
        mov     istochnik,#30h		;посылка кода сброса 30H 3 раза
        call    zp              ;1
	call	wait
        call    zp              ;2
	call	wait
        call    zp              ;3
	call	wait
        anl     istochnik,#2Fh         ;посылка кода 20H указатель на 4-х битную информацию
        call    zp
	call	wait
	mov	a,#08h		;выключить
	call	out_ins
	call	wait
	mov	a,#1
	call	out_ins		;очистить и в начало
	call	wait
	mov	a,#28h		;2 строки 5*7
	call	out_ins
	call	wait
	mov	a,#0eh		;включить дисплей и курсор
	call	out_ins
	call	wait
	mov	a,#06h		;инкрементация адреса
	call	out_ins
	ret

;**********************************************************************
;Подпрограмма вывода сообщения из ячеек памяти ZN1..ZN16 в первую 
;строку индикатора.
;**********************************************************************
out_str1:       mov     SFRPAGE,#0Fh
		mov	a,#80h
os0:		call	out_ins
		call	wait
		mov	r0,#ZN1
os1:		mov	a,@r0
		call	out_dan
		call	wait
		inc	r0
		cjne	r0,#ZN16+1,os1
		ret
;********************************************************************
;Подпрограмма вывода сообщения из ячеек памяти ZN1..ZN16 во вторую 
;строку индикатора.
;**********************************************************************
out_str2:       mov     SFRPAGE,#0Fh	
		mov	a,#0c0h
		call	out_ins
		call	wait
		mov	r0,#ZN1
os2:		mov	a,@r0
		call	out_dan
		call	wait
		inc	r0
		cjne	r0,#ZN16+1,os2
		ret
;--------------------------------------------------------------------
;Подпрограмма очистки второй строки не задевающая знаковые ячейки 
ohStr2:         mov	a,#0c0h
		call	out_ins
		call	wait
                mov     R0,#16
ohStr_1:        mov     A,#20h
                call    out_dan
                call    wait
                djnz    R0,ohStr_1
                ret

;**********************************************************
;Подпрограмма позволяет записать в ОЗУ индикатора коды
;восьми русских букв
;**********************************************************
zanTab:	
	mov	a,#80h
	call	out_ins		;послать инструкцию
	mov	a,#40h
	call	out_ins		;послать инструкцию
;	mov	a,#00h		;возврат курсора в 0
;	call	out_ins		;послать инструкцию
	mov	dptr,#lambd	;послать по адресу 0 букву П
	call	out
	mov	dptr,#d		;послать по адресу 1 букву Д
	call	out
	mov	dptr,#g		;послать по адресу 2 букву Г
	call	out
	mov	dptr,#zi	;послать по адресу 3 букву З
	call	out
	mov	dptr,#ia	;послать по адресу 4 букву Я
	call	out
	mov	dptr,#u 	;послать по адресу 5 букву У
	call	out
	mov	dptr,#h		;послать по адресу 6 букву Ш
	call	out
	mov	dptr,#f		;послать по адресу 7 букву Ф
	call	out
	ret
;********************************************************************
;********************************************************************
;Подпрограмма посылки в память CG индикатора кода недостающей буквы.
;Адрес буквы находится в DPTR.
;********************************************************************
out:	mov	r2,#0
out1:	mov	a,r2
	movc	a,@a+dptr
	cjne	a,#7fh,out2
	ret
out2:	call	out_dan
	inc	r2
	jmp	out1
;********************************************************************
;Таблица кодируемых букв русского алфавита.
;********************************************************************
lambd:
  db 08h,14h,02h,06h,0Ah,0Ah,11h,00h,7fh      ;0h   Кодировка лямбда
d:
  db 00h,00h,0FFh,0FFh,0FFh,0FFh,0FFh,00h,7fh ;1h   Кодировка квадратика
g:
  db 1fh,10h,10h,10h,10h,10h,10h,00h,7fh      ;2h   Г++++
ia:
  db 0fh,11h,11h,0fh,05h,09h,11h,00h,7fh      ;3h   Я++++
h:
  db 15h,15h,15h,15h,15h,15h,1fh,00h,7fh      ;4h   Ш++++
zi:
  db 0eh,11h,01h,06h,01h,11h,0eh,00h,7fh      ;5h   З++++
bi:
  db 1fh,10h,10h,1eh,11h,11h,1eh,00h,7fh      ;6h   Б++++
i:
  db 11h,11h,13h,15h,19h,11h,11h,00h,7fh      ;7h   И++++
l:
  db 01h,02h,05h,09h,11h,11h,11h,00h,7fh      ;8h   Л++++
j:
  db 15h,15h,0eh,04h,0eh,15h,15h,00h,7fh      ;9h   Ж++++
u:
  db 11h,11h,11h,0fh,01h,01h,0eh,00h,7fh      ;Ah   У++++
th:
  db 11h,11h,11h,0fh,01h,01h,01h,00h,7fh      ;Bh   Ч++++
ii:
  db 11h,11h,11h,19h,15h,15h,19h,00h,7fh      ;Ch   Ы++++
f:
  db 04h,0eh,15h,15h,15h,0eh,04h,00h,7fh      ;Dh   Ф++++
;***********************************************************


;********************************************************************
;********************************************************************
;Подпрограмма вывода инструкции в индикатор.
;********************************************************************
out_ins:	clr     rs              ;
oi1: 		push    ACC

;zpp:    	
                anl     a,#0f0h
        	anl     istochnik,#0fh
        	orl     istochnik,a
;        	call    zp
;zp:	    	
                clr     rw
                call    zd8
        	setb    e
                call    zd8
        	clr     e
                call    zd8
        	setb    rw
                call    zd8

;        	call    zpp
        	pop     ACC
        	swap    a

;        	call    zpp
;zpp:    	
                anl     a,#0f0h
        	anl     istochnik,#0fh
        	orl     istochnik,a
;        	call    zp
zp:	    	
                clr     rw
                call    zd8
        	setb    e
                call    zd8
        	clr     e
                call    zd8
        	setb    rw
                call    zd8

;		call	bf_rd
bf_rd:  	clr     rs
                call    zd8
        	setb    rw
                call    zd8
bf1:    	setb    e
                call    zd8
		orl	istochnik,#80h
        	mov     a,istochnik
                call    zd8
        	clr     e
                call    zd8
	       	setb    e
                call    zd8
	       	clr     e
                call    zd8
		jb	bf,bf1
                		;
		ret
;********************************************************************
;Подпрограмма вывода данных в индикатор.
;********************************************************************
;*******************************************************************
 out_dan:       setb    rs
        	jmp     oi1
;-----------------------------------------------------------------------------
;zp:	    	clr     rw
;                call    zd8
;        	setb    e
;                call    zd8
;        	clr     e
;                call    zd8
;        	setb    rw
;                call    zd8
;        	ret
;-----------------------
;zpp:    	anl     a,#0f0h
;        	anl     istochnik,#0fh
;        	orl     istochnik,a
;        	call    zp
;        	ret
;********************************************************************
;********************************************************************
;bf_rd:  	clr     rs
;                call    zd8
;        	setb    rw
;                call    zd8
;bf1:    	setb    e
;                call    zd8
;		orl	istochnik,#80h
;        	mov     a,istochnik
;                call    zd8
;        	clr     e
;                call    zd8
;	       	setb    e
;                call    zd8
;	       	clr     e
;                call    zd8
;		jb	bf,bf1
;		ret
; End of file.
wait:		mov     R7,#0FFh
		mov	R6,#01Fh
wait_1:		djnz	R7,$
                djnz    R6,wait_1
		ret
zd8:    nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        ret              
;*********************************************************************
;Подпрограмма загрузки индикаторных ячеек из ПП по адресу DPTR
; (A,R0,R1,R2,DPTR)  (откорр.)
;*********************************************************************
zagr:   mov     R0,#ZN1
zagr_1: clr     A
        movc    A,@A+DPTR
        mov     @R0,A
        inc     R0
        inc     DPTR
        cjne    R0,#ZN16+1,zagr_1
        ret
;**********************************************************************
;Подпрограмма определения статуса клавиатуры
;выход - ACC = 0, если ни одна клавиша не нажималась
;и любое другое число в противном случае. (A,R0,R2,DPTR)
;**********************************************************************
stKey:  mov     SFRPAGE,#0Fh
        mov     P6,#0FFh        ;настроить порт на ввод
        clr     LO0             ;послать в обе линии опроса нуль
        clr     LO1
        mov     A,P6            ;принять информацию с линий возврата
        cpl     A
        jz      stK_2           ;если клавиша не нажималась то выход
        mov     R0,A            ;
;        call    zdAnti
;zdAnti: 
        mov     R2,#0Fh
        mov     R3,#0FFh
zd_A2:  djnz    R3,zd_A2
        djnz    R2,zd_A2

        mov     A,P6        
        cpl     A
        cjne    A,0,stKey
stK_1:  
;        call    zddd 
zddd:   
        mov     M6,#0FFh
        mov     M5,#0FFh
        mov     R2,#5
zddd_1: djnz    M6,zddd_1
        djnz    M5,zddd_1
        djnz    R2,zddd_1
stK_2:  ret
;________________________________
;zddd:   
;        mov     M6,#0FFh
;        mov     M5,#0FFh
;        mov     R2,#5
;zddd_1: djnz    M6,zddd_1
;        djnz    M5,zddd_1
;        djnz    R2,zddd_1
;        ret
;________________________________
;Антидребезговая задержка
;zdAnti: mov     R2,#0Fh
;        mov     R3,#0FFh
;zd_A1:  djnz    R3,zd_A1
;        djnz    R2,zd_A1
;        ret
;_________________________________
;*****************************************************
;Подпрограмма считывания в ACC. кода клавиши
;в соответствии с таблицей
;"0" - 0, "1" - 1, "2" - 2, "3" - 3, "4" - 4,
;"5" - 5, "6" - 6, "7" - 7, "8" - 8, "9" - 9,
;"," - 10, "ввод" - 11, "пуск" - 12, "вверх" - 13,
;"вниз" -14, "стоп" - 15
;в противном случае в ACC. код FF.  Выход из подпрограммы осуществляется
;по отпусканию клавиши.  (A,R0,DPTR)
;*****************************************************
key:    mov     SFRPAGE,#0Fh
        mov     R0,#0FFh
        mov     P6,#0FFh        ;настроить порт на ввод
        clr     LO0             ;послать в первую линию опроса нуль
        setb    LO1
;        call    zdAnti
;zdAnti: 
        mov     R2,#0Fh
        mov     R3,#0FFh
zd_A3:  djnz    R3,zd_A3
        djnz    R2,zd_A3
        mov     A,P6            ;принять информацию с линий возврата

        jb      ACC.0,key_1
        mov     R0,#Kl4                 ;4
        jnb     prF,key_1
        mov     R0,#KlminL              ;<L
        clr     prF
key_1:  jb      ACC.1,key_2
        mov     R0,#Kl5                 ;5
        jnb     prF,key_2
        mov     R0,#KlmaxL              ;>L
        clr     prF
key_2:  jb      ACC.2,key_3
        mov     R0,#Kl6                 ;6
        jnb     prF,key_3
        mov     R0,#KlS                 ;S
        clr     prF
key_3:  jb      ACC.3,key_4
        mov     R0,#KlNiz               ;NIZ
        jnb     prF,key_4
        mov     R0,#KlVerx              ;VERX
        clr     prF
key_4:  jb      ACC.4,key_5
        mov     R0,#Kl7                 ;7
        jnb     prF,key_5
        mov     R0,#KlL0                ;L0
        clr     prF
key_5:  jb      ACC.5,key_6
        mov     R0,#Kl8                 ;8
        jnb     prF,key_6
        mov     R0,#KlL
        clr     prF
key_6:  jb      ACC.6,key_7
        mov     R0,#Kl9                 ;9
        jnb     prF,key_7
        mov     R0,#KlPrint             ;Print
        clr     prF
key_7:  jb      ACC.7,key_8
        mov     R0,#KlA                 ;A
        jnb     prF,key_8
        mov     R0,#KlT                 ;T
        clr     prF
key_8:  cjne    R0,#0FFh,key_17
        mov     P6,#0FFh        ;настроить порт на ввод
        clr     LO1             ;послать во вторую линию опроса нуль
        setb    LO0
;        call    zdAnti
;zdAnti: 
        mov     R2,#0Fh
        mov     R3,#0FFh
zd_A4:  djnz    R3,zd_A4
        djnz    R2,zd_A4

        mov     A,P6            ;принять информацию с линий возврата

        jb      ACC.0,key_9
        mov     R0,#Kl1                 ;1
        jnb     prF,key_9
        mov     R0,#KlZpt               ;,
        clr     prF
key_9:  jb      ACC.1,key_10
        mov     R0,#Kl2                 ;2
        jnb     prF,key_10
        mov     R0,#Kl2                 ;2
        clr     prF
key_10: jb      ACC.2,key_11
        mov     R0,#Kl3                 ;3
        jnb     prF,key_11
        mov     R0,#KlEsc               ;ESC
        clr     prF
key_11: jb      ACC.3,key_12
        mov     R0,#KlStart             ;START
        jnb     prF,key_12
        mov     R0,#KlStart
        clr     prF
key_12: jb      ACC.4,key_13
        mov     R0,#Kl0                 ;0
        jnb     prF,key_13
        mov     R0,#Kld                 ;d
        clr     prF
key_13: jb      ACC.5,key_14
        mov     R0,#KlF                 ;F
        cpl     prF
        call    zvyk


;        jnb     prF,key_14
;        mov     R0,#KlF
;        clr     prF
key_14: jb      ACC.6,key_15
        mov     R0,#KlEnter             ;ENTER
        jnb     prF,key_15
        mov     R0,#KlFEnter
        clr     prF
key_15: jb      ACC.7,key_16
        mov     R0,#KlZero              ;ZERO
        jnb     prF,key_16
        mov     R0,#KlZero
        clr     prF
key_16: cjne    R0,#0FFH,key_17
        mov     A,R0
        ret
key_17: nop
key_18: mov     SFRPAGE,#0Fh
        mov     P6,#0FFh        ;настроить порт на ввод
        clr     LO0             ;послать в обе линии опроса нуль
        clr     LO1
        mov     A,P6            ;принять информацию с линий возврата
        cpl     A
        jnz     key_18          ;если клавиша не нажималась то выход
key_21: 
	mov	a,#80h          ;если нажималась клавиша F то в первой позиции верхней строки
	call	out_ins         ;высветить квадратик, иначе пробел
	call	wait
        jb      prF,key_13a
        mov     A,#20h
        jmp     key_13b
key_13a:
        mov     A,#0DFh
key_13b:
;	mov	a,@r0
	call	out_dan
	call	wait
	mov	a,#0Ch
	call	out_ins
        mov     A,R0
        ret

;******************************************************
;Подпрограмма подачи звукового сигнала (A,R1,R2,DPTR)
;******************************************************
zvyk:   mov     R1,#100
zv_1:   setb    P3.7
        mov     R2,#0FFH
        mov     R3,#0Bh
zv_2:   djnz    R2,zv_2
	djnz	R3,zv_2
;        call    ff
        clr     P3.7
;        call    ff
        mov     R2,#0FFH
        mov     R3,#0Bh
zv_3:   djnz    R2,zv_3
	djnz	R3,zv_3
        djnz    R1,zv_1
        ret

;************************************************************
;подпрограмма чтения клавиатуры
;************************************************************
klav:   call    stKey
        jz      klav
        call    key
        ret
;**************************************************************
;Подпрограмма определения частоты звукового сопровождения
;**************************************************************
;ff:     mov     R2,#0FFH
;        mov     R3,#0Bh
;ff_1:   djnz    R2,ff_1
;	djnz	R3,ff_1
;        ret
;*********************************************************************
;#######################################################
;*******************************************************
;ПОДПРОГРАММЫ ДЛЯ УПРАВЛЕHИЯ ШАГОВЫМ ДВИГАТЕЛЕМ
;*******************************************************
;ПОДПРОГРАММА ШАГ ШД влево
;(R3,R4,DPTR,ACC.)
;*******************************************************
stepP:  
        mov     A,TekSdH                ; ограничить текущее положение шагов
        cjne    A,#25h,step12
        mov     A,TekSdL
        cjne    A,#1Ch,step12
        call    zvyk
        ret

step12: 
        inc     TekSdL
        mov     A,TekSdL
        jnz     step13
        inc     TekSdH
step13:
        inc     FAZ          ;сдвиг фазы вправо
step1:  anl     FAZ,#0FH
        mov     A,FAZ
        call    kFaz4
        mov     P3,A
        ret

;*******************************************************
;ПОДПРОГРАММА ШАГ ШД вправо
;(R3,R4,DPTR,ACC.)
;*******************************************************
stepL:  

        dec     TekSdL
        mov     A,TekSdL
        cjne    A,#0FFh,step14
        dec     TekSdH
step14:
        dec     FAZ          ;сдвиг фазы вправо
        jmp     step1
;*******************************************************
;------------------------------------------------------
;ПОДПРОГРАММА ВЫБОРА ФАЗЫ ШД с дроблением шага на 4
;------------------------------------------------------
kFaz4:  inc     A
        movc    A,@A+PC         ;
        ret

;  db    01110001b       ; 00001111b		0f
;  db	00111001b       ; 01001110b		4e
;  db	01010101b       ; 00101101b		2d
;  db	00011101b       ; 01101100b		6c
;  db	00011111b       ; 01111100b		7c
;  db	01010111b       ; 00111101b		3d
;  db	00111011b       ; 01011110b		5e
;  db	01110011b       ; 00011111b		1f
;  db	01100011b       ; 00011011b		1b
;  db	00101011b       ; 01011010b		5a
;  db	01000111b       ; 00111001b		39
;  db	00001111b       ; 01111000b		78
;  db	00001101b       ; 01101000b		68
;  db	01000101b       ; 00101001b		29
;  db	00101001b       ; 01001010b		4a
;  db	01100001b       ; 00001011b		0b

  db    00001111b       ; 00001111b		0f
  db	01001011b       ; 01001110b		4e
  db	00101101b       ; 00101101b		2d
  db	01101001b       ; 01101100b		6c
  db	01111001b       ; 01111100b		7c
  db	00111101b       ; 00111101b		3d
  db	01011011b       ; 01011110b		5e
  db	00011111b       ; 00011111b		1f
  db	00011110b       ; 00011011b		1b
  db	01011010b       ; 01011010b		5a
  db	00111100b       ; 00111001b		39
  db	01111000b       ; 01111000b		78
  db	01101000b       ; 01101000b		68
  db	00101100b       ; 00101001b		29
  db	01001010b       ; 01001010b		4a
  db	00001110b       ; 00001011b		0b


;*******************************************************
;ПОДПРОГРАММА ЗАДЕРЖКИ ДЛЯ ШД ПРИ ДРОБЛЕHИИ ШАГА HА 4
;*******************************************************
zdSD4:  mov     R4,#0FFh
	mov	R3,#0Fh
zdsd41: djnz    R4,zdsd41
;        cpl     P1.7
	djnz	R3,zdsd41
        ret
;*******************************************************
;*******************************************************
;ПОДПРОГРАММА ПОИСКА РЕПЕРА ДЛЯ ШД
;*******************************************************
reper1: mov     R7,#0FFh        ;задержка для мины
        mov     R6,#9Fh
        mov     SFRPAGE,#3      ;чтение грубого датчика
        mov     A,CPT2CN        ;*
        mov     SFRPAGE,#0Fh    ;*
        jnb     ACC.6,re40      ;если сектор открыт, то на re40
re10:                           ;*
        mov     SFRPAGE,#3      ;движение влево до открытия сектора
        mov     A,CPT2CN        ;*
        mov     SFRPAGE,#0Fh    ;*
        jnb     ACC.6,re20      ;*
        call    stepP
        call    zdSD4
        djnz    R7,re10         ;*
        djnz    R6,re10         ;*
        jmp     re80            ;*
re20:   nop                     ;*
 	mov     R7,#10          ;сектор открылся, делаем еще 10 шагов
re30:   call    stepP		;для выбора люфта  *
        call    zdSD4
        djnz    R7,re30         ;*
re40:   mov     R7,#0FFh        ;задержка для мины  *
        mov     R6,#9Fh
re50:   call    stepL           ;сделать шаг вправо до закрытия сектора
        call    zdSD4
        mov     SFRPAGE,#3      ;проверка грубого сектора на закрытие
        mov     A,CPT2CN        ;*
        mov     SFRPAGE,#0Fh    ;*
        jnb     ACC.6,re60      ;*
        mov     SFRPAGE,#1      ;грубый сектор закрыт ждем открытия точного
        mov     A,CPT0CN        ;*
        mov     SFRPAGE,#0Fh    ;*
        jnb     ACC.6,re70      ;точный найден идем на re70
re60:   djnz    R7,re50         ;еще репер не найден  *
        djnz    R6,re50         ;*
        jmp     re80            ;за 9FFFH шагов репер не найден  *
re70:   

        mov     ADRh,#HIGH(KorRep)     ;
        mov     ADRl,#LOW(KorRep)
        call    readFM
        mov     A,DANl
	call	dopCod
	cjne	A,#50,re71
re71:	jc	re72
	mov	DANl,#0		
	call	wrFM

re72:	call	readFM
	mov	A,DANl			;
	call	dopCod
	mov	codeH,#0
	mov	codeL,A
	jb	sig,re73
	call	NstL
	ret
re73:	call	NstP
	ret




re80:   mov     ERROR,#Err_SD   ;в ERROR 10-признак, что репер не *
	call	obest
        call    och             ;находится
        ret

;*******************************************************************1
;Подпрограмма N шагов ШД влево
;*******************************************************************1
NstL:   mov     a,codeH
        jnz     NstL0
        mov     a,codeL
        jz      NstL3

NstL0:  mov	R6,#0		;счетчик старший
	mov	R7,#0		;счетчик младший
NstL1:  call	stepL
        call    zdSD4
	inc	R7
	cjne	R7,#0,NstL2
	inc	R6
NstL2:  mov	A,codeL
	cjne	A,7,NstL1
	mov	A,codeH
	cjne	A,6,NstL1
NstL3:  ret
;*******************************************************************1
;Подпрограмма N шагов ШД  вправо
;*******************************************************************1
NstP:   mov     a,codeH
        jnz     NstP0
        mov     a,codeL
        jz      NstP3
NstP0:  mov	R6,#0		;счетчик старший
	mov	R7,#0		;счетчик младший
NstP1:  call	stepP
        call    zdSD4
	inc	R7
	cjne	R7,#0,NstP2
	inc	R6
NstP2:  mov	A,codeL
	cjne	A,7,NstP1
	mov	A,codeH
	cjne	A,6,NstP1
NstP3:  ret

;*******************************************************************2
;**************************************************************************
;Подпрограмма обесточивания шагового двигателя
;**************************************************************************
obest:  clr     P3.3
        ret
;************************************************************
;***************************************************************
delay:  nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
	nop
	nop
	nop
        ret
;***************************************************************
;***************************************************************
zzd:	mov	R6,#4Fh
	mov	R7,#0FFh
zzd1:	djnz	R7,zzd1
        nop
        nop
;        cpl     P1.7
	djnz	R6,zzd1
	ret
;***********************************************************
;Подпрограмма записи в ПЗУ с кодом E6
wrBlok2:mov     A,NP            ;записать в ПЗУ
        mov     B,#32
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        mov     R1,#Test
        mov     @R1,#0E6h
wrB2:   mov     A,@R1
        mov     DANl,A
        call    wrFM
        inc     ADRl
        inc     R1
        cjne    R1,#LL+1,wrB2
        ret

;***********************************************************
;***********************************************************
iPV:    db     ' SOLAR  PV1251  '


iVibRej:
 db    20h,42h,0C3h,0B2h,65h,70h,0B8h,0BFh,65h,20h,70h,65h,0B6h,0B8h,0BCh,20h
;      .   В   ы    б    e   p   и   т    e   .   p   e   ж    и    м    .
iPlotn:
 db    20h,20h,0A5h,0B7h,0BCh,65h,70h,65h,0BDh,0B8h,65h,20h,41h,20h,20h,20h
;      .   .   И    з    м    е   р   е   н    и    е   .   A   .   .   .
iOdin:
 db    20h,20h,20h,4Fh,0E3h,0B8h,0BDh,6Fh,0C0h,0BDh,0C3h,0B9h,20h,20h,20h,20h
;      .   .   .   O   д    и    н    о   ч    н    ы    й    .   .   .   .
iNepr:
 db    20h,20h,48h,65h,0BEh,70h,65h,70h,0C3h,0B3h,0BDh,0C3h,0B9h,20h,20h,20h
;      .   .   H   e   п    р   e   p   ы    в     н    ы    й    .   .   .

iProp:
 db    20h,20h,0A5h,0B7h,0BCh,65h,70h,65h,0BDh,0B8h,65h,20h,54h,20h,20h,20h
;       .   .   И    з    м    е   р   е   н    и    е   .   T   .   .   .
iProg:
 db    0A8H,70h,6Fh,0B4h,70h,61h,0BCh,0BCh,0C3h,20h,23h,30h,30h,2Dh,39h,39h
;       П    р   о   г    р   а   м    м    ы    .   #   0   0   -   9   9
iVvodNP:
 db    20h,0A8h,70h,6Fh,0B4h,70h,61h,0BCh,0BCh,61h,20h,23h,20h,20h,20h,20h
;      .   П    р   о   г    р   а   м    м    a   .   #   .   .   .   .
;      1   2    3   4   5    6   7   8    9    10  11  12  13  14  15  16
iNeZapis:
 db    20h,20h,0BDh,65h,20h,0B7h,61h,0BEh,0B8h,63h,61h,0BDh,61h,20h,20h,20h
;      .   .   н    e   .   з    а   п    и    c   a   н    a   .   .   .
iPrgNet:
 db    20h,20h,0A8h,70h,6Fh,0B4h,70h,61h,0BCh,0BCh,20h,0BDh,65h,0BFh,20h,20h
;      .   .   П    р   о   г    р   а   м    м    .   н    е   т    .   .
;      1   2   3    4   5   6    7   8   9    10   11  12   13  14   15  16

iPrgNoZ:
 db    20h,0A8h,70h,0B4h,2Eh,0BDh,65h,20h,0C5h,61h,0BEh,0B8h,63h,61h,0BDh,61h
;          П    р   г    .   н    е   .   з    а   п    и    c   a   н    a   .

iWrPrg:
 db    0A4h,61h,0BEh,0B8h,63h,0C4h,20h,0BEh,70h,6Fh,0B4h,70h,61h,0BCh,0BCh,20h
;      З    а   п    и    с   ь    .   п    р   о   г    р   а   м    м    .
iPechP:
 db    0A8h,65h,0C0h,61h,0BFh,0C4h,20h,0BEh,70h,6Fh,0B4h,70h,61h,0BCh,0BCh,20h
;      П    е   ч    а   т    ь    .   п    р   о   г    р   а   м    м    .
iPechR:
 db    0A8h,65h,0C0h,2Eh,20h,70h,65h,0B7h,79h,0BBh,0C4h,0BFh,61h,0BFh,6Fh,0B3h
;      П    е   ч    .       p   e   з    у   л    ь    т    а   т    o   в
iNastr:
 db    20h,20h,20h,48h,61h,63h,0BFh,70h,6Fh,0B9h,0BAh,0B8h,20h,20h,20h,20h
;      .   .   .   H   а   с   т    р   о   й    к    и    .   .   .   .
iObnPrg:
 db    20h,4Fh,0B2h,0BDh,79h,0BBh,2Eh,20h,0BEh,70h,6Fh,0B4h,70h,61h,0BCh,0BCh
;      .   O   б    н    у   л    .   .   п    р   о   г    р   а   м    м
iObnRez:
 db    20h,4Fh,0B2h,0Bdh,79h,0BBh,2Eh,20h,70h,65h,0B7h,79h,0BBh,0C4h,0BFh,2eh
;      .   O   б    н    у   л    .   .   p   e   з    у   л    ь    т    .
iVibL:
 db    20h,20h,20h,42h,0C3h,0B2h,65h,70h,0B8h,0BFh,65h,20h,00h,20h,20h,20h
;      .   .   .   В   ы    б    e   p   и    т    e   .   L   .   .   .
;iLtek:
; db    00h,0BFh,3Dh,20h,20h,20h,0BDh,0BCh,20h,00h,3Dh,20h,20h,20h,0BDh,0BCh
;      L   т    =   .   .   .   н    м    .   L   =   .   .   .   н    м

iLtek:
 db    20h,20h,20h,20h,00h,3Dh,20h,20h,20h,0BDh,0BCh,20h,20h,20h,20h,20h
;      .   .   .   .   L   =   .   .   .   н    м    .   .   .   .   .




iL:
 db     20h,20h,20h,00h,3Dh,33h,32h,35h,20h,20h,20h,20h,20h,20h,20h,00h
;        .   .   .   L   =   3   2   5   .   .   .   .   .   .   .   .

iNol:
 db    20h,20h,20h,20h,4Bh,6Fh,0BDh,0BFh,70h,6Fh,0BBh,0C4h,20h,20h,20h,20h
;       .   .  .   .   K   o   н    т    p   o   л    ь    .   .   .   .
; db  20h,20h,0A5h,0B7h,0BCh,65h,70h,0C4h,0BFh,65h,20h,0BDh,6Fh,0BBh,0C4h,20h
;       .   .   И    з    м    е   р   ь   т    е   .   н    o   л    ь    .
iProba:
 db    20h,20h,20h,20h,20h,20h,0A8h,70h,6Fh,0B2h,61h,20h,20h,20h,20h,20h
;      .   .   .   .   .   .   П    p   o   б    a   .   .   .   .   .
iAR:
 db     20h,20h,20h,20h,41h,3Dh,20h,30h,2Ch,30h,30h,30h,0A0h,20h,20h,41h
;        .   .   .   .   A   =   .   0   ,   0   0   0  Б    .   .   A
iATR:
 db     20h,20h,20h,20h,54h,3Dh,31h,30h,30h,2Ch,30h,25h,20h,20h,20h,54h
;        .   .   .   .   T   =   1  0   0   ,   0   %   .   .   .   T

iTR:
 db     20h,20h,20h,20h,54h,3Dh,20h,20h,20h,2Ch,20h,25h,20h,20h,20h,54h
;        .   .   .   .  T   =   .   .   .   ,   .   %   .   .   .   T
iStnd:
 db    20h,20h,20h,20h,43h,0BFh,61h,0BDh,0E3h,61h,70h,0BFh,20h,20h,20h,20h
;      .   .   .   .   C   т    a   н    д    а   p   т    .   .   .   .
iBlSt:
 db    20h,0A0h,0BBh,61h,0BDh,0BAh,20h,63h,0BFh,61h,0BDh,0E3h,61h,70h,0BFh,61h
;      .   Б    л    a   н    к    .   с   т    a   н    д    а   p   т    a
iBlPr:
 db    20h,20h,0A0h,0BBh,61h,0BDh,0BAh,20h,0BEh,70h,6Fh,0B2h,0C3h,20h,20h,20h
;      .   .   Б    л    a   н    к    .   п    p   o   б    ы    .   .   .


iNagPusk:
 db    20h,20h,48h,61h,0B6h,0BCh,0B8h,0BFh,65h,20h,45h,4Eh,54h,45h,52h,20h
;      .   .   H   а   ж    м    и    т    e   .   E   N   T   E   R .   .
iNagZero:
 db    20h,20h,48h,61h,0B6h,0BCh,0B8h,0BFh,65h,20h,5Ah,45h,52h,4Fh,20h,20h
;      .   .   H   а   ж    м    и    т    e   .   Z   E   R   O    .   .
iNagStart:
 db    20h,20h,48h,61h,0B6h,0BCh,0B8h,0BFh,65h,20h,53h,54h,41h,52h,54h,20h
;      .   .   H   а   ж    м    и    т    e   .   S   T   A   R   T   .



iProbaD:
 db    20h,20h,20h,41h,3Dh,20h,20h,2Ch,20h,20h,20h,20h,0A0h,20h,20h,20h
;      .   .   .   A   =   .   .   ,   .   .   .   .   Б  
;iProbaC:
; db    0A8h,70h,6Fh,0B2h,61h,20h,43h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h
;      П    p   o   б    a   .   C   =   .   .   .   .   .   .   .    .
iCRavno:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;      C   =   .   .   .   .   .   .   .    .  .   .   .   .   .   . 


iProbaT:
 db    20h,20h,20h,20h,20h,54h,3Dh,20h,20h,20h,20h,20h,25h,20h,20h,20h
;      .   .   .   .   .   T   =   .   .   .   .   .   %   .


iIzmCs:
 db    20h,20h,20h,0A5h,0B7h,0BCh,65h,0BDh,0B8h,0BFh,0C4h,20h,43h,73h,20h,20h 
;      .   .   .   И    з    м    е   н    и    т    ь    .   С   s   .   . 
iIzmDs:
 db    20h,20h,20h,0A5h,0B7h,0BCh,65h,70h,0B8h,0BFh,0C4h,20h,44h,73h,20h,20h 
;      .   .   .   И    з    м    е   p    и    т    ь    .   D   s   .   . 
iDaNet:
 db    20h,20h,20h,31h,2Dh,0E0h,61h,20h,20h,32h,2Dh,48h,65h,0BFh,20h,20h 
;      .   .   .   1   -   Д    а   .   .   2   -   H   e   т    .   . 
iCsRavno:
 db    20h,20h,20h,43h,73h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   С   s   =   .   .   .   .   .   .   .   .   .



iNumPrg:
 db    20h,0A8h,70h,6Fh,0B4h,70h,61h,0BCh,0BCh,61h,20h,23h,20h,20h,20h,20h
;          П    р   о   г    р   а   м    м    a   .  #   .   .   .   .
iKonT:
 db    20h,4Bh,6Fh,0BDh,65h,0C0h,0BDh,61h,0C7h,20h,0BFh,6Fh,0C0h,0BAh,61h,20h
;      .   K   о   н    e   ч    н    a   я    .   т    o   ч    к    a   .
iKin:
 db    20h,20h,20h,20h,4Bh,0B8h,0BDh,65h,0BFh,0B8h,0BAh,61h,20h,20h,20h,20h
;      .   .   .   .   K   и    н    e   т    и    к    а   .   .   .   .
iDvl:
 db    20h,20h,0E0h,0B3h,79h,78h,0B3h,6Fh,0BBh,0BDh,6Fh,0B3h,6Fh,0B9h,20h,20h
;      .   .   Д    в    у   х   в    o   л    н    o   в    о   й    .   .


iKT:
 db    20h,4Bh,6Fh,0BDh,2Eh,20h,0BFh,6Fh,0C0h,0BAh,61h,20h,5Bh,20h,5Dh,20h
;      .   K   о   н    .       т    o   ч    к    a   .   [       ]
iKn:
 db    20h,20h,4Bh,0B8h,0BDh,65h,0BFh,0B8h,0BAh,61h,20h,20h,5Bh,20h,5Dh,20h
;      .   .   K   и    н    e   т    и    к    а   .   .   [   .   ]   .
iDv:
 db    20h,0E0h,0B3h,79h,78h,0B3h,6Fh,0BBh,0BDh,6Fh,0B3h,2Eh,5Bh,20h,5Dh,20h
;          Д    в    у   х   в    o   л    н    o   в    .   [   .   ]
iFakt:
 db    20h,20h,20h,0AAh,61h,0BAh,0BFh,6Fh,70h,20h,28h,0AAh,29h,20h,20h,20h
;      .   .   .   Ф    a   к    т    o   p   .   (   Ф    )   .   .   .
iStand:
 db    20h,20h,43h,0BFh,61h,0BDh,0E3h,61h,70h,0BFh,20h,28h,43h,29h,20h,20h
;      .   .   C   т    a   н    д    a   p   т    .   (   C   )   .   .
iGraf:
 db    20h,20h,20h,0A1h,70h,61h,0E4h,0B8h,0BAh,20h,20h,28h,0A1h,29h,20h,20h
;      .   .   .   Г    p   a   ф    и    к    .   .   (   Г    )   .   .
iBezBl:
 db    20h,20h,0A0h,65h,0B7h,20h,0B2h,0BBh,61h,0BDh,0BAh,6Fh,0B3h,20h,20h,20h
;      .   .   Б    е   з    .   б    л    a   н    к    о   в    .   .   .
iBlP:
 db    20h,20h,0A0h,0BBh,61h,0BDh,0BAh,20h,0BEh,70h,6Fh,0B2h,0C3h,20h,20h,20h
;      .   .   Б    л    a   н    к    .   п    p   o   б    ы    .   .   .
iBlS:
 db    20h,0A0h,0BBh,61h,0BDh,0BAh,20h,63h,0BFh,61h,0BDh,0E3h,61h,70h,0BFh,61h
;      .   Б    л    a   н    к    .   c   т    a   н    д    a   p   т    a
iBlSP:
 db    20h,0A0h,0BBh,61h,0BDh,0BAh,20h,28h,63h,0BFh,2Eh,2Bh,0BEh,70h,2Eh,29h
;      .   Б    л    a   н    к    .   (   c   т    .   +   п    p   .   )

iCBl:
 db    20h,20h,20h,43h,20h,0B2h,0BBh,61h,0BDh,0BAh,61h,0BCh,0B8h,20h,20h,20h
;      .   .   .   C   .   б    л    a   н    к    a   м    и    .   .   .
iVibEI:
 db    20h,42h,0C3h,0B2h,65h,70h,0B8h,0BFh,65h,20h,65h,0E3h,2Eh,0B8h,0B7h,0BCh
;          В   ы    б    e   p   и    т    e   .   e   д    .   и    з    м    .
iBE:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,0A0h,65h,0B7h,20h,65h,0E3h,2Eh
;      .   .   .   .   .   .   .   .       Б    e   з    .   e   д    .   .
iBezEd:
 db    20h,20h,20h,0A0h,65h,0B7h,20h,65h,0E3h,0B8h,0BDh,0B8h,0E5h,20h,20h,20h
;      .   .   .    Б   e   з    .   e   д    и    н    и    ц    .   .   .
iGL:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,0B4h,2Fh,0BBh,20h,20h,20h,20h
;      .   .   .   .   .   .   .   .       г    /   л    .   .   .   .   .
iGDl:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,0B4h,2Fh,0E3h,0BBh,20h,20h,20h
;      .   .   .   .   .   .   .   .       г    /   д    л    .   .   .   .
iMgDl:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,0BCh,0B4h,2Fh,0E3h,0BBh,20h,20h
;      .   .   .   .   .   .   .   .       м    г    /   д    л    .   .   .
iMkgL:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,0BCh,0BAh,0B4h,2Fh,0BBh,20h,20h
;      .   .   .   .   .   .   .   .       м    к    г    /   л    .   .   .
iMkgDl:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,0BCh,0BAh,0B4h,2Fh,0E3h,0BBh,20h
;      .   .   .   .   .   .   .   .       м    к    г    /   д    л    .   .
iEdL:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,45h,0E3h,2Fh,0BBh,20h,20h,20h
;      .   .   .   .   .   .   .   .       E   д    /   л    .   .   .   .
iMmolL:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,4Dh,0BCh,6Fh,0BBh,2Fh,0BBh,20h
;      .   .   .   .   .   .   .   .       M   м    o   л    /   л    .   .
iMkmolL:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,4Dh,0BAh,0BCh,6Fh,0BBh,2Fh,0BBh
;      .   .   .   .   .   .   .   .       M   к    м    o   л    /   л    .
iB:
 db    20h,20h,20h,20h,20h,20h,20h,20h,20h,0A0h,20h,20h,20h,20h,20h,20h
;      .   .   .   .   .   .   .   .       Б    .   .   .   .   .   .   .

;_________________________________________________________________________________
iBE1:
 db    20h,20h,20h,20h,20h,20h,20h,20h,0A0h,65h,0B7h,20h,65h,0E3h,2Eh,20h
;      .   .   .   .   .   .   .   .   Б    e   з    .   e   д    .   .
iBezEd1:
 db    20h,20h,20h,0A0h,65h,0B7h,20h,65h,0E3h,0B8h,0BDh,0B8h,0E5h,20h,20h,20h
;      .   .   .    Б   e   з    .   e   д    и    н    и    ц    .   .   .
iGL1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,0B4h,2Fh,0BBh,20h,20h,20h,20h
;      C   =   .   .   .   .   .   .   .   г    /   л    .   .   .   .
iGDl1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,0B4h,2Fh,0E3h,0BBh,20h,20h,20h
;      C   =   .   .   .   .   .   .   .   г    /   д    л    .   .   .
iMgDl1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,0BCh,0B4h,2Fh,0E3h,0BBh,20h,20h
;      C   =   .   .   .   .   .   .   .   м    г    /   д    л    .   .
iMkgL1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,0BCh,0BAh,0B4h,2Fh,0BBh,20h,20h
;      C   =   .   .   .   .   .   .   .   м    к    г    /   л    .   .
iMkgDl1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,0BCh,0BAh,0B4h,2Fh,0E3h,0BBh,20h
;      C   =   .   .   .   .   .   .   .   м    к    г    /   д    л    .
iEdL1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,45h,0E3h,2Fh,0BBh,20h,20h,20h
;      C   =   .   .   .   .   .   .   .   E   д    /   л    .   .   .
iMmolL1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,4Dh,0BCh,6Fh,0BBh,2Fh,0BBh,20h
;      C   =   .   .   .   .   .   .   .   M   м    o   л    /   л    .
iMkmolL1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,4Dh,0BAh,0BCh,6Fh,0BBh,2Fh,0BBh
;      C   =   .   .   .   .   .   .   .   M   к    м    o   л    /   л 
iB1:
 db    43h,3Dh,20h,20h,20h,20h,20h,20h,20h,0A0h,20h,20h,20h,20h,20h,20h
;      C   =   .   .   .   .   .   .   .   Б    .   .   .   .   .   . 
;___________________________________________________________________________________


iVvedF:
 db    20h,42h,0B3h,65h,0E3h,0B8h,0BFh,65h,20h,0E4h,61h,0BAh,0BFh,6Fh,70h,20h
;      .   В   в    е   д    и    т    е   .   ф    а   к    т    о   р   .
iFaktor:
 db    20h,20h,20h,20h,46h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   .   F   =   .   .   .   .   .   .   .   .   .   .
iS:
 db    20h,20h,20h,20h,53h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   .   S   =   .   .   .   .   .   .   .   .   .   .
iAp:
 db    20h,20h,20h,20h,44h,70h,3Dh,20h,20h,2Ch,20h,20h,20h,20h,20h,20h
;      .   .   .   .   D   p   =   .   .   ,   .   .   .   .   .   .
iAbp:
 db    20h,20h,20h,20h,44h,62h,70h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   .   D   b   p   =   .   ,   .   .   .   .   .   .
iAs:
 db    20h,20h,20h,20h,44h,73h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   .   D   s   =   .   .   ,   .   .   .   .   .   .
iAbs:
 db    20h,20h,20h,20h,44h,62h,73h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   .   D   b   s   =   .   ,   .   .   .   .   .   .
iCs:
 db    20h,20h,20h,20h,43h,73h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   .   C   s   =   .   .   .   .   .   .   .   .
iDsF:
 db    44h,73h,3Dh,20h,2Ch,20h,20h,20h,46h,3Dh,20h,20h,20h,20h,20h,20h
;       D   s   =  .   ,   .   .   .   F   =   .   .   .    .   .  

iVvedS:
 db    20h,42h,0B3h,65h,0E3h,2Eh,20h,20h,63h,0BFh,61h,0BDh,0E3h,61h,70h,0BFh
;      .   В   в    е   д    ,   .   .   с   т    a   н    д    а   р   т
iPolF:
 db    20h,0A8h,6fh,0BBh,0C7h,70h,0BDh,2Eh,20h,0E4h,61h,0BAh,0BFh,6Fh,70h,61h
;      .   П    о   л    я    р   н    .   .   ф    а   к    т    о   р   a
iPoloj:
 db   20h,0A8h,6Fh,0BBh,6Fh,0B6h,0B8h,0BFh,65h,0BBh,0C4h,0BDh,0C3h,0B9h,20h,20h
;     .   П    о   л    o   ж    и    т    e   л    ь    н    ы    й    .   .
iOtric:
 db  20h,4Fh,0BFh,70h,0B8h,0E5h,61h,0BFh,65h,0BBh,0C4h,0BDh,0C3h,0B9h,20h,20h
;    .   O   т    р   и    ц    a   т    e   л    ь    н    ы    й    .   .
iVibTest:
 db    20h,42h,0C3h,0B2h,65h,70h,0B8h,0BFh,65h,20h,0BFh,65h,63h,0BFh,20h,20h
;       .   В   ы    б    e   p   и   т    e   .   т    e   c   т    .   .
iVvedKF:
 db    20h,42h,0B3h,65h,0E3h,0B8h,0BFh,65h,20h,0BAh,6Fh,0BBh,2Eh,0E4h,61h,0B7h
;          В   в    е   д    и    т    е   .   к    o   л    .   ф    а   з
iN:  db   '     N=         '

iKF:
 db    20h,4Bh,6Fh,0BBh,2Eh,20h,0E4h,61h,0B7h,20h,20h,4Eh,3Dh,20h,20h,20h
;          K   o   л    .   .   ф    а   з    .   .   N   =   .   .   .

iVvedLag:
 db    20h,42h,0B3h,65h,0E3h,0B8h,0BFh,65h,20h,0A7h,61h,0B4h,0E4h,61h,0B7h,79h
;      .   В   в    е   д    и    т    е   .   Л    а   г    ф    а   з    у
iVvedFaz:
 db    20h,20h,42h,0B3h,65h,0E3h,0B8h,0BFh,65h,20h,0AAh,61h,0B7h,79h,20h,20h
;      .   .   В   в    е   д    и    т    е   .   Ф    а   з    у   .   .

;i0c:   db   '        0 c     '
;i30c:  db   '       30 c     '
;i60c:  db   '       60 c     '
;i90c:  db   '       90 c     '
;i120c: db   '      120 c     '
;i150c: db   '      150 c     '
;i180c: db   '      180 c     '
;i210c: db   '      210 c     '
;i240c: db   '      240 c     '
;i270c: db   '      270 c     '
;i300c: db   '      300 c     '
iObnSer:
 db    20h,4Fh,0B2h,0BDh,79h,0BBh,65h,0BDh,0B8h,65h,20h,63h,65h,70h,0B8h,0B9h
;      .   O   б    н    у   л    e   н    и    е   .   с   е   р    и   й
iViYv:
 db    20h,20h,42h,0C3h,20h,79h,0B3h,65h,70h,65h,0BDh,0C3h,20h,3Fh,20h,20h
;      .   .   В   ы    .   у   в    e   р   е   н    ы    .   ?   .   .
iOtch:
 db    20h,20h,20h,20h,20h,4Fh,0C0h,0B8h,63h,0BFh,0BAh,61h,20h,20h,20h,20h
;      .   .   .   .   .   O   ч    и    c   т    к    а   .   .   .   .
iPodojd:
 db    20h,20h,20h,0A8h,6Fh,0E3h,6Fh,0B6h,0E3h,0B8h,0BFh,65h,21h,20h,20h,20h
;      .   .   .   П    о   д    о   ж    д    и    т    e   !   .   .   .
iMetod:
 db    20h,20h,20h,20h,20h,41h,0A7h,54h,2Dh,4Dh,20h,20h,20h,20h,20h,20h
                           ;АЛТ-М                                       0
 db    20h,20h,20h,20h,20h,41h,0A7h,54h,2Dh,43h,20h,20h,20h,20h,20h,20h
                           ;АЛТ-С                                       1
 db    20h,20h,20h,20h,20h,41h,0A7h,54h,2Dh,0A3h,20h,20h,20h,20h,20h,20h
                           ;АЛТ-Ж                                       2
 db    20h,20h,20h,20h,20h,41h,0A7h,0A0h,4Dh,20h,20h,20h,20h,20h,20h,20h
                           ;АЛБM                                        3
 db    20h,20h,20h,20h,20h,41h,4Dh,0A5h,0A7h,20h,20h,20h,20h,20h,20h,20h
                           ;АМИЛ                                        4
 db    20h,20h,20h,20h,20h,41h,43h,54h,2Dh,4Dh,20h,20h,20h,20h,20h,20h
                           ;АCТ-M                                       5
 db    20h,20h,20h,20h,20h,41h,43h,54h,2Dh,43h,20h,20h,20h,20h,20h,20h
                           ;АCТ-C                                       6
 db    20h,20h,20h,20h,20h,41h,43h,54h,2Dh,0A3h,20h,20h,20h,20h,20h,20h
                           ;АCТ-Ж                                       7
 db    20h,20h,20h,20h,20h,0A0h,0A5h,0A7h,2Dh,0A8h,20h,20h,20h,20h,20h,20h
                           ;БИЛ-П                                       8
 db    20h,20h,20h,20h,20h,0A0h,0A5h,0A7h,2Dh,4Fh,20h,20h,20h,20h,20h,20h
                           ;БИЛ-O                                       9
 db    20h,20h,20h,20h,20h,0A1h,45h,4dh,0A1h,0A7h,20h,20h,20h,20h,20h,20h
                           ;ГЕМГЛ                                       A
 db    20h,20h,20h,20h,20h,0A1h,0A7h,0B0h,4Bh,20h,20h,20h,20h,20h,20h,20h
                           ;ГЛЮК                                        B
 db    20h,20h,20h,20h,20h,0A1h,0A7h,2Dh,0A1h,4Bh,20h,20h,20h,20h,20h,20h
                           ;ГЛ-ГК                                       C
 db    20h,20h,20h,20h,20h,0A1h,54h,54h,20h,20h,20h,20h,20h,20h,20h,20h
                           ;ГТТ                                         D
 db    20h,20h,20h,20h,20h,0A3h,45h,0A7h,20h,20h,20h,20h,20h,20h,20h,20h
                           ;ЖЕЛ                                         E
 db    20h,20h,20h,20h,20h,4Bh,41h,0A7h,0A5h,0A6h,20h,20h,20h,20h,20h,20h
                           ;КАЛИй                                       F
 db    20h,20h,20h,20h,20h,4Bh,41h,0A7h,0C4h,0E5h,20h,20h,20h,20h,20h,20h
                           ;КАЛьц                                       10
 db    20h,20h,20h,20h,20h,4Bh,2Eh,0AAh,4Fh,43h,20h,20h,20h,20h,20h,20h
                           ;К.ФОС                                       11
 db    20h,20h,20h,20h,20h,4Bh,50h,45h,41h,54h,20h,20h,20h,20h,20h,20h
                           ;КРЕАТ                                       12
 db    20h,20h,20h,20h,20h,4Bh,0AAh,4Bh,20h,20h,20h,20h,20h,20h,20h,20h
                           ;КФК                                         13
 db    20h,20h,20h,20h,20h,4Bh,0AAh,4Bh,4Dh,42h,20h,20h,20h,20h,20h,20h
                           ;КФКMB                                       14
 db    20h,20h,20h,20h,20h,0A7h,0E0h,0A1h,20h,20h,20h,20h,20h,20h,20h,20h
                           ;ЛДГ                                         15
 db    20h,20h,20h,20h,20h,4Dh,41h,0A1h,48h,20h,20h,20h,20h,20h,20h,20h
                           ;МАГH                                        16
 db    20h,20h,20h,20h,20h,0A7h,41h,4Bh,54h,20h,20h,20h,20h,20h,20h,20h
                           ;ЛАКТ                                        17
 db    20h,20h,20h,20h,20h,4Dh,4Bh,2Dh,54h,41h,20h,20h,20h,20h,20h,20h
                           ;МК-ТА                                       18
 db    20h,20h,20h,20h,20h,4Dh,4Fh,0ABh,45h,42h,20h,20h,20h,20h,20h,20h
                           ;МОЧЕВ                                       19
 db    20h,20h,20h,20h,20h,48h,41h,54h,50h,20h,20h,20h,20h,20h,20h,20h
                           ;HАТР                                        1A
 db    20h,20h,20h,20h,20h,4Fh,2Eh,0A0h,45h,0A7h,20h,20h,20h,20h,20h,20h
                           ;О.БЕЛ                                       1B
 db    20h,20h,20h,20h,20h,54h,0A1h,20h,20h,20h,20h,20h,20h,20h,20h,20h
                           ;ТГ                                          1C
 db    20h,20h,20h,20h,20h,0AAh,4Fh,43h,0AAh,20h,20h,20h,20h,20h,20h,20h
                           ;ФОСФ                                        1D
 db    20h,20h,20h,20h,20h,58h,0A7h,4Fh,50h,20h,20h,20h,20h,20h,20h,20h
                           ;ХЛОР                                        1E
 db   20h,20h,20h,20h,20h,58h,4Fh,0A7h,20h,20h,20h,20h,20h,20h,20h,20h
                           ;ХOЛ                                         1F
 db   20h,20h,20h,20h,20h,0E2h,2Eh,0AAh,4Fh,43h,20h,20h,20h,20h,20h,20h
                           ;Щ.ФОС                                       20
 db   20h,20h,20h,20h,20h,2Dh,2Dh,2Dh,2Dh,2Dh,20h,20h,20h,20h,20h,20h
                           ;-   -   -   -   -                           21

;       1   2   3   4   5    6    7   8   9    10   11  12  13  14   15  16
;iWl: db 20h,42h,0B3h,65h,0E3h,0B8h,0BFh,65h,20h,20h,0B3h,6Fh,0BBh,0BDh,79h,20h
;           B   в    e   д    и    т    e   .   .   в    o   л    н    y   .
;       1   2   3   4   5    6    7   8   9    10   11  12  13  14   15  16
iWl: db 20h,0A9h,63h,0BFh,61h,0BDh,6Fh,0B3h,0B8h,0BFh,65h,20h,00h,20h,0BDh,0BCh
;           У    c   т    а   н    o   в    и    т    е   .   L   .   н    м 
;iWl1:
;     db 20h,42h,0B3h,65h,0E3h,0B8h,0BFh,65h,20h,0B3h,6Fh,0BBh,0BDh,79h,20h,31h
;           B   в    е   д    и    т    е   .   в    о   л    н    y   .   1   .
iWl1: 
     db 20h,0A9h,63h,0BFh,61h,0BDh,6Fh,0B3h,0B8h,0BFh,65h,20h,00h,31h,0BDh,0BCh
;            У    c   т    а   н    o   в    и    т    е   .   L   1   н    м 
;iWl2:
;     db 20h,42h,0B3h,65h,0E3h,0B8h,0BFh,65h,20h,0B3h,6Fh,0BBh,0BDh,79h,20h,32h
;           B   в    е   д    и    т    е   .   в    о   л    н    y   .   2   .
iWl2:
     db 20h,0A9h,63h,0BFh,61h,0BDh,6Fh,0B3h,0B8h,0BFh,65h,20h,00h,32h,0BDh,0BCh
;            У    c   т    а   н    o   в    и    т    е   .   L   2   н    м 

iLAMB:
;       1   2   3   4   5   6   7   8   9   10  11  12   13   14  15  16
     db 20h,20h,20h,00h,20h,3Dh,20h,2Dh,2Dh,2Dh,20h,0BDh,6Dh,20h,20h,20h
;                   l       =       -   -   -       н    м
;          1   2   3   4   5   6   7   8   9   10  11   12   13  14  15  16
;iACP:   db 20h,41h,0E1h,0A8h,20h,4Bh,0A9h,43h,20h,4Bh,20h,43h,50h,20h,4Dh,54h
;              A   Ц    П        К   У    С        К      C   P        M   Т
;          1   2    3   4    5   6   7   8   9   10   11  12  13  14  15  16
iACP:   db 20h,41h,0E1h,0A8h,20h,0A5h,4Bh,20h,20h,20h,20h,4Fh,4Bh,20h,20h,20h
;              A   Ц    П        И    К                   O   K           
;          1   2   3    4    5   6   7   8   9   10  11  12  13  14  15  16

iREP:   db 20h,0A8h,4Ah,0A5h,43h,4Bh,20h,50h,45h,0A8h,45h,50h,42h,20h,20h,54h
;              П    O   И    С   К       Р   E   П    E   P   A           Т
;****************************************************************************
;          1   2   3   4    5    6   7    8   9    10  11  12  13  14  15  16
;iISP:   db 20h,20h,4Fh,0A4h,0A9h,20h,0A5h,43h,0A8h,50h,41h,42h,48h,4Fh,20h,20h
;                  О   З    У        И    С   П    Р   А   В   H   О
;iNIS:   db 20h,4Fh,0A4h,0A9h,20h,48h,45h,0A5h,43h,0A8h,50h,41h,42h,48h,4Fh,20h
;              О   З    У        H   E   И    С   П    Р   А   В   H   О
;****************************************************************************
;          1   2    3   4   5   6   7   8   9   10  11  12   13   14  15  16
;iOZY:   db 20h,0A8h,50h,4Ah,42h,45h,50h,4Bh,42h,20h,4Fh,0A4h,0A9h,20h,20h,54h
;              П    Р   O   B   E   P   K   A       O   З    У            Т
;          1   2   3   4   5    6    7   8   9   10   11  12   13  14  15  16
iYEAR:  db 20h,42h,42h,45h,0E0h,0A5h,54h,45h,20h,0A1h,4Fh,0E0h,20h,20h,20h,54h
;              B   B   E   Д    И    T   E       Г    O   Д                T
iMONTH: db 20h,42h,42h,45h,0E0h,0A5h,54h,45h,20h,4Dh,45h,43h,0B1h,0E1h,20h,54h
;              B   B   E   Д    И    T   E       M   E   C   Я    Ц        T
iDATE:  db 20h,42h,42h,45h,0E0h,0A5h,54h,45h,20h,0ABh,0A5h,43h,0A7h,4Fh,20h,54h
;              B   B   E   Д    И    T   E       Ч    И    C   Л    O       T
iDAY:   db 20h,42h,42h,45h,0E0h,0A5h,54h,45h,20h,0E0h,45h,48h,0C4h,20h,20h,54h
;              B   B   E   Д    И    T   E       Д    E   H   Ь            T
iHOURS: db 20h,42h,42h,45h,0E0h,0A5h,54h,45h,20h,0ABh,41h,43h,0AEh,20h,20h,54h
;              B   B   E   Д    И    T   E       Ч    А   C   Ы            T
iMINUT: db 20h,42h,42h,45h,0E0h,0A5h,54h,45h,20h,4Dh,0A5h,48h,0A9h,54h,0AEh,54h
;              B   B   E   Д    И    T   E       M   И    H   У    T   Ы    T
iSEK:   db 20h,42h,42h,45h,0E0h,0A5h,54h,45h,20h,43h,45h,4Bh,20h,20h,20h,54h
;              B   B   E   Д    И    T   E       C   E   K               T
iGACH:  db 20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
iGACHT: db 20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,54h



iVremia:
	db 20h,0A9h,63h,0BFh,2Eh,20h,20h,20h,0B3h,70h,65h,0BCh,65h,0BDh,0B8h,20h
;		У   с	т    ,   .   .   .   в    р   е   м    е   н    и
iError: db 20h,20h,20h,4Fh,0C1h,0B8h,0B2h,0BAh,61h,20h,23h,20h,20h,20h,20h,20h
;		        O   ш     и   б     к   а       #
iOchist:
        db      '                '
iGrC:   db 20h,20h,20h,20h,20h,0DFh,43h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;                               *    C
iIzNul:
        db 20h,0A5h,0B7h,0BCh,65h,70h,0C4h,0BFh,65h,20h,5Ah,45h,52h,4Fh,20h,20h
;           .   И    з    м    е   р   ь    т    е   .   Z  E   R   O    .   .
iVvKod:
        db 20h,20h,42h,0B3h,65h,0E3h,0B8h,0BFh,65h,20h,0BAh,6Fh,0E3h,20h,20h,20h 
;           .   .   В    в   е    д    и    т   е   .   к    о    д   .   .   .   
iTermo:
        db 20h,42h,0BAh,0BBh,2Fh,42h,0C3h,0BAh,0BBh,20h,0BFh,65h,70h,0BCh,6Fh,20h 
;           .   В    к    л   /   В    ы    к    л   .    т   е   р    м   о   .  
iTVkl:  db 20h,54h,2Dh,63h,0BFh,61h,0BFh,20h,0B3h,0BAh,0BBh,0C6h,0C0h,65h,0BDh,20h
;               Т   -   с    т   а    т   .    в    к    л    ю    ч   е    н   .
iTVikl: db 20h,54h,2Dh,63h,0BFh,61h,0BFh,20h,0B3h,0C3h,0BAh,0BBh,0C6h,0C0h,65h,0BDh
;              Т   -   с    т   а    т   .    в    ы    к    л    ю    ч   е    н 
iVkl:   db 20h,20h,20h,42h,0BAh,0BBh,0C6h,0C0h,0B8h,0BFh,0C4h,20h,3Fh,20h,20h,20h
;           .   .   .   В    к    л    ю    ч    и    т   ь    .   ?   .   .   .
iVikl:  db 20h,20h,20h,42h,0C3h,0BAh,0BBh,0C6h,0C0h,0B8h,0BFh,0C4h,20h,3Fh,20h,20h
;           .   .   .   В    ы    к    л    ю    ч    и    т   ь    .   ?   .   . 
iWait:
        db 20h,20h,20h,0A8h,6Fh,0E3h,6Fh,0B6h,0E3h,0B8h,0BFh,65h,20h,20h,20h,20h
;                      П    о   д    о   ж    д    и    т    е    
;          1   2   3   4    5   6    7   8    9    10   11   12  13  14  15  16
iRezObn:
        db 20h,20h,50h,65h,0B7h,2Eh,20h,6Fh,0B2h,0BDh,79h,0BBh,65h,0BDh,0C3h,20h
;                  P   e   з    ,   .   o   б    н    у   л    e   н    ы    .
;          1   2   3   4    5   6   7   8   9    10   11  12   13  14   15   16

;iWait:
;        db 20h,20h,20h,0A8h,6Fh,0E3h,6Fh,0B6h,0E3h,0B8h,0BFh,65h,20h,20h,20h,20h
;                      П    о   д    о   ж    д    и    т    е    
;          1   2   3   4    5   6    7   8    9    10   11   12  13  14  15  16

iLAG:
;       1   2   3   4   5   6   7   8   9   10  11  12   13   14  15  16
     db 20h,20h,20h,54h,0BBh,3Dh,20h,20h,20h,20h,20h,63h,65h,0BAh,20h,20h
;                   T   л    =       .   .   .       с   е   к
;          1   2   3    4    5   6   7   8   9   10  11   12   13  14  15  16

iPH:
;       1   2   3   4   5   6   7   8   9   10  11  12   13   14  15  16
     db 20h,20h,20h,54h,0E4h,3Dh,20h,20h,20h,20h,20h,63h,65h,0BAh,20h,20h
;                   T   ф    =       .   .   .       с   е   к
;          1   2   3    4    5   6   7   8   9   10  11   12   13  14  15  16





;*******************************************************************
;Подпрограмма установки часов
;*******************************************************************
sendClock:
  	mov     ADRl,#SEK       ;пуск часов
        mov     DANl,#0h
        call    wrDS

        mov     sizeH,#0        ;в sizeH признак выводимой информации

cl1:    mov     A,sizeH
        cjne    A,#0,cl2
        mov     DPTR,#iYEAR     ;коррекция года
        mov     ADRl,#YEAR
cl2:    cjne    A,#1,cl3
        mov     DPTR,#iMONTH
        mov     ADRl,#MONTH
cl3:    cjne    A,#2,cl4
        mov     DPTR,#iDATE
        mov     ADRl,#DATE
cl4:    cjne    A,#3,cl5
        mov     DPTR,#iDAY
        mov     ADRl,#DAY
cl5:    cjne    A,#4,cl6
        mov     DPTR,#iHOURS
        mov     ADRl,#HOURS
cl6:    cjne    A,#5,cl7
        mov     DPTR,#iMINUT
        mov     ADRl,#MINUT
cl7:    cjne    A,#6,cl8
        mov     DPTR,#iSEK
        mov     ADRl,#SEK
cl8:    call    zagr            ;высветить
        call    out_str1
        mov     DPTR,#iGACH     ;очистить индикаторные ячейки
        call    zagr

        call    rdDS            ;чтение инф. из м/с часов по адресу ADR
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R1,#ZN3         ;вывод старшей цифры в ZN3
        mov     @R1,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R1,#ZN4         ;вывод второй цифры в ZN4
        mov     @R1,A
        call    out_str2
cl9:    call    klav            ;опрос клавиатуры
        cjne    A,#KlEnter,cl10     ;если ВВОД то к следующ. режиму
        call    zvyk
cl9a:   inc     sizeH
        mov     A,sizeH
        cjne    A,#7,cl1        ;если часы установлены, то на ВЫХОД
        ret

cl10:   cjne    A,#KlEsc,cl10a     ;если СТОП то к следующ. режиму
        call    zvyk
        ret
cl10a:
        cjne    A,#10,cl11      ;если клавиша цифровая то звук
cl11:   jnc     cl9
        mov     DES0,A
        call    zvyk
        mov     A,DES0
        orl     A,#30h
        mov     R1,#ZN9         ;высвечивание первой цифры в ZN9
        mov     @R1,A
        call    out_str2
cl12:   call    klav
        cjne    A,#10,cl13      ;если клавиша цифровая то звук
cl13:   jnc     cl12
        mov     DES1,A
        call    zvyk
        mov     A,DES1
        orl     A,#30h
        mov     R1,#ZN10        ;высвечивание второй цифры в ZN10
        mov     @R1,A
        call    out_str2
        call    klav            ;ждем клавиши 
        cjne    A,#KlEnter,cl14
        call    zvyk
        mov     A,DES0          ;объединяем тетрады
        swap    A
        orl     A,DES1
        mov     DANl,A          ;записываем в DS
        call    wrDS
        jmp     cl9a            ;переход к следующей информации
cl14:   cjne    A,#KlEsc,cl9    ;если СТОП то к следующ. режиму
        call    zvyk
        ret

;*****************************************************************************
;Включение термостата
;*****************************************************************************
;onTrst:
;        setb    trstat          ;включить термостат
;        ret
;*****************************************************************************
zd2mc:  mov     R6,#80
zd1:    mov     R7,#99
        djnz    R7,$
        djnz    R6,zd1
        ret
;*****************************************************************************
;***********************************************************
;---------------------------------------------
;anSize - анализ размера  MlSt,MlMl < ChSt,ChMl < StSt,StMl
;Вход: ChSt,ChMl - двухбайтовое число
;Выход: B - критерий(0 - ChSt,ChMl < MlSt,MlMl
;                    1 - MlSt,MlMl <= ChSt,ChMl <= StSt,StMl
;                    2 - ChSt,ChMl > StSt,StMl)
;---------------------------------------------
anSize: mov     A,ChSt
anS_1:  cjne    A,StSt,anS_2
        jmp     anS_4
anS_2:  jc      anS_3
        mov     B,#2
        ret
anS_3:  mov     B,#0
        jmp     anS_5
anS_4:  mov     A,ChMl
        cjne    A,StMl,anS_2
        mov     B,#1
        ret
anS_5:  mov     A,ChSt
        cjne    A,MlSt,anS_6
        jmp     anS_8
anS_6:  jc      anS_7
        mov     B,#1
        ret
anS_7:  mov     B,#0
        ret
anS_8:  mov     A,ChMl
        cjne    A,MlMl,anS_6
        mov     B,#1
        ret
;*****************************************************************

;**********************************************************
;********************************************************
;***********************************************************

HEXkod: inc     A
        movc    A,@A+PC         ;
        ret
   db   30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,44h,45h,46h

;---------------------------------------------------------------------------------


iTRavno:
   db   20h,20h,20h,54h,20h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h     

;************************************************************************************
iTEXNO: db 20h,20h,54h,45h,58h,48h,4Fh,20h,50h,45h,0A3h,0A5h,4Dh,20h,20h,54h
;                  Т   Е   Х   H   О       Р   Е   Ж    И    М           T
;          1   2   3    4    5   6   7    8   9   10  11  12  13  14  15  16
;************************************************************************************
texRej:
;        clr     bitTTT
;        clr     trstat 
        mov     DPTR,#iTEXNO      ;индикация "SOLAR  PV1251"
        call    zagr
        call    out_str1
        mov     DPTR,#iGACHT     
        call    zagr
        call    out_str2
        clr     lamp
b1:     
        call    klav		;
        cjne    A,#Kl1,b2       ;ЧТЕНИЕ ТЕМПЕРАТУРЫ если клавиша 1
        call    zvyk


xxzz:
        jb      prSmT,xxzz_1
;        jnb     prTrst,n1
        call    stKey
        jz      xxzz_1
        call    Key
        cjne    A,#KlEsc,xxzz_1
        call    zvyk
        jmp     texRej
xxzz_1:   
;        mov     DPTR,#iPV       ;индикация "SOLAR  PV1251"
;        call    zagr
;        call    out_str1
        mov     DPTR,#iGrC
        call    zagr
        mov     a,ChSt
        mov     b,#10
        div     ab
        mov     R0,#ZN1
        orl     A,#30h
        mov     @R0,A
        inc     R0
        orl     B,#30h
        mov     @R0,b
        inc     R0
        mov     @R0,#2Ch
        inc     R0
        
        mov     A,ChMl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,ChMl
        anl     A,#0Fh
        orl     A,#30h
        mov     @R0,A
        call    out_str2
        clr     prSmT
        jmp     xxzz







;b1_1:   mov     DPTR,#iTRavno
;        call    zagr
;        call    readTemp
;        mov     A,DANh
;        mov     B,#10
;        div     AB
;        mov     R0,#ZN8         ;десятки
;        orl     A,#30h
;        mov     @R0,A
;        inc     R0
;        orl     B,#30h          ;единицы
;        mov     @R0,B
;        inc     R0
;        mov     @R0,#2ch        ;запятая
;        inc     R0
;        mov     A,DANl
;        anl     A,#0F0h
;        swap    A
;        call    drob
;        mov     B,A
;        anl     A,#0F0h
;        swap    A
;        orl     A,#30h          ;десятая
;        mov     @R0,A
;        inc     R0
;        mov     A,B
;        anl     A,#0Fh
;        orl     A,#30h          ;сотая
;        mov     @R0,A
;        call    out_str2
;b1_2:   call    klav
;        cjne    A,#KlEnter,b1_3
;        call    zvyk
;        jmp     b1_1
;b1_3:   cjne    A,#KlEsc,b1_2
;        call    zvyk
;        jmp     texRej
;-------------------------------------
iF1Hz:    db     '     F = 1Hz    '
;-------------------------------------

b2:     cjne    A,#Kl2,b3       ;УСТАНОВКА ГЕНЕРАТОРА DS1307 на 1 сек
        call    zvyk
        mov     DPTR,#iF1Hz
        call    zagr
        call    out_str2

	mov     ADRl,#SEK       ;останов часов
        mov     DANl,#80h
        call    wrDS

	mov	ADRl,#CONTR     ;посылка кода в регистр контроля
	mov	DANl,#10010000b
	call	wrDS

	mov     ADRl,#SEK       ;пуск часов
        mov     DANl,#0h
        call    wrDS
b2_1:   call    klav
        cjne    A,#KlEsc,b2_1
        call    zvyk
	jmp	texRej
;-------------------------------------
iF1kHz:    db     '    F = 4096Hz  '
;-------------------------------------

b3:	cjne	A,#Kl3,b4	;УСТАНОВКА ГЕНЕРАТОРА DS1307 на 4096 Гц
        call    zvyk
        mov     DPTR,#iF1kHz
        call    zagr
        call    out_str2
	mov     ADRl,#SEK       ;останов часов
        mov     DANl,#80h
        call    wrDS
	mov	ADRl,#CONTR     ;посылка кода в регистр контроля
	mov	DANl,#10010001b
	call	wrDS
	mov     ADRl,#SEK       ;пуск часов
        mov     DANl,#0h
        call    wrDS
b3_1:   call    klav
        cjne    A,#KlEsc,b3_1
        call    zvyk
	mov     ADRl,#SEK       ;останов часов
        mov     DANl,#80h
        call    wrDS

	mov	ADRl,#CONTR     ;посылка кода в регистр контроля
	mov	DANl,#10010000b
	call	wrDS

	mov     ADRl,#SEK       ;пуск часов
        mov     DANl,#0h
        call    wrDS
	jmp	texRej
;_______________________________________________________________________________________
;Ввести по две цифры или подтвердить клавишей ENTER на запросы ГОДА...СЕК
;Выход из режима по ESC
;-------------------------------------------
b4:     cjne    A,#Kl4,b5	;УСТАНОВКА ВРЕМЕНИ
        call    zvyk
	call	sendClock
b4_1:	jmp	texRej

;-------------------------------------------------------------------
;Вывод на экран значений АЦП дли измерительного и опорного каналов
;-------------------------------------------------------------------
b5_dop: jmp     b6
b5:	cjne	A,#Kl5,b5_dop
        call    zvyk
        mov     DPTR,#iACP     
        call    zagr
        call    out_str1
        mov     DPTR,#iGACHT     
        call    zagr
        call    out_str2
        
b5_1:   call    getACP
        mov     SFRPAGE,#0Fh            ;измерительный канал
        mov     R0,#ZN3
        mov     A,ADR11
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR11
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,ADR10
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR10
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,ADR9
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR9
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A

        mov     R0,#ZN10                ;опорный канал
        mov     A,ADR15
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR15
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,ADR14
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR14
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,ADR13
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR13
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
        call    out_str2

b5_2:   mov     SFRPAGE,#0Fh            ;
	call    klav
        cjne    A,#KlEnter,b5_3
        call    zvyk
        jmp     b5_1
b5_3:   cjne    A,#KlEsc,b5_2
        call    zvyk
        jmp     texRej
;-----------------------------------------------------------------------------
;Проверка записи и считывания в ячейки 00h числа 55h и в ячейки 11h числа 66h
;для микросхемы FM24C64
;-----------------------------------------------------------------------------
iFM :   db 20h,0A8h,50h,4Fh,42h,45h,50h,4Bh,41h,20h,46h,4Dh,20h,20h,20h,54h
;              П    Р   O   B   E   P   K   A       F   M               Т
;          1   2    3   4   5   6   7   8   9   10  11  12  13  14  15  16
iOKEY:  db '      ok       T'
iNOKEY: db '     N ok      T'
b6:     cjne    A,#Kl6,b7
        call    zvyk
        mov     DPTR,#iFM
        call    zagr
        call    out_str1
        mov     ADRh,#10h       ;запись в ячейки
        mov     ADRl,#10h
        mov     DANl,#55h
        call    wrFM
	jb 	SM_BUSY,$ 	; Подождать освобождения шины	
        inc     ADRh
        inc     ADRl
        mov     DANl,#66h
        call    wrFM
	jb 	SM_BUSY,$ 	; Подождать освобождения шины

        mov     ADRh,#10h
        mov     ADRl,#10h
        mov     DANl,#0h
        call    readFM
        mov     A,DANl
        cjne    A,#55h,b6_1
        inc     ADRh
        inc     ADRl
        mov     DANl,#0h
        call    readFM
        mov     A,DANl
        cjne    A,#66h,b6_1
        mov     DPTR,#iOKEY
        call    zagr
        call    out_str2
        jmp     b6_2
b6_1:   mov     DPTR,#iNOKEY
        call    zagr
        call    out_str2
b6_2:   call    klav
        cjne    A,#KlEsc,b6_2
        call    zvyk
        jmp     texRej
;------------------------------------------------------------------------------------------------
;Проверка датчиков
;------------------------------------------------------------------------------------------------
iDatT:  db 20h,0E0h,61h,0BFh,0C0h,0B8h,0BAh,20h,20h,0BFh,20h,20h,20h,20h,0B4h,20h
;              Д    а   т    ч    и    к            т    .   .   .   .   г    . 
;b7d:    jmp     b9

b7:     cjne    A,#Kl7,b8
        call    zvyk    
        setb    lamp
        clr     maxLamp         ;минимальная яркость
        clr     medLamp
        mov     DPTR,#iDatT
        call    zagr
        call    out_str1
        mov     DPTR,#iGACHT     
        call    zagr
        call    out_str2

b7_1:   mov     SFRPAGE,#1      ;чтение датчика
        mov     A,CPT0CN        ;
        mov     SFRPAGE,#0Fh    ;
        jnb     ACC.6,b7_2     ;
        jmp     b7_6
b7_2:   mov     A,#31h
b7_3:   mov     R0,#ZN10
        mov     @R0,A


        mov     SFRPAGE,#3      ;чтение датчика
        mov     A,CPT2CN        ;
        mov     SFRPAGE,#0Fh    ;
        jnb     ACC.6,b7_4     ;
        jmp     b7_7
b7_4:   mov     A,#31h
b7_5:   mov     R0,#ZN15
        mov     @R0,A

        call    out_str2
        call    stKey
        jz      b7_1
        call    key
        cjne    A,#KlEsc,b7_1
        call    zvyk
        jmp     texRej
b7_6:   mov     A,#30h
        jmp     b7_3

b7_7:   mov     A,#30h
        jmp     b7_5


;------------------------------------------------------------------------------------------------
;Проверка уровня сигнала на разных длинах волн через 5 нм
;------------------------------------------------------------------------------------------------

b8d:    jmp     b9
b8:     cjne    A,#Kl8,b8d
        call    zvyk
        call    reper1          ;найти исходн. точку  *
        mov     TekWlH,#1       ;устан. текущ. длину волны 325нм (145h)
        mov     TekWlL,#45h
        mov     codeH,#NulLinH  ;установить текущее положение шагов
        mov     codeL,#NulLinL
	call	NstP            ;выехать на 325 нм
	call	obest           ;обесточить ШД
        mov     TekSdH,#NulLinH ;установить текущее положение шагов
        mov     TekSdL,#NulLinL
        setb    Lamp
        call    zvyk
b8_1:   mov     DPTR,#iL
        call    zagr
        mov     BIN0,#0
        mov     BIN1,TekWlH     ;вместо NNN занести текущую длину волны
        mov     BIN2,TekWlL
        call    p1610
        mov     R1,#ZN6         ;в ZN6 - старшую цифру
        mov     A,DES2
        call    zanCH
        mov     A,DES3
        swap    A
        call    zanCH
        mov     A,DES3
        call    zanCH
        call    out_str1

b8_2:   call    izmer
        mov     SFRPAGE,#0Fh            ;измерительный канал
	clr	maxLamp
	clr	medLamp
        mov     R0,#ZN3
        mov     A,ADR11
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR11
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,ADR10
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR10
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,ADR9
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR9
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A

        mov     R0,#ZN10                ;опорный канал
        mov     A,ADR15
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR15
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,ADR14
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR14
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,ADR13
	swap	A
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,ADR13
	anl	A,#0Fh
	call	HEXkod
	mov	@R0,A
        call    out_str2

b8_3:   
        call    ojid
        jz      b8_6
        call    key
;        call    klav
        cjne    A,#Kl1,b8_3a
        call    zvyk

	clr	IE.7		;запрет всех прерываний

        mov     A,TekWlL
        add     A,#5
        mov     ModWlL,A
        mov     A,TekWlH
        addc    A,#0
        mov     ModWlH,A

        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,b8_3_a
        call    prstr
	setb	IE.7		;разрешение всех прерываний

b8_3_a:
        jmp     b8_1
b8_3a:
        cjne    A,#Kl2,b8_5
        call    zvyk
	clr	IE.7		;запрет всех прерываний

        clr     C
        mov     A,TekWlL
        subb    A,#5
        mov     ModWlL,A
        mov     A,TekWlH
        subb    A,#0
        mov     ModWlH,A

        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,b8_3_a

        call    prstr
	setb	IE.7		;разрешение всех прерываний

        jmp     b8_1

;b8_4:   cjne    A,#Kl3,b8_5
;        call    zvyk
;        jmp     b8_2

b8_5:   cjne    A,#KlEsc,b8_3
        call    zvyk
        jmp     texRej   
b8_6:   jmp     b8_2
;------------------------------------------------------------------
;Установка яркости лампочки
;------------------------------------------------------------------
i27v:   db '   U=9,7B R12  T'
i24v:   db '   U=8,7B R9   T'
i20v:   db '   U= 6B  R7   T'
i28v:   db '   U=12,5B     T'
iVikLamp:  
        db '   LAMP   OFF   '
;-------------------------------------------------------------------

b9_dop: jmp     b10
b9:     cjne    A,#Kl9,b9_dop
b9_1:   call    zvyk
        mov     DPTR,#i20v
        call    zagr
        call    out_str2
        setb    lamp
        clr     maxLamp         ;минимальная яркость
        clr     medLamp
b9_2:   call    stKey
        jnz     b9_2a

        mov     YSR,#4

;        call    izmer
        jmp     b9_2
b9_2a:
        call    key
        cjne    A,#Kl1,b9_3
        jmp     b9_1
b9_3:   cjne    A,#Kl2,b9_4
        call    zvyk
        mov     DPTR,#i24v
        call    zagr
        call    out_str2
        setb    lamp            ;средняя яркость
        setb    medLamp
        clr     maxLamp
        jmp     b9_2
b9_4:   cjne    A,#Kl3,b9_5
        call    zvyk
        mov     DPTR,#i27v
        call    zagr
        call    out_str2
        setb    lamp            ;максимальная яркость
        clr     medLamp
        setb    maxLamp
        jmp     b9_2
b9_5:   cjne    A,#Kl4,b9_6
        call    zvyk
        mov     DPTR,#i28v
        call    zagr
        call    out_str2
        setb    lamp            ;супер максимум
        setb    maxLamp
        setb    medLamp
        jmp     b9_2
b9_6:   cjne    A,#Kl5,b9_7
        call    zvyk
        mov     DPTR,#iVikLamp
        call    zagr
        call    out_str2
        clr     lamp            ;выключено
        clr     maxLamp
        clr     medLamp
        jmp     b9_2
b9_7:	cjne    A,#KlEsc,b9_2
        call    zvyk
        jmp     texRej                             


;---------------------------------------------------------------------------------
iReper:  
        db '   REPER       T'
;---------------------------------------------------------------------------------
;Поиск репера 
;---------------------------------------------------------------------------------
b10:    cjne    A,#KlA,b11
        call    zvyk
        setb    lamp
        clr     maxLamp         ;минимальная яркость
        clr     medLamp
        mov     DPTR,#iReper
        call    zagr
        call    out_str2
        call    reper1          ;поиск реперной точки
        call    obest
b10_1:  call    klav
        cjne    A,#KlEsc,b10_1
        call    zvyk
        jmp     texRej
;---------------------------------------------------------------------------------
iPrinter:  
        db ' TERMOPRINTER  T'
;---------------------------------------------------------------------------------
;Проверка термопринтера
;---------------------------------------------------------------------------------
b11:    
        cjne    A,#KlNiz,b12  
        call    zvyk 
        mov     DPTR,#iPrinter
        call    zagr
        call    out_str2
        ;----------------------------------------------------------------------
        ;ПРОГРАММИРОВАНИЕ таймера 3 для работы UART0 на частоте 9600
        ;----------------------------------------------------------------------
        mov     SFRPAGE,#1h     ;
        mov     TMR3CF,#00001000b      ; Timer 3 Configuration
        mov     RCAP3L,#61h     ; Timer 3 Reload Register Low Byte
        mov     RCAP3H,#0FFh    ; Timer 3 Reload Register High Byte
        mov     TMR3H,#0h       ; Timer 3 High Byte
        mov     TMR3L,#0h       ; Timer 3 Low Byte
        mov     TMR3CN,#4h      ; Timer 3 Control Register (включение)
        ;----------------------------------------------------------------------
        mov     SFRPAGE,#0
        mov     A,#30h
b11_1:
        mov     SFRPAGE,#0
        mov     SBUF0,A         ;Посылка кодов с 30h по 50h
        call    delay1
        inc     A
        cjne    A,#51h,b11_1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
        mov     SFRPAGE,#0Fh
        jmp     texRej

;---------------------------------------------------------------------------------
iINT0:  
        db '  INT0 10cek   T'
;---------------------------------------------------------------------------------

b12d:   jmp     b13
;*****************************************************************
b12:    cjne    A,#KlStart,b12d
        call    zvyk
b12_1:
        call    reper1          ;найти исходн. точку  *
        mov     TekWlH,#1       ;устан. текущ. длину волны 325нм (145h)
        mov     TekWlL,#45h
        mov     codeH,#NulLinH  ;установить текущее положение шагов
        mov     codeL,#NulLinL
	call	NstP            ;выехать на 325 нм
        mov     TekSdH,#NulLinH ;установить текущее положение шагов
        mov     TekSdL,#NulLinL
        mov     DPTR,#iL
        call    zagr
        mov     BIN0,#0
        mov     BIN1,TekWlH     ;вместо NNN занести текущую длину волны
        mov     BIN2,TekWlL
        call    p1610
        mov     R1,#ZN6         ;в ZN6 - старшую цифру
        mov     A,DES2
        call    zanCH
        mov     A,DES3
        swap    A
        call    zanCH
        mov     A,DES3
        call    zanCH
        call    out_str2
        call    zvyk
        call    stKey
        jnz     b12_2
	call	obest           ;обесточить ШД
;        call    zvyk
        call    izmTemn
        call    stKey
        jnz     b12_2
        mov     ModWlH,#3     ;
        mov     ModWlL,#0E7h
        call    prstr
        mov     BIN0,#0
        mov     BIN1,TekWlH     ;вместо NNN занести текущую длину волны
        mov     BIN2,TekWlL
        call    p1610
        mov     R1,#ZN6         ;в ZN6 - старшую цифру
        mov     A,DES2
        call    zanCH
        mov     A,DES3
        swap    A
        call    zanCH
        mov     A,DES3
        call    zanCH
        call    out_str2
        call    zvyk
        call    stKey
        jz      b12_3
b12_2:  call    zvyk
;        clr     IE.0
        jmp     texRej
b12_3:  jmp     b12_1
;----------------------------------
b13a:   jmp     b14
;-----------------------------------------------------------------------------------
;Вывод времени
;-----------------------------------------------------------------------------------
b13:    cjne    A,#KlZero,b13a
        call    zvyk
        mov     DPTR,#iGACHT     
        call    zagr
        call    out_str2
	mov     ADRl,#SEK       ;останов часов
        call    rdDS
        mov     A,DANl
        orl     A,#80h        
        mov     DANl,A
        call    wrDS

	mov	ADRl,#CONTR     ;посылка кода в регистр контроля для 1 Гц
	mov	DANl,#10010000b
	call	wrDS

	mov     ADRl,#SEK       ;пуск часов
        call    rdDS
        mov     A,DANl
        anl     A,#7Fh        
        mov     DANl,A
        call    wrDS
        clr     BitSEC
        setb    IE.0        
b13_1:  jnb     BitSEC,b13_2
        mov     ADRl,#HOURS     ;чтение инф. из м/с часов по адресу ADRl
        call    rdDS
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R1,#ZN3         ;вывод старшей цифры в ZN3
        mov     @R1,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R1,#ZN4         ;вывод второй цифры в ZN4
        mov     @R1,A
        inc     R1
        mov     @R1,#2Dh

        mov     ADRl,#MINUT     ;чтение инф. из м/с часов по адресу ADRl
        call    rdDS
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R1,#ZN6         ;вывод старшей цифры в ZN3
        mov     @R1,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R1,#ZN7         ;вывод второй цифры в ZN4
        mov     @R1,A
        inc     R1
        mov     @R1,#2Dh

        mov     ADRl,#SEK       ;чтение инф. из м/с часов по адресу ADRl
        call    rdDS
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R1,#ZN9         ;вывод старшей цифры в ZN3
        mov     @R1,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R1,#ZN10         ;вывод второй цифры в ZN4
        mov     @R1,A
        mov     R1,#ZN13
        mov     @R1,#0B3h       ;ВЫВОД ВЕРСИИ ПРИБОРА
        inc     R1
        mov     @R1,#30h        ;0
        inc     R1
        mov     @R1,#38h        ;8
 
        call    out_str2
        clr     BitSEC
        jmp     b13_1

b13_2:  call    stKey
        jz      b13_1
        call    Key
        cjne    A,#KlEsc,b13_1
        call    zvyk
;        clr     IE.0
        jmp     texRej
;--------------------------------------------------------------------------------
;Задание температуры термостата
;--------------------------------------------------------------------------------
b14d:
        jmp     b15
b14:    cjne    A,#KlZpt,b14d
        call    zvyk
        mov     BIN2,#20
        mov     BIN3,#0


        mov     DPTR,#iGrC
        call    zagr
b14_1:
        mov     a,BIN2
        mov     b,#10
        div     ab
        mov     R0,#ZN1
        orl     A,#30h
        mov     @R0,A
        inc     R0
        orl     B,#30h
        mov     @R0,b
        inc     R0
        mov     @R0,#2Ch
        inc     R0
        
        mov     A,BIN3
        anl     A,#0Fh
;        swap    A
        orl     A,#30h
        mov     @R0,A
;        inc     R0
;        mov     A,ChMl
;        anl     A,#0Fh
;        orl     A,#30h
;        mov     @R0,A


        mov     ADRh,#HIGH(TemperH)     ;
        mov     ADRl,#LOW(TemperH)
;        mov     DANl,BIN2
        call    readFM
        mov     A,DANl
        mov     b,#10
        div     ab
        mov     R0,#ZN10
        orl     A,#30h
        mov     @R0,A
        inc     R0
        orl     B,#30h
        mov     @R0,b
        inc     R0
        mov     @R0,#2Ch
        mov     ADRh,#HIGH(TemperL)     ;
        mov     ADRl,#LOW(TemperL)
;        mov     DANl,BIN3
        call    readFM
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN13
        mov     @R0,A

        call    out_str2
        call    klav
        cjne    A,#Kl1,b14_2            ;клавиша 1
        call    zvyk
        inc     BIN2
        jmp     b14_1
b14_2:
        cjne    A,#Kl2,b14_3            ;клавиша 2
        call    zvyk
        inc     BIN3
        mov     A,BIN3
        cjne    A,#10,b14_1             ;
        mov     BIN3,#0
        jmp     b14_1
b14_3:
        cjne    A,#KlEnter,b14_4        ;клавиша ENTER
        call    zvyk
        mov     ADRh,#HIGH(TemperH)     ;
        mov     ADRl,#LOW(TemperH)
        mov     DANl,BIN2
        call    wrFM
        mov     ADRh,#HIGH(TemperL)     ;
        mov     ADRl,#LOW(TemperL)
        mov     DANl,BIN3
        call    wrFM
b14_3a:
        jmp     b14_1
b14_4:
        cjne    A,#KlEsc,b14_3a          ;клавиша Esc
        call    zvyk
        jmp     texRej


;------------------------------------------------------------------------------------------------
;Проверка уровня сигнала на разных длинах волн через 5 нм с выводом в десятичном формате и делением на 16
;------------------------------------------------------------------------------------------------
b15d:   jmp     b16
b15:    cjne    A,#KlL,b15d
        call    zvyk
        call    reper1          ;найти исходн. точку  *
        mov     TekWlH,#1       ;устан. текущ. длину волны 325нм (145h)
        mov     TekWlL,#45h
        mov     codeH,#NulLinH  ;установить текущее положение шагов
        mov     codeL,#NulLinL
	call	NstP            ;выехать на 325 нм
	call	obest           ;обесточить ШД
        mov     TekSdH,#NulLinH ;установить текущее положение шагов
        mov     TekSdL,#NulLinL
        setb    Lamp
        call    zvyk
b15_1:  mov     DPTR,#iL
        call    zagr
        mov     BIN0,#0
        mov     BIN1,TekWlH     ;вместо NNN занести текущую длину волны
        mov     BIN2,TekWlL
        call    p1610
        mov     R1,#ZN6         ;в ZN6 - старшую цифру
        mov     A,DES2
        call    zanCH
        mov     A,DES3
        swap    A
        call    zanCH
        mov     A,DES3
        call    zanCH
        call    out_str1
        mov     DPTR,#iOchist
        call    zagr

b15_2:  call    izmer
        mov     SFRPAGE,#0Fh            ;измерительный канал

	clr	maxLamp
	clr	medLamp

        mov     BIN0,#0

        mov     A,ADR11
        mov     B,ADR10
        anl     B,#0F0h
        orl     A,B
        swap    A
        mov     BIN1,A

        mov     A,ADR10
        anl     A,#0Fh
        mov     B,ADR9
        anl     B,#0F0h
        orl     A,B
        swap    A
        mov     BIN2,A

;        mov     BIN0,ADR11
;        mov     BIN1,ADR10
;        mov     BIN2,ADR9
        call    p1610
        mov     R0,#ZN2
;        mov     A,DES1
;	swap	A
;	anl	A,#0Fh
;	call	HEXkod
;	mov	@R0,A
;	inc	R0
        mov     A,DES1
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,DES2
	swap	A
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,DES2
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,DES3
	swap	A
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A

        mov     BIN0,#0

        mov     A,ADR15
        mov     B,ADR14
        anl     B,#0F0h
        orl     A,B
        swap    A
        mov     BIN1,A

        mov     A,ADR14
        anl     A,#0Fh
        mov     B,ADR13
        anl     B,#0F0h
        orl     A,B
        swap    A
        mov     BIN2,A

;        mov     BIN0,ADR15      ;опорный канал
;        mov     BIN1,ADR14
;        mov     BIN2,ADR13
        call    p1610

        mov     R0,#ZN9                
;        mov     A,DES1
;	swap	A
;	anl	A,#0Fh
;	call	HEXkod
;	mov	@R0,A
;	inc	R0
        mov     A,DES1
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,DES2
	swap	A
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,DES2
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
	inc	R0

        mov     A,DES3
	swap	A
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
        orl     A,#30h
;	call	HEXkod
	mov	@R0,A
        call    out_str2

b15_3:  
        call    ojid
        jz      b15_4
        call    key

;        call    klav
        cjne    A,#Kl1,b15_3a
        call    zvyk
        setb    lamp            ;включено

	clr	IE.7		;запрет всех прерываний

        mov     A,TekWlL
        add     A,#5
        mov     ModWlL,A
        mov     A,TekWlH
        addc    A,#0
        mov     ModWlH,A


        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,b15_3b
        call    prstr
	setb	IE.7		;разрешение всех прерываний

        jmp     b15_1
b15_3a:
        cjne    A,#Kl2,b15_5
        call    zvyk
        setb    lamp            ;включено
	clr	IE.7		;запрет всех прерываний

        mov     A,TekWlL
        clr     C
        subb    A,#5
        mov     ModWlL,A
        mov     A,TekWlH
        subb    A,#0
        mov     ModWlH,A
        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,b15_3b
        call    prstr

;        mov     DPH,TekWlH      ;декремент через DPTR
;        mov     DPL,TekWlL
;        dec     DPL
;        dec     DPL
;        dec     DPL
;        dec     DPL
;        dec     DPL
;        mov     ModWlH,DPH      ;в ячейках ModWlH,ModWlL
;        mov     ModWlL,DPL      ;инкрементированая длина волны
b15_3b:
	setb	IE.7		;разрешение всех прерываний
        jmp     b15_1

b15_4:  ;cjne    A,#Kl3,b15_5
;        call    zvyk
        jmp     b15_2

b15_5:	cjne    A,#Kl9,b15_6
        call    zvyk	
        clr     lamp            ;выключено
        jmp     b15_2

b15_6:	cjne    A,#KlEsc,b15_3
        call    zvyk
        jmp     texRej

;---------------------------------------------------------------------------------
;ШД сдвинуть на 200 шагов назад
i500L:  db     '    < 500 sd    '
;*********************************************************************************
b16:    cjne    A,#KlminL,b17
        call    zvyk
        mov     DPTR,#i500L
        call    zagr
        call    out_str2
b16_1:
        mov     codeH,#1
        mov     codeL,#0F4h
        call    NstL                
b16_2:  call    klav
        cjne    A,#Kl4,b16_3
        call    zvyk
        jmp     b16_1
b16_3:  cjne    A,#KlEsc,b16_2
        call    zvyk
        jmp     texRej
;______________________________________________________________________________________
;---------------------------------------------------------------------------------
;ШД сдвинуть на 200 шагов назад
i500P:  db     '    > 500 sd    '
;*********************************************************************************
b17:    cjne    A,#KlmaxL,b18
        call    zvyk
        mov     DPTR,#i500P
        call    zagr
        call    out_str2
b17_1:
        mov     codeH,#1
        mov     codeL,#0F4h
        call    NstP                
b17_2:  call    klav
        cjne    A,#Kl5,b17_3
        call    zvyk
        jmp     b17_1
b17_3:  cjne    A,#KlEsc,b17_2
        call    zvyk
        jmp     texRej
;______________________________________________________________________________________
iPoRep:  db  20h,0A8h,6Fh,0BEh,70h,61h,0B3h,0BAh,61h,20h,70h,65h,0BEh,65h,70h,61h
b18dop:	jmp	b19
b18:	cjne	A,#KlS,b18dop
	call	zvyk
        mov     DPTR,#iPoRep
        call    zagr
        call    out_str1

        mov     ADRh,#HIGH(KorRep)     ;
        mov     ADRl,#LOW(KorRep)
        call    readFM
        mov     A,DANl
	mov	codeL,A
	call	dopCod
	cjne	A,#50,b18_1
b18_1:	jc	b18_2
	mov	codeL,#0		

b18_2:	mov     DPTR,#iGACH     ;очистить индикаторные ячейки
        call    zagr
	mov	A,codeL			;вывод на индикацию поправки
	mov	R0,#ZN3
	jnb	ACC.7,b18_3
	mov	@R0,#2Dh
	call	dopCod
b18_3:	inc	R0
	mov	B,#10
	div	ab
        orl     A,#30h
        mov     @R0,A
        inc     R0
        orl     B,#30h
        mov     @R0,b
	call	out_str2

b18_4:	call	klav
        cjne    A,#Kl1,b18_5
        call    zvyk
	inc	codeL
	mov	A,codeL
	cjne	A,#50,b18_2
	call	zvyk
	call	zvyk
	call	zvyk
	dec	codeL
	jmp	b18_2
b18_5:  cjne    A,#Kl2,b18_6
        call    zvyk
	dec	codeL
	mov	A,codeL
	cjne	A,#206,b18_2
	call	zvyk
	call	zvyk
	call	zvyk
	inc	codeL
	jmp	b18_2
b18_6:	cjne	A,#KlEnter,b18_7
	call	zvyk
        mov     ADRh,#HIGH(KorRep)     ;
        mov     ADRl,#LOW(KorRep)
	mov	DANl,codeL
	call	wrFM	
	jmp	b18_2
b18_7:	cjne    A,#KlEsc,b18_2
        call    zvyk
        jmp     texRej

b19:	jmp     b1              ;texRej   




;Подпрограмма перевода дополнительного кода в обычный. Знак в sig = 1 если число отрицательное 
dopCod:	jnb	ACC.7,dopC_1
	setb	sig
	cpl	A
	inc	A
	jmp	dopC_2
dopC_1:	clr	sig
dopC_2:	ret





;****************************************************************************************************************
;****************************************************************************************************************
;****************************************************************************************************************
;****************************************************************************************************************
;****************************************************************************************************************
;Подпрограмма задержки с анализом нажатия клавиатуры
;-------------------------------------------------------------------------
ojid:
        mov     R5,#6Fh
        mov     R6,#0FFh
        mov     R7,#0FFh
oj1:    djnz    R7,oj1
;        cpl     P1.7
        call    stKey
        jnz     oj2
        djnz    R6,oj1
        djnz    R5,oj1
oj2:    ret
;_____________________________

;*************************************************************************
;Подпрограмма сравнения длины волны с числами 325<Wl<999
;Выход: B=0 - Wl<325;
;       B=1 - 325=<Wl=<999
;       B=2 - Wl>999
;*************************************************************************
srLAMB:
        mov     SFRPAGE,#0
        clr     TR2
        mov     MlSt,#1
        mov     MlMl,#45h
        mov     StSt,#3
        mov     StMl,#0E7h
        mov     ChSt,ModWlH
        mov     ChMl,ModWlL
        call    anSize
        setb    TR2
        mov     SFRPAGE,#0Fh
        ret
;*************************************************************************
;************************************************************************
;Подпрограмма перестройки шагового двигателя на нужную длину волны
;Исходные данные:
;TekWlH,TekWlL - текущая длина волны
;ModWlH,ModWlL - модифицируемая длина волны
;TekSdh,TekSdL - текущее положение ШД
;************************************************************************
prstr: 
	clr     c               ;определение направления перестройки
        mov     A,ModWlL	;путем вычитания из требуемой длины волны
        subb    A,TekWlL	;волны текущей
        mov     A,ModWlH
        subb    A,TekWlH
        mov     napr,C
        mov     BIN0,#0         ;занесение треб. волны в дв. ячейки
        mov     BIN1,ModWlH
        mov     BIN2,ModWlL
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal          ;перевод в плавающий формат по ADR0..ADR3
        call    wltoN           ;вычисление количества шагов ШД
        call    realIn          ;перевод в фиксиров. формат

;        mov     ModSdH,BIN1
;        mov     ModSdL,BIN2
        jb      napr,prstr1     ;вычисление количества шагов перестройки
        clr     C
        mov     A,BIN2          ;если требуемая волна больше текущей
        subb    A,TekSdL
        mov     codeL,A
        mov     A,BIN1
        subb    A,TekSdH
        mov     codeH,A
        jmp     prstr2
prstr1: clr     C               ;если требуемая волна меньше текущей
        mov     A,TekSdL
        subb    A,BIN2
        mov     codeL,A
        mov     A,TekSdH
        subb    A,BIN1
        mov     codeH,A
prstr2: jb      napr,prstr3
        call    NstP            ;перестройка ЩД
        jmp     prstr4
prstr3: call    NstL
prstr4: mov     TekSdH,BIN1     ;коррекция текущих шагов
        mov     TekSdL,BIN2
        mov     TekWlH,ModWlH   ;коррекция текущих длин волн
        mov     TekWlL,ModWlL
        ret

;*************************************************************************
;Подпрограмма индикации метода метода в зависимости от ячейки Metod
;вывод осуществляется с ячейки #ZN10
;*************************************************************************
indMet: mov     R1,#ZN10        ;в R1 занести яч. инд. в которую пишем
        mov     DPTR,#iMetod    ;в DPTR занести нач. адрес методов
        mov     R0,#Metod
        mov     A,@R0
        mov     B,#16           ;от prJ для высвечивания единиц измерения
        mul     AB
        add     A,DPL
        mov     DPL,A
        mov     A,B
        addc    A,DPH
        mov     DPH,A
        mov     R0,#5           ;смещение
met1:   mov     A,R0
        movc    A,@A+DPTR
        mov     @R1,A
        inc     R0
        inc     R1
        cjne    R1,#ZN10+5,met1
        ret




;***********************************************************
;*********************************************************************
;Подпрограмма вычисления количества шагов шагового двигателя в зависимости
;от длины волны. Исходное число длины волны находится по адресу:
;ADR0 - знак + порядок
;ADR1,ADR2,ADR3 - мл.,ср.,ст. байты мантиссы
;Результат там же.
;Алгоритм:
;N=100*arcsin(WL*6,1756*10(-4)) - при дроблении шагов на 2
;N=200*arcsin(WL*6,1756*10(-4)) - при дроблении шагов на 4
;*********************************************************************
wltoN:  mov     ADR4,#36h       ;занести во второй множитель число
        mov     ADR5,#6Bh       ;6,1756*10(-4) в формате с плавающей  было 6B
        mov     ADR6,#0FFh      ;запятой			      было E3 	
        mov     ADR7,#0A1h      ;				      было A1
        call    mul3            ;умножить на длину волны в нанометрах
        call    arcsin          ;вычислить арксинус выражения в скобках

        mov     ADR4,#4Eh       ;умножить на константу 100*180/3.14
        mov     ADR5,#85h      ;
        mov     ADR6,#0Fh       ;        ;2f - лучшее приближение
        mov     ADR7,#0B3h      ;
        call    mul3
        ret
;************************************************************
;N=K1*K*200/360*arcsin(WL*6,1756*10(-4)) - при дроблении шагов на 4
;K - ДРОБЛЕНИЕ ШАГА (4)
;K1 - ПЕРЕДАТОЧНОЕ ОТНОШЕНИЕ (90)
;200 - КОЛИЧЕСТВО ШАГОВ ШД НА ОБОРОТ
;6,1756*10(-4) = 1200/2/COS(A/2)
;1200 - КОЛИЧ. ШТРИХОВ У РЕШЕТКИ
;A/2 - УГОЛ ПАДЕНИЯ НА РЕШЕТКУ
;****************************************************************************

;*************************************************************************
;Подпрограмма вывода в ячейки BIN0 - знака,BIN1..BIN5 значения плотности числа находящегося в 
;первом слагаемом, в кодах индикатора 
;_________________________________________________________________________________________
;Общая часть для вывода плотностей
obch1:  call    realIn
        call    btod
        call    okrygl3
	
	mov	A,DES0
	jz	obch1_a
	jmp	obch1_5
obch1_a:
	mov	A,DES1
	jz	obch1_b
	jmp	obch1_5
obch1_b:
	
        jnb     F0,obch1_c      ;вывод знака в BIN0
        mov     BIN0,#2Dh
        jmp     obch1_d
obch1_c:  
        mov     BIN0,#20h
obch1_d:
	mov	A,DES2
	anl	A,#0F0h
	jz	obch1_1
	swap	A		;целая часть 4-х значная
	orl	A,#30h
                                 ;-
        mov     BIN1,A
;	inc	R1
	mov	A,DES2
	anl	A,#0Fh
	orl	A,#30h
;	mov	@R1,A
        mov     BIN2,A          ;-
;	inc	R1
	mov	A,DES3
	swap	A
	anl	A,#0Fh			
	orl	A,#30h
;	mov	@R1,A
        mov     BIN3,A          ;-
;	inc	R1
	mov	A,DES3
	anl	A,#0Fh
	orl	A,#30h
;	mov	@R1,A
        mov     BIN4,A          ;-
        mov     BIN5,#20h       ;-
	jmp	obch1_4
obch1_1:
	mov	A,DES2
	anl	A,#0Fh
	jz	obch1_2
	orl	A,#30h		;целая часть 3-х значная
;	mov	@R1,A
        mov     BIN1,A          ;-
;	inc	R1
	mov	A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
;	mov	@R1,A
        mov     BIN2,A          ;-
;	inc	R1
	mov	A,DES3	
	anl	A,#0Fh
	orl	A,#30h
;	mov	@R1,A
        mov     BIN3,A          ;-
;	inc	R1
	mov	A,#2Ch		; , - после третьего знака
;	mov	@R1,A
        mov     BIN4,A          ;-
	mov	A,DES4
	swap	A
	anl	A,#0Fh
	orl	A,#30h
        mov     BIN5,A          ;-
;	mov	@R1,A
	jmp	obch1_4
obch1_2:
	mov	A,DES3
	anl	A,#0F0h
	jz	obch1_3
	swap	A		;целая часть 2-х значная
	orl	A,#30h
;	mov	@R1,A
        mov     BIN1,A          ;-
;	inc	R1
	mov	A,DES3
	anl	A,#0Fh
	orl	A,#30h
;	mov	@R1,A
        mov     BIN2,A          ;-
;	inc	R1
	mov	A,#2Ch		; , - после второго знака
;	mov	@R1,A
        mov     BIN3,A          ;-
;	inc	R1
	mov	A,DES4
	swap	A
	anl	A,#0Fh			
	orl	A,#30h
;	mov	@R1,A
        mov     BIN4,A          ;-
;	inc	R1
	mov	A,DES4
	anl	A,#0Fh
	orl	A,#30h
;	mov	@R1,A
        mov     BIN5,A          ;-
	jmp	obch1_4
obch1_3:
	mov	A,DES3		;целая часть 1 значная
	anl	A,#0Fh
	orl	A,#30h
;	mov	@R1,A
        mov     BIN1,A          ;-
;	inc	R1
	mov	A,#2Ch		; , - после первого знака
;	mov	@R1,A
        mov     BIN2,A          ;-
;	inc	R1
	mov	A,DES4
	swap	A
	anl	A,#0Fh			
	orl	A,#30h
;	mov	@R1,A
        mov     BIN3,A          ;-
;	inc	R1
	mov	A,DES4
	anl	A,#0Fh
	orl	A,#30h
;	mov	@R1,A
        mov     BIN4,A          ;-
 ;       inc     R1
	mov	A,DES5
	swap	A
	anl	A,#0Fh			
	orl	A,#30h
;	mov	@R1,A
        mov     BIN5,A          ;-
obch1_4:
;        call    out_str2
        ret
obch1_5:
	mov	ERROR,#Err_CONCENT
	call	och
;        setb    konec
	ret


;*************************************************************************
;Подпрограмма вывода во вторую строку индикатора значения плотности, которая 
;находится в первом слагаемом. Значения плотностей заносятся в индикаторные ячейки
;начиная с ZN9 - знак,ZN10 ..ZN13. ;Незначащие нули спереди убираются.;
;Копия экрана создается в ячейках BIN0..BIN5
;_________________________________________________________________________________________
;Общая часть для вывода плотностей
obch2:  call    realIn
        call    btod
        call    okrygl3
	
	mov	A,DES0
	jz	obch2_a
	jmp	obch2_5
obch2_a:
	mov	A,DES1
	jz	obch2_b
	jmp	obch2_5
obch2_b:
	mov	R1,#ZN9         ;вывод знака в девятый разряд
        jnb     F0,obch2_c
        mov     @R1,#2Dh
        jmp     obch2_d
obch2_c:  
        mov     @R1,#20h
obch2_d:
        mov     BIN0,@R1
        inc     R1

	mov	A,DES2
	anl	A,#0F0h
	jz	obch2_1
	swap	A		;целая часть 4-х значная
	orl	A,#30h
	mov	@R1,A           ;-
        mov     BIN1,A
	inc	R1
	mov	A,DES2
	anl	A,#0Fh
	orl	A,#30h
	mov	@R1,A
        mov     BIN2,A          ;-
	inc	R1
	mov	A,DES3
	swap	A
	anl	A,#0Fh			
	orl	A,#30h
	mov	@R1,A
        mov     BIN3,A          ;-
	inc	R1
	mov	A,DES3
	anl	A,#0Fh
	orl	A,#30h
	mov	@R1,A
        mov     BIN4,A          ;-
        mov     BIN5,#20h       ;-
	jmp	obch2_4
obch2_1:
	mov	A,DES2
	anl	A,#0Fh
	jz	obch2_2
	orl	A,#30h		;целая часть 3-х значная
	mov	@R1,A
        mov     BIN1,A          ;-
	inc	R1
	mov	A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	mov	@R1,A
        mov     BIN2,A          ;-
	inc	R1
	mov	A,DES3	
	anl	A,#0Fh
	orl	A,#30h
	mov	@R1,A
        mov     BIN3,A          ;-
	inc	R1
	mov	A,#2Ch		; , - после третьего знака
	mov	@R1,A
        mov     BIN4,A          ;-
	mov	A,DES4
	swap	A
	anl	A,#0Fh
	orl	A,#30h
        mov     BIN5,A          ;-
	mov	@R1,A
	jmp	obch2_4
obch2_2:	
	mov	A,DES3
	anl	A,#0F0h
	jz	obch2_3
	swap	A		;целая часть 2-х значная
	orl	A,#30h
	mov	@R1,A
        mov     BIN1,A          ;-
	inc	R1
	mov	A,DES3
	anl	A,#0Fh
	orl	A,#30h
	mov	@R1,A
        mov     BIN2,A          ;-
	inc	R1
	mov	A,#2Ch		; , - после второго знака
	mov	@R1,A
        mov     BIN3,A          ;-
	inc	R1
	mov	A,DES4
	swap	A
	anl	A,#0Fh			
	orl	A,#30h
	mov	@R1,A
        mov     BIN4,A          ;-
	inc	R1
	mov	A,DES4
	anl	A,#0Fh
	orl	A,#30h
	mov	@R1,A
        mov     BIN5,A          ;-
	jmp	obch2_4
obch2_3:
	mov	A,DES3		;целая часть 1 значная
	anl	A,#0Fh
	orl	A,#30h
	mov	@R1,A
        mov     BIN1,A          ;-
	inc	R1
	mov	A,#2Ch		; , - после первого знака
	mov	@R1,A
        mov     BIN2,A          ;-
	inc	R1
	mov	A,DES4
	swap	A
	anl	A,#0Fh			
	orl	A,#30h
	mov	@R1,A
        mov     BIN3,A          ;-
	inc	R1
	mov	A,DES4
	anl	A,#0Fh
	orl	A,#30h
	mov	@R1,A
        mov     BIN4,A          ;-
        inc     R1
	mov	A,DES5
	swap	A
	anl	A,#0Fh			
	orl	A,#30h
	mov	@R1,A
        mov     BIN5,A          ;-
obch2_4:
        call    out_str2
        ret
obch2_5:
	mov	ERROR,#Err_CONCENT
	call	och
	ret


;**************************************************************
;*****************************************************************
och:    mov     A,ERROR
        cjne    A,#Err_CONCENT,och_2
        ret
och_2:
        mov	DPTR,#iError
	call	zagr
	mov	R0,#ZN12
	mov	A,ERROR
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	mov	@R0,A
	inc	R0
	mov	A,ERROR
	anl	A,#0Fh
	orl	A,#30h
	mov	@R0,A
	call	out_str1
        mov     SFRPAGE,#0h     ; включить таймер 2 
        setb    TR2             ; Timer 2 Control Register (включение)
	mov	SFRPAGE,#0Fh
och_1:	call	stKey
	jz	och_1
        call    zvyk
	mov	ERROR,#0
        setb    konec
        ret
;********************************************************
irDop1: jmp     ir9
irDop:  jmp     ir16
;*******************************************************************
;*******************************************************************
;Подпрограмма обработки прерывания по интерфейсу
;*******************************************************************
;*******************************************************************
iiIRPS:
       	push	ACC
	push	PSW
        push    0
        mov     SFRPAGE,#0
        jnb	RI0,irDop       ;флаг прерывания приемника
	clr	RI0
;__________________________________________

	mov	R0,SBUF0        ;-----------
        
        jb      bitKom5,irDop1
        jb      BitKomE,ir5

ir0:    cjne    R0,#0C0h,ir0a    ;команда С0
        jmp     ir0d
ir0a:   cjne    R0,#0C2h,ir0b
	setb	yskor
        jmp     ir0d
ir0b:   cjne    R0,#0C3h,ir1
	clr	yskor
        jmp     ir0d
ir0d:
        mov     SBUF0,#0C0H
;        call    delay1          ;-----------
        clr     TI0
        clr     IRP1
        mov     StRS,#0
;        clr     BUF
        clr     prDan2
        clr     bitKomE                 ;
        clr     bitKom5
        jmp     ir16             ;-----------
ir1:    cjne    R0,#0FH,ir2     ;команда 0F чтение АЦП
        setb    IRP1            ;-----------
        mov     StRS,#0
;        clr     BUF
        clr     prDan2
        clr     bitKomE                 ;
        clr     bitKom5
        mov     KOp,R0          
        jmp     ir16             ;-----------
ir2:    cjne    R0,#0EH,ir3     ;команда 0E
        setb    bitKomE         ;-----------
        jmp     ir16             ;-----------
ir3:    cjne    R0,#07H,ir16     ;КОМАНДА 07
ir3a:
        mov     KOp,R0
        setb    IRP1
        mov     StRS,#0
;        clr     BUF
        clr     prDan2
        clr     bitKomE                 ;
        clr     bitKom5
        jmp     ir16             ;-----------

ir4:    nop   
ir5:    cjne    R0,#4H,ir6      ;РЕПЕР
        setb    IRP1          
        setb    prDan2           
        mov     KOp,R0          
        jmp     ir16
ir6:    cjne    R0,#8H,ir7      ;ДЕКРЕМЕНТ волны
        setb    IRP1          
        setb    prDan2           
        mov     KOp,R0          
        jmp     ir16
ir7:    cjne    R0,#9H,ir8      ;ИНКРЕМЕНТ волны
        setb    IRP1          
        setb    prDan2           
        mov     KOp,R0          
        jmp     ir16
ir8:    cjne    R0,#5H,ir8a     ;УСТАНОВИТЬ длину волны или ПОЛУЧИТЬ длину волны
        setb    bitKom5
        mov     KOp,R0
        call    outL_tek
        mov     StRS,#1
        jmp     ir16
ir8a:   cjne    R0,#0Fh,ir16    ;ИЗМЕРИТЬ ТЕМНОВОЙ ТОК
        setb    KomandEF
        jmp     ir3a

ir9:    mov	A,StRS          ;анализ счетчика байт
;        cjne    A,#0,ir10
;        mov     KOp,R0
ir10:   cjne    A,#1,ir11
        mov     M1,R0
        cjne    R0,#07h,ir11
        jmp     ir3a

ir11:   cjne    A,#2,ir12
        mov     M2,R0
ir12:   cjne    A,#3,ir13
        mov     M3,R0
ir13:   cjne    A,#4,ir15
        mov     M4,R0
;ir14:   cjne    A,#5,ir15
        setb    IRP1            
        setb    prDan2           
        jmp     ir16             
ir15:   inc     StRS
ir16:   pop     0
	pop	PSW
	pop	ACC
ir17:   clr     RI0
        clr     TI0
        mov     SFRPAGE,#0Fh
        reti
;----------------------------------------------
;Задержка 1мс
delay1:	mov	R6,#150
del1_1:	mov	R7,#250
        djnz	R7,$
        djnz	R6,del1_1
        ret
;************************************************


komRS:  mov     A,KOp
        cjne    A,#04H,st2      ;ПОИСК ИСХОДНОЙ ВОЛНЫ
        call    reper1           ;найти исходн. точку  *
        mov     TekWlH,#1       ;устан. текущ. длину волны 325нм (145h)
        mov     TekWlL,#45h
        mov     codeH,#NulLinH  ;установить текущее положение шагов
        mov     codeL,#NulLinL
	call	NstP            ;выехать на 325 нм
	call 	obest           ;обесточить ШД
        mov     TekSdH,#NulLinH ;установить текущее положение шагов
        mov     TekSdL,#NulLinL
        mov     SFRPAGE,#0
        mov     SBUF0,#35h
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#32h
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#33h
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#30h
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0C0h
        call    delay1
        mov     SFRPAGE,#0Fh
        clr     bitKomE
st1a:   clr     IRP1
        mov     StRS,#0
        jmp     pv1251
st2:    cjne    A,#08h,st3      ;ДЕКРЕМЕНТ ВОЛНЫ
        mov     DPH,TekWlH      ;декремент через DPTR
        mov     DPL,TekWlL
        dec     DPL
        mov     A,DPL
        cjne    A,#0FFh,st2a
        dec     DPH
st2a:   mov     ModWlH,DPH      ;в ячейках ModWlH,ModWlL
        mov     ModWlL,DPL      ;декрементированая длина волны
        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,st2b
        call    prstr
st2b:   call    outL_tek
        clr     bitKomE
        jmp     st1a
st3:    cjne    A,#09h,st4      ;ИНКРЕМЕНТ ВОЛНЫ
        mov     DPH,TekWlH      ;декремент через DPTR
        mov     DPL,TekWlL
        inc     DPTR
        jmp     st2a
st4:    cjne    A,#5,st5        ;ЗАНЕСЕНИЕ ВОЛНЫ
        mov     A,M1
        call    pereKod
        mov     R6,A            ;сохранить старший байт волны в R6
        mov     A,M2
        call    pereKod
        swap    A
        mov     R7,A            ;сохранить среднюю тетраду волны в R7
        mov     A,M3
        call    pereKod
        orl     A,R7            ;
        mov     DES0,#0
        mov     DES1,#0
        mov     DES2,6
        mov     DES3,A
        call    p1016
        mov     ModWlH,BIN1     ;в ячейках ModWlH,ModWlL
        mov     ModWlL,BIN2   
        call    srLAMB          ;сравнить дл. волны с допустимой
        mov     A,B
        cjne    A,#1,st5
;        call    outL_tek
        call    prstr
        call    outL_tek
        clr     bitKomE
        clr     bitKom5
        jmp     st1a

st5:    cjne    A,#7,st6        ;Возврат текущей длины волны
        call    outL_tek
        clr     bitKomE
        clr     bitKom5
st5a:   jmp     st1a
;------------------------------------------------------------------------------------
st6:    cjne    A,#0Fh,st5a     ;ИЗМЕРЕНИЕ 
;        jmp     st6a
        jnb     KomandEF,st6a
        call    izmTemn
        clr     KomandEF
        jmp     st6b
st6a:   call    izmer
;        call    izmIK

st6b:   clr	IE.5
	mov     SFRPAGE,#0
        mov     SBUF0,#30h      ;передача ОК
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#30h
        call    delay1
        mov     A,I1ol
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1ol
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1om
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1om
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1oh
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1oh
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1

        mov     SFRPAGE,#0
        mov     SBUF0,#30h      ;передача ОК (темновой)
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#30h
        call    delay1
        mov     A,ItOl
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItOl
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItOm
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItOm
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItOh
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItOh
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        
        mov     SFRPAGE,#0
        mov     SBUF0,#30h      ;передача IK 
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#30h
        call    delay1
        mov     A,I1l
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1l
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1m
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1m
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1h
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,I1h
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1

        mov     SFRPAGE,#0
        mov     SBUF0,#30h      ;передача IК (темновой)
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#30h
        call    delay1
        mov     A,ItIl
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItIl
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItIm
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItIm
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItIh
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,ItIh
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        
        mov     SFRPAGE,#0
        mov     SBUF0,#0C0h
;        call    delay1        

        mov     SFRPAGE,#0Fh
        clr     bitKomE
        clr     bitKom5
	setb	IE.5
st7:    jmp     st1a  

;**********************************************************************
;Подпрограмма выдачи в интерфейс текущей длины волны
;**********************************************************************
outL_tek:
        mov     BIN0,#0
        mov     BIN1,TekWlH
        mov     BIN2,TekWlL
        call    p1610
        mov     A,DES3
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0h
        mov     SBUF0,A
        call    delay1
        mov     A,DES3
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     A,DES2
        anl     A,#0Fh
        orl     A,#30h
        mov     SFRPAGE,#0
        mov     SBUF0,A
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#30h
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0C0h
        call    delay1
        mov     SFRPAGE,#0Fh
        ret


;**************************************************************
;Подпрограмма перекодировки значений клавиш в десятичные цифры
;**************************************************************
pereKod:
        cjne    A,#0Ch,prK_1    ; 0
        mov     A,#0
        ret
prK_1:  cjne    A,#08h,prK_2    ; 1
        mov     A,#1
        ret
prK_2:  cjne    A,#09h,prK_3    ; 2
        mov     A,#2
        ret
prK_3:  cjne    A,#0Ah,prK_4    ; 3
        mov     A,#3
        ret
prK_4:  cjne    A,#00h,prK_5    ; 4
        mov     A,#4
        ret
prK_5:  cjne    A,#01h,prK_6    ; 5
        mov     A,#5
        ret
prK_6:  cjne    A,#02h,prK_7    ; 6
        mov     A,#6
        ret
prK_7:  cjne    A,#04h,prK_8    ; 7
        mov     A,#7
        ret
prK_8:  cjne    A,#05h,prK_9    ; 8
        mov     A,#8
        ret
prK_9:  cjne    A,#06h,prK_10   ; 9
        mov     A,#9
        ret
prK_10: mov     A,#0
        ret


;**********************************************************************
;;---------------------------------------------

;***************************************************************
;***************************************************************
;П О Д П Р О Г Р А М М Ы     Д Л Я      D S 1 6 2 4
;***************************************************************
;УСТАHОВКА РЕГИСТРА СТАТУСА HА ОДHОКРАТHОЕ ПРЕОБРАЗОВАHИЕ ТЕМПЕРАТУРЫ
;После посылки кода команды 0ACh идет посылка кода 0CAh
;***************************************************************
wrStat: mov     StErr,#20
        setb    DS1624    
        clr     DS1307 
        clr     FM2464
        setb    Command 
        clr     prAdr 
        setb    prDan 
        clr     Adr2B 
        clr     Dan2B 
        clr     Com2B 
        clr     Strt_Conv  
        setb    Wr_St 
        clr     Epr_Ds  
        clr     rdTemp 
        clr     Byte_Posl 
        mov     DANl,#0CAh
        call    SEND
        ret
;*****************************************
;HАЧАЛО ПРЕОБРАЗОВАHИЯ ТЕМПЕРАТУРЫ
;Идет посылка кода 0EEh в подпрограмме прерывания
;*****************************************
StartConvT:
        mov     StErr,#20
        setb    DS1624    
        clr     DS1307 
        clr     FM2464
        setb    Command 
        clr     prAdr 
        clr     prDan 
        clr     Adr2B 
        clr     Dan2B 
        clr     Com2B 
        setb    Strt_Conv  
        clr     Wr_St 
        clr     Epr_Ds  
        clr     rdTemp 
        clr     Byte_Posl 
        call    SEND
        ret
;********************************************************
;ПОДПРОГРАММА ЧТЕHИЯ ТЕМПЕРАТУРЫ
;После посылки команды на чтение температуры 0AAh
;идет считывание температуры в ячейку DANh - целая часть
;и в ячейку DANl - дробная часть
;********************************************************
readTemp:
        mov     StErr,#20
        setb    RorW
        setb    DS1624    
        clr     DS1307 
        clr     FM2464
        setb    Command 
        clr     prAdr 
        clr     prDan 
        clr     Adr2B 
        setb    Dan2B 
        setb    Com2B 
        clr     Strt_Conv  
        clr     Wr_St 
        clr     Epr_Ds  
        setb    rdTemp 
        clr     Byte_Posl 
        call    RECEIVE
        ret
;***************************************************************
;***************************************************************
;П О Д П Р О Г Р А М М Ы     Д Л Я      F M 2 4 C 6 4
;***************************************************************
;*******************************************************
;ПОДПРОГРАММА ЧТЕHИЯ FM24C64
;Читается один байт данных в ячейку DANl 
;из памяти с адресом находящимся в ADRh,ADRl
;*******************************************************
readFm:
        mov     StErr,#20
        setb    RorW
        clr     DS1624    
        clr     DS1307 
        setb    FM2464
        clr     Command 
        setb    prAdr 
        setb    prDan 
        setb    Adr2B 
        clr     Dan2B 
        clr     Com2B 
        clr     Strt_Conv  
        clr     Wr_St 
        clr     Epr_Ds  
        clr     rdTemp 
        clr     Byte_Posl 
        call    RECEIVE
        ret
;************************************************************
;Подпрограмма чтения из DS1307 и EEPROM
;************************************************************
;rdEE:   
;        clr     DS1624    
;        clr     DS1307 
;        setb    FM2464
;        clr     Command 
;        setb    prAdr 
;        clr     prDan 
;        setb    Adr2B 
;        clr     Dan2B 
;        clr     Com2B 
;        clr     Strt_Conv  
;        clr     Wr_St 
;        clr     Epr_Ds  
;        clr     rdTemp 
;        clr     Byte_Posl 
;        call    RECEIVE
;        ret


;*******************************************************
;ПОДПРОГРАММА записи в FM24C64
;Записывается один байт данных из ячейки DANl 
;в память с адресом находящимся в ADRh,ADRl
;*******************************************************
wrFm:
        mov     StErr,#20
        clr     RorW
        clr     DS1624    
        clr     DS1307 
        setb    FM2464
        clr     Command 
        setb    prAdr 
        setb    prDan 
        setb    Adr2B 
        clr     Dan2B 
        clr     Com2B 
        clr     Strt_Conv  
        clr     Wr_St 
        clr     Epr_Ds  
        clr     rdTemp 
        clr     Byte_Posl 
        call    SEND
        mov     R5,#10
        mov     R6,#0FFh
        mov     R7,#0FFh
wrFM_1: djnz    R7,wrFM_1
        djnz    R6,wrFM_1
        djnz    R5,wrFM_1
        ret

;************************************************************
;Подпрограмма записи в DS1307 и  EEPROM
;************************************************************
;wrEE:
;        clr     DS1624    
;        clr     DS1307 
;        setb    FM2464
;        clr     Command 
;        setb    prAdr 
;        setb    prDan 
;        setb    Adr2B 
;        clr     Dan2B 
;        clr     Com2B 
;        clr     Strt_Conv  
;        clr     Wr_St 
;        clr     Epr_Ds  
;        clr     rdTemp 
;        clr     Byte_Posl 
;        call    SEND
;        ret


;**************************************************************************
;#######################################################
;************************************************************
;Подпрограммы обслуживания DS1307 
;Чтение байта данных в DANl из микросхемы по адресу в ADRl
;************************************************************
;ПОДПРОГРАММА ЧТЕHИЯ ЧАСОВ
rdDS: 
        mov     StErr,#20
        clr     DS1624    
        setb    DS1307 
        clr     FM2464
        clr     Command 
        setb    prAdr 
        clr     prDan 
        clr     Adr2B 
        clr     Dan2B 
        clr     Com2B 
        clr     Strt_Conv  
        clr     Wr_St
        clr     Epr_Ds  
        clr     rdTemp 
        clr     Byte_Posl 
;        call    SEND
;        setb    RorW  
;        clr     DS1624    
;        setb    DS1307 
;        clr     FM2464
;        clr     Command 
;        clr     prAdr 
;        clr     prDan 
;        clr     Adr2B 
;        clr     Dan2B 
;        clr     Com2B 
;        clr     Strt_Conv  
;        clr     Wr_St
;        clr     Epr_Ds  
;        clr     rdTemp 
;        clr     Byte_Posl 
        call    RECEIVE
        ret

;**********************************************************************
;ПОДПРОГРАММА ЗАПИСИ В ЧАСЫ
;Подпрограмма записи данных в DANl по адресу в ADRl
;______________________________________________________________________
wrDS:   
        mov     StErr,#20
        clr     DS1624    
        setb    DS1307 
        clr     FM2464
        clr     Command 
        setb    prAdr 
        setb    prDan 
        clr     Adr2B 
        clr     Dan2B 
        clr     Com2B 
        clr     Strt_Conv  
        clr     Wr_St 
        clr     Epr_Ds  
        clr     rdTemp 
        clr     Byte_Posl 
        call    SEND
        ret
;************************************************************
;-------------------------------------------------------------------------------------
; ПОДПРОГРАММЫ ДЛЯ I2C ШИНЫ
;-------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------
; Подпрограмма SEND . Предполагается, что адрес и данные загружены в сответствующие
; ячейки памяти. Подпрограмма ждет освобождения шины и передает содержимое (DANh),DANl
; в линию по адресу указанному в (ADRh), ADRl
SEND:
        mov     SFRPAGE,#0
	push 	ACC 		; Сохранить ACC
	jb 	SM_BUSY, $ 	; Подождать освобождения шины	
	clr 	RorW 		; RorW = 0 (ЗАПИСЬ)
	setb 	SM_BUSY 	; Занять SMBus				
	setb 	STA 		; Инициировать передачу
	jb 	SM_BUSY, $ 	; Дождаться окончания передачи	
	pop 	ACC 		; Восстановить аккумулятор
        mov     SFRPAGE,#0Fh
	ret
;-------------------------------------------------------------------------------------
; Подпрограмма RECEIVE. 
RECEIVE:
        mov     SFRPAGE,#0
	push 	ACC 		; Сохранить аккумулятор в стеке
	jb 	SM_BUSY, $ 	; Подождать освобождения шины	
	setb 	RorW 		; RorW = 1 (ЧТЕНИЕ)
	setb 	SM_BUSY 	; Занять SMBus				
	setb 	STA 		; Инициировать передачу
	jb 	SM_BUSY, $ 	; Дождаться окончания передачи	
	pop 	ACC 	       	; Восстановить аккумулятор
        mov     SFRPAGE,#0Fh
	ret
;-------------------------------------------------------------------------------------
;**************************************************************************
;-------------------------------------------------------------------------------------
;ПОДПРОГРАММЫ обработки прерываний I2C шины
;**************************************************************************
; SMBus ISR
SMBus_ISR:
        mov     SFRPAGE,#0

        push    0
        mov     R0,#spSmBus
        mov     @R0,PSW
        inc     R0
        mov     @R0,A
        inc     R0
        mov     @R0,DPH
        inc     R0
        mov     @R0,DPL

	mov 	A, SMB0STA 	; Загрузить в аккум. байт состояния шины.
				; State corresponds to the address offset
				; for each state execution
	anl 	A, #7Fh 	; Mask out upper bit, since any states that
				; set this bit are not defined in this code.
	mov 	DPTR, #SMB_STATE_TABLE 	; Point DPTR to the beginning of the state
				; table
	jmp 	@A+DPTR 	; Jump to the current state
; Таблица отработки состояний шины -----------------------------------------------
SMB_STATE_TABLE:

; SMB_BUS_ERROR						00h
; СОСТОЯНИЕ: 00h (ОШИБКА ШИНЫ)
; ДЕЙСТВИЕ:  Сбросить шину установкой бита STO (СТОП)
	org 	SMB_STATE_TABLE + SMB_BUS_ERROR
        jmp     s20
;________________________________________________________________________________
; SMB_START						08h
; СОСТОЯНИЕ: 08h  Ведущий передатчик/приемник: состояние START передано.
; ДЕЙСТВИЕ:  Передача адреса + Бит R/W который будет ноль (W) потому что будет запись адреса. Прием ACK.
	org 	SMB_STATE_TABLE + SMB_START
        jmp     s8
;_________________________________________________________________________________
; SMB_RP_START						10h
; СОСТОЯНИЕ: 10h Ведущий передатчик/приемник: Повторена передача состояния  START 
; 	     Такое состояние может быть только при чтении из памяти, когда после передачи 
; 	     адреса второй раз передается состояние СТАРТ.
; ДЕЙСТВИЕ:   Передача SLA+R/W. Принять ACK.
	org 	SMB_STATE_TABLE + SMB_RP_START
        jmp     s10
;__________________________________________________________________________________
; SMB_MTADDACK						18h
; СОСТОЯНИЕ: 18h Ведущий передатчик: Ведомый адрес + WRITE передан. ACK принят. Предыдущее состояние 
;		было 08h или 10h
; ДЕЙСТВИЕ:  Передается первый байт данных, принимается ACK.
	org 	SMB_STATE_TABLE + SMB_MTADDACK
        jmp     s18
;___________________________________________________________________________________        
; SMB_MTADDNACK						20h
; СОСТОЯНИЕ: 20h Ведущий передатчик: Slave address + WRITE передано, принято "нет подтверждения".
; ДЕЙСТВИЕ:  Послать СТОП и повторить передачу снова с условия СТАРТ.
	org 	SMB_STATE_TABLE + SMB_MTADDNACK
        jmp     s20
;___________________________________________________________________________________
; SMB_MTDBACK						28h
; СОСТОЯНИЕ: Ведущий передатчик: Данные переданы. ACK принят.
; ДЕЙСТВИЕ:  Это состояние используется в обоих операциях чтения и записи.
; Анализируется BYTE_SENT; если 1, посылается адрес памяти. Иначе передаются данные и условие СТОП
	org 	SMB_STATE_TABLE + SMB_MTDBACK
        jmp     s18
;____________________________________________________________________________________
; SMB_MTDBNACK						30h
; СОСТОЯНИЕ: 30h Ведущий передатчик: Данные переданы. NACK принят.
; ДЕЙСТВИЕ:  Послать СТОП и повторить передачу снова с условия СТАРТ.
	org 	SMB_STATE_TABLE + SMB_MTDBNACK
        jmp     s20
;____________________________________________________________________________________
; SMB_MTARBLOST						38h
; СОСТОЯНИЕ: 38h Ведущий передатчик: Арбитраж потерян.
; ДЕЙСТВИЕ:  Послать СТОП и повторить передачу снова с условия СТАРТ
	org 	SMB_STATE_TABLE + SMB_MTARBLOST
        jmp     s20
;_____________________________________________________________________________________
; SMB_MRADDACK						40h
; СОСТОЯНИЕ: 40h Ведущий приемник: Ведомый адрес + READ переданы. ACK принят.
	org 	SMB_STATE_TABLE + SMB_MRADDACK
        jmp     s40
;_____________________________________________________________________________________
; SMB_MRADDNACK						48h
; СОСТОЯНИЕ: 48h Ведущий приемник: Ведомый адрес + READ переданы. NACK принят.
	org 	SMB_STATE_TABLE + SMB_MRADDNACK
        jmp     s20
;_____________________________________________________________________________________
; SMB_MRDBACK						50h
; СОСТОЯНИЕ: 50h Ведущий приемник: Байт данных принят. ACK передан.
	org 	SMB_STATE_TABLE + SMB_MRDBACK
        jmp     s58
;_____________________________________________________________________________________
; SMB_MRDBNACK						58h
; СОСТОЯНИЕ: 58h Ведущий приемник: байт данных принят. NACK передан.
	org 	SMB_STATE_TABLE + SMB_MRDBNACK
        jmp     s58
;_____________________________________________________________________________________
;Выход из прерывания
;---------------------------------------------------------------------------------
; SMBus ISR exit.
SMB_ISR_END:
	clr     SI				;обнулить флаг прерываний
        mov     R0,#spSmBus
        mov     PSW,@R0
        inc     R0
        mov     A,@R0
        inc     R0
        mov     DPH,@R0
        inc     R0
        mov     DPL,@R0
        pop     0

        mov     SFRPAGE,#0Fh
	reti

;*************************************************************************
;*************************************************************************

s8:
;        jb      RorW,s10
        jnb     DS1624,s8_1
        mov     SMB0DAT,#DS1624W
        jmp     s8_3
s8_1:   jnb     DS1307,s8_2
        mov     SMB0DAT,#DS1307W
        jmp     s8_3
s8_2:   jnb     FM2464,s8_4
        mov     SMB0DAT,#FM2464W
s8_3:	clr 	STA 				; программная очистка бита START
	jmp 	SMB_ISR_END 			; выход
s8_4:   mov     ERROR,#Err_ADRI2C                      ;ОШИБКА АДРЕСА
        clr     STA
        setb    STO
	jmp 	SMB_ISR_END 			; выход
;***************************************************************************
s10:    jnb     DS1624,s10_1
        mov     SMB0DAT,#DS1624R 
        jmp     s10_3
s10_1:  jnb     DS1307,s10_2
        mov     SMB0DAT,#DS1307R 
        jmp     s10_3
s10_2:  jnb     FM2464,s10_4
        mov     SMB0DAT,#FM2464R
s10_3:	clr 	STA 				; программная очистка бита START
	jmp 	SMB_ISR_END 			; выход
s10_4:  mov     ERROR,#Err_ADRI2C                      ;ОШИБКА АДРЕСА
        clr     STA
        setb    STO
	jmp 	SMB_ISR_END    			; выход

;***************************************************************************
sz18_1: jmp     sc18_1
;__________________________________________
s18:    jb      Byte_Posl,sz18_1
        jnb     Command,sa18_1
;Отработка команд для DS1624        
        jnb     Strt_Conv,s18_1         ;Посылка команды начала преобразования 
        mov     SMB0DAT,#0EEh
        setb    Byte_Posl
        clr     Command
	jmp 	SMB_ISR_END
s18_1:
        jnb     Wr_St,s18_2             ;Установка регистра статуса на однократн. преобр. температ. 
        mov     SMB0DAT,#0ACh
;        mov     DANl,#0CAh
;        clr     prAdr
;        clr     RorW
;        clr     Dan2B
        setb    prDan
        clr     Command
	jmp 	SMB_ISR_END
s18_2:  
        jnb     Epr_Ds,s18_3            ;Посылка команды на обращение к памяти DS1624
        mov     SMB0DAT,#17h
        clr     Command
        setb    prAdr
        clr     Adr2B
        jmp     SMB_ISR_END 
s18_3:
        jnb     Com2B,s18_3a
        jnb     rdTemp,s18_4            ;Посылка команды на чтение температуры
        mov     SMB0DAT,#0AAh
        clr     Com2B
        jmp     SMB_ISR_END
s18_3a: 
        clr     Command 
        clr     prAdr
        setb    prDan
        setb    Dan2B
        setb    STA                     ;и после ее условие СТАРТ
        setb    RorW
        jmp     SMB_ISR_END              
                
s18_4:  mov     ERROR,#Err_ADRI2C                      ;
        clr     STA
        setb    STO
	jmp 	SMB_ISR_END 			; выход
;***************************************************************************
                              
;------------------------------------------------------------------------------------------
sa18_1: jnb     prAdr,sb18_1
        jnb     Adr2B,sa18_2            
        mov     SMB0DAT,ADRh            ;Если адрес двухбайтный то посылка старшего байта адреса
        clr     ADR2B
        jmp     SMB_ISR_END 
sa18_2: mov     SMB0DAT,ADRl            ;Посылка младшего байта адреса
        clr     prAdr
;        jb      prDan,sa18_3
;        setb    Byte_Posl
sa18_3: jmp     SMB_ISR_END
;------------------------------------------------------------------------------------------
sb18_1: jnb     RorW,sb18_1a
        setb 	STA
        clr     RorW
	jmp 	SMB_ISR_END 
sb18_1a:        
        jnb     prDan,sc18_1
        jnb     Dan2B,sb18_2            
        mov     SMB0DAT,DANh            ;Если адрес двухбайтный то посылка старшего байта данных
        clr     Dan2B
        jmp     SMB_ISR_END 
sb18_2: mov     SMB0DAT,DANl            ;Посылка младшего байта данных
        clr     prDan
        setb    Byte_Posl
sb18_3: jmp     SMB_ISR_END
;------------------------------------------------------------------------------------------
sc18_1: setb 	STO 			; Условие STOP 
	clr 	SM_BUSY 		; Освободить SMBus
	jmp 	SMB_ISR_END 		; 
;******************************************************************************************
s20:    djnz    StErr,s20_1
        mov     ERROR,#Err_CIKL
        setb 	STO
        clr     SM_BUSY
	jmp 	SMB_ISR_END
s20_1:  setb 	STO
	setb 	STA
	jmp 	SMB_ISR_END
;******************************************************************************************
s40:    jnb     Dan2B,s40_1      
        setb    AA
        jmp     SMB_ISR_END
s40_1:	clr 	AA              ; NACK sent on acknowledge cycle
	jmp 	SMB_ISR_END
;*******************************************************************************
s58:    jnb     Dan2B,s58_1
        mov     DANh,SMB0DAT
        clr     Dan2B
        clr     AA
        jmp     SMB_ISR_END
s58_1:	mov 	DANl, SMB0DAT
	setb 	STO
	setb 	AA 				; Set AA for next transfer
	clr 	SM_BUSY
	jmp 	SMB_ISR_END
;*******************************************************************************************
tm2:
;        jnb     prTrst,tm2_4
;        push    ACC
        push    0               ;сохранение параметров из-за переполнения стека
        mov     R0,#spTm2
        mov     @R0,A
        inc     R0
        mov     @R0,B
        inc     R0
        mov     @R0,PSW
        inc     R0
        mov     @R0,DPH
        inc     R0
        mov     @R0,DPL

;        push    B
;        push    PSW
;        push    DPH
;        push    DPL
;        anl     EIP1,#11111101b

        mov     R0,#StTm2
        mov     A,@R0
        cjne    A,#15,tm2_3
;        clr     A
        mov     @R0,#0
	jb 	SM_BUSY,$ 	;Дождаться освобождения шины	

        call    readTemp        ;иначе читаем реальную температуру кюветного
                                ;отделения в DANh,DANl
        setb    prSmT
        mov     ChSt,DANh
        mov     A,DANl
        anl     A,#0F0H
        swap    A
        call    drob            ;в ACC. двоично десятичная дробь
        mov     ChMl,a
        call    temp37
        call    anSize
        mov     A,B
        cjne    A,#0,tm2_2
        mov     SFRPAGE,#0Fh
        setb    trstat          ;включить термостат
tm2_1:  nop

tm2_1a: 

        mov     SFRPAGE,#0
        clr     TF2
        mov     R0,#spTm2       ;восстановление регистров
        mov     A,@R0
        inc     R0
        mov     B,@R0
        inc     R0
        mov     PSW,@R0
        inc     R0
        mov     DPH,@R0
        inc     R0
        mov     DPL,@R0
        pop     0
tm2_1b: mov     SFRPAGE,#0Fh
        reti
tm2_2:  mov     SFRPAGE,#0Fh
        clr     trstat
        jmp     tm2_1
tm2_3:
        inc     A
        mov     @R0,A
        jmp     tm2_1a

;tm2_4:  clr     trstat
;        mov     SFRPAGE,#0Fh
;        reti
;**********************************************************************
drob:   inc     A
        movc    A,@A+PC
        ret
  DB    00H,06H,12H,18H,25H,31H,37H,44H
  DB    50H,56H,62H,68H,75H,81H,87H,94H
;**********************************************************************
;Подпрограмма задания температуры 37 градусов
;**********************************************************************
;temp37:
;        mov     StSt,#37        
;        mov     MlSt,#36
;        mov     MlMl,#90H
;        mov     StMl,#10H
;        ret
;Подпрограмма для занесения допуска в ячейки температуры
temp37:
        mov     SFRPAGE,#0
        mov     EMI0CN,#5
        mov     R0,#TempTrH
        movx    A,@R0

        mov     STST,A          ;сохранение
        mov     MLST,A

        mov     EMI0CN,#5
        mov     R0,#TempTrL
        movx    A,@R0

        cjne    A,#0,znn1
        dec     MLST
        mov     MLML,#90H
        mov     STML,#10H
        jmp     znn3
znn1:   cjne    A,#9H,znn2
        inc     STST
        mov     MLML,#80H
        mov     STML,#0
        jmp     znn3
znn2:   add     A,#1H
        swap    A
        mov     STML,A
        swap    A
        clr     c
        subb    A,#2H
        swap    A
        mov     MLML,A
znn3:   ret

;**********************************************************************
;Подпрограмма очистки программ из памяти
;**********************************************************************
ohistka:
        mov     NP,#0           ;
ohist_1:
        mov     A,NP
        mov     B,#32
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        mov     DANl,#0
        call    wrFM
        inc     NP
        mov     A,NP
        cjne    A,#100,ohist_1
        ret
;*********************************************************************
;Обнуление программ
;*********************************************************************
obnulPrg:
        mov     DPTR,#iObnPrg    ;в первой строке 'Обнуление программ'
        call    zagr
        call    out_str1
        mov     DPTR,#iVvKod    ;во второй строке 'Введите код'
        call    zagr
        call    out_str2
        call    klav            ;ввод первой цифры
        mov     BIN0,A
        call    zvyk
        call    klav            ;ввод второй цифры
        mov     BIN1,A
        call    zvyk
        call    klav            ;ввод третьей цифры
        mov     BIN2,A
        call    zvyk
        call    klav            ;ввод четвертой цифры
        mov     BIN3,A
        call    zvyk
        mov     A,BIN0          ;проверка первой цифры
        cjne    A,#1,obPrg_1    ;1         
        mov     A,BIN1          ;проверка второй цифры
        cjne    A,#9,obPrg_1    ;9
        mov     A,BIN2          ;проверка третьей цифры
        cjne    A,#5,obPrg_1    ;5
        mov     A,BIN3          ;проверка четвертой цифры
        cjne    A,#8,obPrg_1    ;8
        mov     DPTR,#iViYv     ;вывод сообщения 'Вы уверены'
        call    zagr
        call    out_str2
        call    klav
        cjne    A,#KlEnter,obPrg_1      ;если клавиша Enter то очистка 
        call    zvyk
        call    ohistka         ;иначе выход из подпрограммы
obPrg_1:
        ret
;**********************************************************************
;Подпрограмма включения/выключения термостата
;**********************************************************************
vvTer:  jnb     prTrst,vvTer_3
        mov     DPTR,#iTVkl     ;если бит prTrst то высветить
        call    zagr            ;Т-СТАТ ВКЛЮЧЕН
        call    out_str1        ;
        mov     DPTR,#iVikl     ;ВЫКЛЮЧИТЬ ?
        call    zagr
        call    out_str2
vvTer_1:
        call    klav            ;анализ клавиш
        cjne    A,#KlEsc,vvTer_1a
        call    zvyk
        setb    konec
        ret
vvTer_1a:
        cjne    A,#KlEnter,vvTer_2
        call    zvyk
        clr     IE.5
        clr     prTrst          ;клавиша ENTER
        clr     trstat          ;выключить термостат
        ret
vvTer_2:
        cjne    A,#KlNiz,vvTer_1
        call    zvyk
        ret
vvTer_3: 
        mov     DPTR,#iTVikl    ;если нет бита prTrst то высветить
        call    zagr            ;Т-СТАТ ВЫКЛЮЧЕН
        call    out_str1        ;
        mov     DPTR,#iVkl      ;ВКЛЮЧИТЬ ?
        call    zagr
        call    out_str2
vvTer_4:
        call    klav            ;анализ клавиш
        cjne    A,#KlEsc,vvTer_4a
        call    zvyk
        setb    konec
        ret
vvTer_4a:
        cjne    A,#KlEnter,vvTer_5
        call    zvyk
        setb    prTrst          ;клавиша ENTER
        setb    IE.5
        ret
vvTer_5:
        cjne    A,#KlNiz,vvTer_1
        call    zvyk            ;клавиша ВНИЗ
        ret
;***************************************************************************************
;***************************************************************************************
;ПОДПРОГРАММЫ ПЛАВАЮЩЕЙ АРИФМЕТИКИ
;***************************************************************************************
;***************************************************************************************
;***************************************************************************************
;***********************************************************
;подпрограмма вычисления плотности по формуле:
;t=(Iизм.-Iti)/(Izer.-Iti)*(Iоп.zer-Itоп)/(Iоп.-Itоп).
;Значение плотности получается на месте первого слагаемого.
;************************************************************
tay:    
	clr	C
	mov	A,Izl		;вычитание  из Izer  Iti
	subb	A,ItIl
	mov	BIN2,A	
	mov	A,Izm
	subb	A,ItIm
	mov	BIN1,A	
	mov	A,Izh
	subb	A,ItIh
	mov	BIN0,A	
	jnc	tay_1		;если число отрицат. то делаем его 0
	mov	BIN0,#0
	mov	BIN1,#0
	mov	BIN2,#0

tay_1:	clr     F0              ;перевод сигнала (Izer.-Iti) в
;        mov     BIN0,Izh        ;плавающий формат
;        mov     BIN1,Izm
;        mov     BIN2,Izl
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal
        call    mv4_0           ;сохранение (Izer.-Iti) во втором слаг.

	clr	C
	mov	A,I1ol		;вычитание  из Iоп  Itоп
	subb	A,ItOl
	mov	BIN2,A	
	mov	A,I1om
	subb	A,ItOm
	mov	BIN1,A	
	mov	A,I1oh
	subb	A,ItOh
	mov	BIN0,A	
	jnc	tay_2		;если число отрицат. то делаем его 0
	mov	BIN0,#0
	mov	BIN1,#0
	mov	BIN2,#0

tay_2:  clr     F0              ;перевод сигнала  (Ioп.-Itоп) в
;        mov     BIN0,I1oh       ;плавающий формат
;        mov     BIN1,I1om
;        mov     BIN2,I1ol
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal
        call    mul3            ;(Ioп.-Itoп)*(Izer.-Iti)
        call    mv4_0   ;сохранение (Ioп.-Itoп)*(Izer.-Iti) во втором слаг.


	clr	C
	mov	A,I1l		;вычитание  из Iизм  Iti
	subb	A,ItIl
	mov	BIN2,A	
	mov	A,I1m
	subb	A,ItIm
	mov	BIN1,A	
	mov	A,I1h
	subb	A,ItIh
	mov	BIN0,A	
	jnc	tay_3		;если число отрицат. то делаем его 0
	mov	BIN0,#0
	mov	BIN1,#0
	mov	BIN2,#0


tay_3:  clr     F0              ;перевод сигнала   (Iизм.-Iti) в
;        mov     BIN0,I1h        ;плавающий формат
;        mov     BIN1,I1m
;        mov     BIN2,I1l
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal
        call    div3            ;(Iизм.-It)/(Ioп.-Itoп)*(Izer.-Iti)
        call    mv4_0   ;сохранение (Iизм.-It)/(Ioп.-Itoп)*(Izer.-Iti)


	clr	C
	mov	A,Iozl		;вычитание  из Iоп.zer   Itоп
	subb	A,ItOl
	mov	BIN2,A	
	mov	A,Iozm
	subb	A,ItOm
	mov	BIN1,A	
	mov	A,Iozh
	subb	A,ItOh
	mov	BIN0,A	
	jnc	tay_4		;если число отрицат. то делаем его 0
	mov	BIN0,#0
	mov	BIN1,#0
	mov	BIN2,#0

tay_4:  clr     F0              ;перевод сигнала   (Izer.-It) в
;        mov     BIN0,Iozh       ;плавающий формат
;        mov     BIN1,Iozm
;        mov     BIN2,Iozl
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal
        call    mul3            ;(Iизм.-It)*(Izok.-It)/(Ioп.-Itoп)*(Izer.-Iti)
        ret

;*********************************************************
;Подпрограмма вычисления десятичного логарифма. Исходное число
;находится в первом слагаемом. Результат там же.
;Исходное число:
;ADR0 - знак + порядок
;ADR1,ADR2,ADR3 - мл.,ср.,ст. байты мантиссы
;Результат там же.
;Алгоритм:
;lg(x)=0,868589*((x-1)/(x+1)+(((x-1)/(x+1))**3)/3+(((x-1)/(x+1))**5)/5...
;Т.к. для больших чисел требуется брать очень много членов разложения
;то вначале вычисляется целая часть путем последовательного деления на 10
;до получения числа < 10 и накопления суммы количества делений
;и сохранения ее в стеке
;*********************************************************
lg:
        mov     ADR12,#0        ;в ADR12 будет сформирована целая часть

lg1:    mov     A,ADR0          ;СРАВHЕHИЕ ПОРЯДКА ЧИСЛА С ПОРЯДКОМ 10
        anl     A,#7Fh          ;убрать знаковый разряд
        cjne    A,#44h,lg2      ;сравнить порядок
        jmp     lg3
lg2:    jnc     lg6             ;число больше, значит делим
        jmp     lg7
lg3:    mov     A,ADR3          ;сравниваем старшую цифру
        cjne    A,#0A0h,lg4
        jmp     lg5
lg4:    jnc     lg6             ;число больше, значит делим
        jmp     lg7
lg5:    mov     A,ADR2
        jnz     lg6
        mov     A,ADR3
        jnz     lg6
        jmp     lg7

lg6:    mov     ADR4,#44h       ;в делитель занести число 10
        mov     ADR5,#0
        mov     ADR6,#0
        mov     ADR7,#0A0h
        call    div3            ;деление на 10
        inc     ADR12           ;увеличение счетчика
        jmp     lg1

lg7:    push    ADR12           ;(васстанавливается в BIN2)

        mov     PokSt,#1H
        mov     ADR12,#40h      ;обнулить первоначальную сумму
        mov     ADR13,#0
        mov     ADR14,#0
        mov     ADR15,#0
        call    zan1            ;ADR4...ADR7 <--1
        call    add3            ;ADR0...ADR3 <-- X+1
        call    mv8_0           ;ADR8...ADR11 <--X+1
        call    zan1            ;ADR4...ADR7 <--1
        call    subb3           ;получение X-1 по адресу ADR0...ADR3
        call    zan1
        call    subb3
        call    mv4_8           ;во втор. сл. X+1
        call    div3            ;в перв сл. отношение X-1/X+1
        call    mv8_0           ;ADR8...ADR11 <--X-1/X+1

lg8:    mov     BIN0,#0         ;перевод показателя степени в плавающий
        mov     BIN1,#0         ;формат
        mov     BIN2,PokSt      ;
        mov     BIN3,#0         ;
        mov     BIN4,#0         ;
        mov     BIN5,#0         ;
        clr     F0
        call    inReal          ;
        call    mv4_0           ;пересылка его в регистры делителя

        mov     R0,#logPr
        mov     @R0,ADR4
        inc     R0
        mov     @R0,ADR5
        inc     R0
        mov     @R0,ADR6
        inc     R0
        mov     @R0,ADR7
;        push    ADR4            ;сохранить их в стеке
;        push    ADR5            ;
;        push    ADR6            ;
;        push    ADR7            ;
        call    mv0_8           ;в регистр ADR0...ADR3 <--X-1/X+1
        call    pok             ;возвести X-1/X+1 в степень PokSt


        mov     R0,#logPr
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
 
;        pop     ADR7            ;восстановить показатель степени во
;        pop     ADR6            ;втором слагаемом
;        pop     ADR5            ;
;        pop     ADR4            ;
        mov     A,ERROR         ;проверка переопустошения порядка
        cjne    A,#Err_HIGHMUL,lg9          ;как только оно наступает прекратить
        mov     ERROR,#0        ;вычисления логарифма не фиксируя
        call    mv0_12          ;ошибочный результат
        jmp     lg11            ;

lg9:    jz      lg10
        pop     ADR12
        call    och
        ret

lg10:   call    div3            ;вычислить (X-1/X+1)**PokSt/PokSt
        mov     A,ERROR
        cjne    A,#Err_HIGHMUL,lg10a
        mov     ERROR,#0
        call    mv0_12
        jmp     lg11

lg10a:  call    mv4_12          ;переслать сумму во второе слагаемое
        call    add3            ;сложить
        call    mv12_0          ;послать на место суммы
        inc     PokSt           ;два раза увеличить показатель степени
        inc     PokSt           ;
        mov     a,PokSt         ;
        cjne    a,#37,lg8       ;ограничить 37/2 членами разложения

lg11:   mov     ADR4,#40H
        mov     ADR5,#0D9H
        mov     ADR6,#5BH
        mov     ADR7,#0DEH
        call    mul3            ;умножить на коэф.0,8685889 (0.DE5BD9)
        call    mv4_0           ;сохранить во втором слагаемом

        mov     BIN0,#0         ;перевод целой части логарифма в плавающий
        mov     BIN1,#0         ;формат
        pop     BIN2            ;восстановить из стека целую часть
        mov     BIN3,#0         ;
        mov     BIN4,#0         ;
        mov     BIN5,#0         ;
        clr     F0              ;паревести ее в плавающий формат и сложить
        call    inReal          ;с дробной частью
        call    add3

        ret
;*****************************
mv4_0:  mov     ADR4,ADR0
        mov     ADR5,ADR1
        mov     ADR6,ADR2
        mov     ADR7,ADR3
        ret
;*****************************
mv0_4:  mov     ADR0,ADR4
        mov     ADR1,ADR5
        mov     ADR2,ADR6
        mov     ADR3,ADR7
        ret

;*****************************
zan1:   mov     ADR4,#41H       ;занесение 1 во второе слагаемое
        mov     ADR5,#0H
        mov     ADR6,#0
        mov     ADR7,#80H
        ret
;*****************************
zan11:  mov     ADR0,#41H       ;занесение 1 впервое слагаемое
        mov     ADR1,#0H
        mov     ADR2,#0
        mov     ADR3,#80H
        ret
;*****************************
mv8_0:  mov     ADR8,ADR0       ;хранение ADR0...ADR3 по адресу
        mov     ADR9,ADR1       ; ADR8...ADR11
        mov     ADR10,ADR2
        mov     ADR11,ADR3
        ret
mv0_8:  mov     ADR0,ADR8       ;хранение ADR0...ADR3 по адресу
        mov     ADR1,ADR9       ; ADR8...ADR11
        mov     ADR2,ADR10
        mov     ADR3,ADR11
        ret
mv12_0: mov     ADR12,ADR0      ;хранение ADR0...ADR3 по адресу
        mov     ADR13,ADR1      ;ADR12...ADR15
        mov     ADR14,ADR2
        mov     ADR15,ADR3
        ret
mv4_8:  mov     ADR4,ADR8       ;пересылка ADR8...ADR11
        mov     ADR5,ADR9       ; во второе слагаемое
        mov     ADR6,ADR10
        mov     ADR7,ADR11
        ret
mv4_12: mov     ADR4,ADR12      ;пересылка ADR12...ADR15
        mov     ADR5,ADR13      ; во второе слагаемое
        mov     ADR6,ADR14
        mov     ADR7,ADR15
        ret
mv0_12: mov     ADR0,ADR12      ;пересылка ADR12...ADR15
        mov     ADR1,ADR13      ; в первое слагаемое
        mov     ADR2,ADR14
        mov     ADR3,ADR15
        ret

;********************************************************************

;************************************************************************
;Подпрограмма округления выводимых десятичных чисел до третьего знака
;после запятой. Исходные числа
;DES0,DES1,DES2,DES3 - целая часть
;DES4,DES5,DES6 - дробная часть
;Результат там же, но тетрады после третьего знака равны 0
;************************************************************************
okrygl3:
        mov     A,DES5
        anl     A,#0Fh
        cjne    A,#5,okr1
okr1:   jc      okr2
        mov     A,DES5
        add     A,#10h
        da      A
        mov     DES5,A
        mov     A,DES4
        addc    A,#0
        da      A
        mov     DES4,A
        mov     A,DES3
        addc    A,#0
        da      A
        mov     DES3,A
        mov     A,DES2
        addc    A,#0
        da      A
        mov     DES2,A
        mov     A,DES1
        addc    A,#0
        da      A
        mov     DES1,A
        mov     A,DES0
        addc    A,#0
        da      A
        mov     DES0,A
        jc      okr3
okr2:   anl     DES5,#0F0h
        mov     DES6,#0
        ret
okr3:   mov     ERROR,#Err_OKRUGL
        ret
;**********************************************************
;Деление чисел с плавающей запятой следующего формата:
;
;       ADR0  - зн.м.(0-"+",1-"-")+       !
;               смещенный порядок         ! делимое,
;       ADR1  - мл. байт мантиссы         !
;       ADR2  - ср. байт мантиссы         ! частное
;       ADR3  - ст. байт мантиссы         !
;
;       ADR4  - зн.м.(0-"+",1-"-")+       !
;               смещенный порядок         !
;       ADR5  - мл. байт мантиссы         ! делитель
;       ADR6  - ср. байт мантиссы         !
;       ADR7  - ст. байт мантиссы         !
;
;  Используются подпрограммы  zagr1s, sub1, sub2,
; sdvigl, sign, porRez
;
;
;Регистры:    - R3 - счетчик бит          ! часть
;             - R4 - частное              ! мантисса
;             - R5,R6,R7 - делимое  или   !
;               остаток                   !
;             - R2 - информация о корр.   !
;               порядка                   !
;
;             - R2 - информация о коррекции порядка
;             - R4 - порядок делителя
;**********************************************************
div3:   mov     A,#0
        cjne    A,ADR7,div_1    ;проверка делителя на 0
        cjne    A,ADR6,div_1
        cjne    A,ADR5,div_1
        mov     ERROR,#Err_DIVZERO        ;деление на 0
        call    och             ;
        ret
div_1:  mov     R2,A            ;R2 - признак коррекции
        mov     R4,A            ;R4 - накопление частного
        mov     R3,#1AH         ;R3 - счетчик бит
        call    zagr1s          ;загрузука делимого в R5,R6,R7
        call    sub2            ;вычесть из делимого делитель
        jc     div_2           ;если делитель меньше на div_2
        inc     R2              ;иначе,уст. призн. корр.
        dec     R3              ;
        mov     R4,#1H
        jmp     div_3           ;
div_2:  mov     R5,ADR3         ;восстановить R5,R6,R7
        mov     R6,ADR2         ;
        mov     R7,ADR1         ;
div_3:  cjne    R3,#12H,div_4   ;счетчик=17?
        mov     ADR3,R4         ;да
div_4:  cjne    R3,#0AH,div_5    ;счетчик=9?
        mov     ADR2,R4         ;да
div_5:  cjne    R3,#1,div_6     ;счетчик=1?
        mov     ADR1,R4
div_6:  cjne    R3,#0,div_7
        mov     A,R4            ;округление младшего разряда
        jnb     ACC.0,dpor
        mov     A,ADR1
        add     A,#1
        mov     ADR1,A
        mov     A,ADR2
        addc    A,#0
        mov     ADR2,A
        mov     A,ADR3
        addc    A,#0
        mov     ADR3,A
dpor:   call    sign
        add     A,#40H          ;корр.порядка(смещение)
        subb    A,R3            ;
        add     A,R2            ;корр.суммы
        call    porRez
        ret
div_7:  dec     R3
        call    sdvigl
        jc      div_8
        mov     A,ADR7          ;в ACC. < старший байт делителя
        cjne    A,5,div_8       ;сравнить старшие байты, если
        mov     A,ADR6          ;равны, то сравнить средние,
        cjne    A,6,div_8       ;и в случае их равенства
        mov     A,ADR5          ;сравнить младшие
        cjne    A,7,div_8       ;
        setb    C
        mov     A,R4
        rlc     A
        mov     R4,A
        clr     C
        jmp     div_9
div_8:  mov     A,R4            ;накопление результата в R4
        rlc     A
        mov     R4,A
        rrc     A               ;восстановление переноса
        jnc     div_3
div_9:  call    sub2            ;если перенос, то вычитать дел-ль.
        jmp     div_3
;**********************************************************
;Сложение чисел с плавающей запятой следующего формата:
;
;       ADR0  - зн.м. 1-го слаг.          !
;               (0-"+",1-"-")+            !
;               смещенный порядок         ! 1 слагаемое
;       ADR1  - мл. байт мантиссы         !
;       ADR2  - ср. байт мантиссы         ! сумма
;       ADR3  - ст. байт мантиссы         !
;
;       ADR4  - зн.м. 2-го слаг.          !
;               (0-"+",1-"-")+            !
;               смещенный порядок         !
;       ADR5  - мл. байт мантиссы         ! 2 слагаемое
;       ADR6  - ср. байт мантиссы         !
;       ADR7  - ст. байт мантиссы         !
;
;
;**********************************************************
add3:   call    yrPor           ;уравнивание порядков
        call    sumMant         ;сложение мантисс
        call    normMan
        ret
;**********************************************************
;Вычитание чисел с плавающей запятой следующего формата:
;
;       ADR0  - зн.м. уменьш.             !
;               (0-"+",1-"-")+            !
;               смещенный порядок         ! уменьшаемое
;       ADR1  - мл. байт мантиссы         !
;       ADR2  - ср. байт мантиссы         ! разность
;       ADR3  - ст. байт мантиссы         !
;
;       ADR4  - зн.м. вычитаемого.        !
;               (0-"+",1-"-")+            !
;               смещенный порядок         !
;       ADR5  - мл. байт мантиссы         ! вычитаемое
;       ADR6  - ср. байт мантиссы         !
;       ADR7  - ст. байт мантиссы         !
;
;
;**********************************************************
subb3:  mov     A,ADR4
        rlc     A
        cpl     C
        rrc     A
        mov     ADR4,A
        call    add3
        ret
ad1:    mov     A,ADR1          ;сложение R5,R6,R7 с 1-м
        add     A,R7            ;числом
        mov     R7,A
        mov     A,ADR2
        addc    A,R6
        mov     R6,A
        mov     A,ADR3
        addc    A,R5
        mov     R5,A
        ret
ad2:    mov     A,ADR5          ;сложение R5,R6,R7 со 2-м
        add     A,R7            ;числом
        mov     R7,A
        mov     A,ADR6
        addc    A,R6
        mov     R6,A
        mov     A,ADR7
        addc    A,R5
        mov     R5,A
        ret
sub1:   mov     A,R7            ;подпрограмма вычитания из
        subb    A,ADR1          ;R5,R6,R7 первого числа
        mov     R7,A
        mov     A,R6
        subb    A,ADR2
        mov     R6,A
        mov     A,R5
        subb    A,ADR3
        mov     R5,A
        ret
sub2:   clr     C
        mov     A,R7            ;подпрограмма вычитания делителя
        subb    A,ADR5          ;(второго числа)из остатка (R5,R6,R7)
        mov     R7,A
        mov     A,R6
        subb    A,ADR6
        mov     R6,A
        mov     A,R5
        subb    A,ADR7
        mov     R5,A
        ret
dopKod: mov     A,R7            ;подпрограмма получения дополни-
        cpl     A               ;тельного кода регистров R5,R6,R7
        addc    A,#0
        mov     R7,A
        mov     A,R6
        cpl     A
        addc    A,#0
        mov     R6,A
        mov     A,R5
        cpl     A
        addc    A,#0
        mov     R5,A
        ret
zagr1:  mov     ADR3,R5         ;R5,R6,R7 на место 1-го
        mov     ADR2,R6         ;слагаемого
        mov     ADR1,R7
        ret
zagr1s: mov     R5,ADR3         ;1-е слагаемое в R5,R6,R7
        mov     R6,ADR2         ;
        mov     R7,ADR1         ;
        ret
zagr2s: mov     R5,ADR7         ;2-е слагаемое в R5,R6,R7
        mov     R6,ADR6
        mov     R7,ADR5
        ret
sdvigp: mov     A,R5            ;подпрограмма сдвига R5,R6,R7
        rrc     A               ;вправо
        mov     R5,A
        mov     A,R6
        rrc     A
        mov     R6,A
        mov     A,R7
        rrc     A
        mov     R7,A
        ret
sdvigl: clr     C               ;сдвиг R5,R6,R7 влево на 1 разр.
        mov     A,R7
        rlc     A
        mov     R7,A
        mov     A,R6
        rlc     A
        mov     R6,A
        mov     A,R5
        rlc     A
        mov     R5,A
        ret
;******************************************************
;подпрограмма выравнивания порядков
;******************************************************
yrPor:  mov     A,ADR4          ;пор. 2-го сл. в ACC
        anl     A,#7FH
        mov     R4,ADR0
        anl     4,#7FH
        clr     C               ;вычесть из пор.2-го сл.
        subb    A,R4            ;порядок 1-го слагаемого
        jz      yr_4            ;
        jnc     yr_2            ;1сл.>2сл.иди на yr_2,иначе
        cpl     A
        inc     A
        mov     R3,A            ;сохранить разн.в R3
        call    zagr2s          ;сдв.2-е сл.
yr_1:   clr     C
        call    sdvigp
        mov     A,ADR4
        anl     A,#7FH
        cjne    A,#7FH,yr_5
        jmp     yr_7
yr_5:   inc     ADR4
        djnz    R3,yr_1
        mov     ADR7,R5         ;пересылка сдвинутого 2-го
        mov     ADR6,R6         ;слагаемого на место
        mov     ADR5,R7
        ret
yr_2:   mov     R3,A
        call    zagr1s          ;сдвигаем 1-е слагаемое
yr_3:   clr     C
        call    sdvigp
        mov     A,ADR0
        anl     A,#7FH
        cjne    A,#7FH,yr_6
yr_7:   mov     ERROR,#Err_YRPOR       ;ошибка выравнивания порядков
        call    och
        ret
yr_6:   inc     ADR0
        djnz    R3,yr_3
        call    zagr1
yr_4:   ret
;*******************************************************
;подпрограмма суммирования мантисс.Результат в R5,R6,R7.
;Порядок в ADR0
;*******************************************************
sumMant:mov     R1,#0
        mov     A,ADR0          ;анализ знаков
        rlc     A               ;в C знак 1-го
        mov     A,ADR4
        rlc     A
        rlc     A
        anl     A,#03H
        mov     B,A
        cjne    A,#1,sumM_3
        call    zagr1s          ;из 1-го вычитаем 2-е
        call    sub2
        jnc     sumM_2
        call    dopKod          ;2-е>1-го
sumM_1: mov     A,ADR0          ;зн.суммы=зн.2-го
        rlc     A
        mov     C,B.0
        rrc     A
        mov     ADR0,A
sumM_2: ret
sumM_3: cjne    A,#2H,sumM_4
        call    zagr2s          ;из 2-го вычитаем 1-е
        clr     C
        call    sub1
        jnc     sumM_1
        call    dopKod          ;1-е>2-го,C=0
        ret
sumM_4: call    zagr1s          ;суммируем
        call    ad2
        jnc     sumM_2          ;
        call    sdvigp          ;устранение переполнения
        mov     A,ADR0
        mov     C,ACC.7         ;в F0 заносим знак 1-го
        mov     F0,C
        anl     A,#7FH          ;очистить знаковый разряд
        clr     C
        add     A,#1H           ;увеличить порядок на 1
        rlc     A
        jnc     sumM_5          ;если зн.разр =1, то переполн.
        mov     ERROR,#Err_SUMMANT       ;и уст. призн. переполнения
        call    och
        ret
sumM_5: mov     C,F0            ;если переп. нет восст. знак
        rrc     A
        mov     ADR0,A          ;переслать поряд. на место
        ret
;********************************************************
;Нормализация мантиссы. Сдвиги могут быть только влево
;********************************************************
normMan:cjne    R7,#0,nm_1      ;проверка мантиссы на 0
        cjne    R6,#0,nm_1
        cjne    R5,#0,nm_1
        mov     ADR0,#40H
        jmp     nm_2
nm_1:   mov     A,R5
        jb      ACC.7,nm_2
        call    sdvigl          ;сдвиг влево
        mov     A,ADR0
        anl     A,#7FH
        cjne    A,#0,nm_3
        mov     ERROR,#Err_NORMMAN       ;нарушение нормализации
        call    och
        ret
nm_3:   dec     ADR0
        jmp     nm_1
nm_2:   call    zagr1           ;переслать норм.число на место
        ret



;********************************************************
;**********************************************************
;**********************************************************
;Умножение чисел с плавающей запятой следующего формата:
;
;       ADR0  - зн.м.(0-"+",1-"-")+       !
;               смещенный порядок         ! множимое,
;       ADR1  - мл. байт мантиссы         !
;       ADR2  - ср. байт мантиссы         ! произведение
;       ADR3  - ст. байт мантиссы         !
;
;       ADR4  - зн.м.(0-"+",1-"-")+       !
;               смещенный порядок         !
;       ADR5  - мл. байт мантиссы         ! множитель
;       ADR6  - ср. байт мантиссы         !
;       ADR7  - ст. байт мантиссы         !
;
; Порядок +63...-64 представлен смещенным на 64 кодом
; и занимает 7бит. Порядок +63...-64 соответствует 127...0.
; ADR0...ADR7 в памяти должны располагаться последовательно
; начиная с ADR0
;**********************************************************
;Подпрограмма умножения чисел с плавающей запятой.
mul3:   mov     A,#0            ;обнулить произведение
        mov     R2,A
        mov     R3,A
        mov     R4,A
        mov     R5,A
        mov     R6,A
        mov     R7,A
        mov     R0,#ADR5
mul_1:  mov     R3,5            ;сдвиг R5,R6,R7 влево на 2 байта
        mov     R4,6
        mov     R5,7
        mov     R1,#3H
        mov     B,ADR1          ;в B мл. байт множимого
mul_3:  cjne    R1,#2H,mul_4
        mov     B,ADR2          ;в B ср. байт множимого
mul_4:  cjne    R1,#1H,mul_5
        mov     B,ADR3          ;в B ст. байт множимого
mul_5:  mov     A,@R0           ;в ACC. байт множителя
        mul     AB              ;умножение
        add     A,R5            ;сложение произведения с R3,R4,R5
        mov     R5,A
        mov     A,B
        addc    A,R4
        mov     R4,A
        mov     A,R3
        addc    A,#0
        mov     R3,A
        mov     A,R2
        addc    A,#0
        mov     R2,A
        cjne    R1,#1,mul_6
        mov     A,R7            ;округление младшего разряда
        add     A,#80H
        mov     A,R6
        addc    A,#0
        mov     R6,A
        mov     A,R5
        addc    A,#0
        mov     R5,A
        mov     A,R4
        addc    A,#0
        mov     R4,A
mul_6:  mov     R7,6            ;сдвиг вправо на 1 байт
        mov     R6,5
        mov     R5,4
        mov     R4,3
        mov     R3,2
        mov     R2,#0
        djnz    R1,mul_3
        inc     R0
        cjne    R0,#ADR5+3,mul_1
        mov     A,R5
        jb      ACC.7,mul_10    ;если ACC.7=0, то нормализация
        mov     A,ADR0
        cjne    A,#0,mul_12     ;если порядок=-64 и число > 0, то
;       jnz     mul_11
        mov     ADR0,#40H       ;округляем число до +0, пор.=0
mul_13: mov     ADR1,#0
        mov     ADR2,#0
        mov     ADR3,#0
        ret
mul_12: cjne    A,#80H,mul_11   ;если порядок =-64 и число < 0, то
        mov     ADR0,#0C0H      ;округляем число до -0, пор.=0
        jmp     mul_13
mul_11: dec     ADR0            ;непосредственно нормализация
        call    sdvigl
mul_10: call    zagr1           ;пересылка R5..R7 в ADR3..ADR1
mpor:   call    sign            ;обработка порядка
        add     A,R3            ;сложение порядков
        subb    A,#40H
        call    porRez
        ret
;*************************************************************
;Подпрограмма вычисления знака произв. (деления).
;Знак в F0, порядки с 0-м знаковым разрядом в ACC. и R3
;*************************************************************
sign:   mov     R3,ADR4         ;
        mov     A,ADR0
        xrl     A,R3
        mov     C,ACC.7
        mov     F0,C            ;в F0 знак результата
        mov     A,ADR0          ;восстановить ACC.
        anl     A,#7FH          ;обнулить бит 7(зн.) порядков
        anl     3,#7FH
        ret
;************************************************************
;Подпрограмма получения порядка результата.
;Анализирует переполнение, в случае, если переполнения нет
;восстанавливает знак результата и пересылает результирующий
;порядок по ADR0.
;************************************************************
porRez: rlc     A
        jc      er1             ;если C, то переполнение
        mov     C,F0            ;добавить знак
        rrc     A
        mov     ADR0,A          ;переслать порядок по ADR0
        ret
er1:    mov     ERROR,#Err_HIGHMUL        ;переполнение при умножении
        ret
;*************************************************************************


;**********************************************************
;Деление чисел следующего формата:
;       ADR1  - мл. байт делимого
;       ADR2  - ср. байт делимого
;       ADR3  - ст. байт делимого
;
;       ADR5  - мл. байт делителя
;       ADR6  - ср. байт делителя
;       ADR7  - ст. байт делителя
;
;       ADR9  - мл. байт целой части частного
;       ADR10 - ср. байт целой части частного
;       ADR11 - ст. байт целой части частного
;
;       ADR13 - мл. байт дробной части частного
;       ADR14 - ср. байт дробной части частного
;       ADR15 - ст. байт дробной части частного
;  Используются подпрограммы  zagr1s, sub1, sub2,
; sdvigl, sign, 
;
;
;**********************************************************
;div3x3:
;        mov     R2,#0
;        mov     R1,#0
;        MOV     A,#0
;        cjne    A,ADR7,d0a      ;проверка делителя на 0
;        cjne    A,ADR6,d0a
;        cjne    A,ADR5,d0a
;        mov     ERROR,#Err_DIVZERO        ;деление на 0
;        ret
;d0a:    mov     ADR9,#0         ;обнулить выходные ячейки
;        mov     ADR10,#0        ;
;        mov     ADR11,#0
;        mov     ADR13,#0
;        mov     ADR14,#0
;        mov     ADR15,#0
;        mov     R3,#1Ah		;занести в счетчик число 26
;d1a:    mov     A,ADR3          ;УБРАТЬ HЕЗHАЧАЩИЕ HУЛИ путем сдвига делимого
;        mov     B,ADR7		;и делителя влево
;        mov     C,B.7           ;сдвиг одновременный делителя и делимого
;        orl     C,ACC.7         ;влево до появления значащей цифры
;        jc      d2a
;        call    rlDm
;        call    rlDt
;        djnz    R3,d1a
;        mov     ERROR,#Err_DIVZERO
;        ret
;d2a:    mov     A,ADR3          ;узнать, есть ли незначащие нули у делимого
;        jb      ACC.7,d5a       ;если нет, то на d5a
;d3a:    mov     A,ADR3          ;если есть, то сдвинуть делимое
;        jb      ACC.7,d5a
;        call    rlDm
;        inc     R1		;В R1 КОЛИЧ. СДВИГОВ ДЕЛИМОГО
;        djnz    R3,d3a          ;
;        ret
;d5a:    mov     A,ADR7          ;проверяем есть ли незначащие нули у делителя
;        jb      ACC.7,d7a       ;если нет то на  d7
;        mov     R3,#0
;d6a:    mov     A,ADR7
;        jb      ACC.7,d7a
;        call    rlDt            ;если есть, то сдвинуть делитель
;        inc     R2		;В R2 КОЛИЧ. СДВИГОВ ДЕЛИТЕЛЯ
;        jmp     d6a              
;d7a:    call    zagr1s          ;пробное вычитание, делимое в R5,R6,R7
;        CALL    sub2            ;вычесть из делимого делитель
;        JC      d8              ;если делитель меньше на d8
;        inc     R2
;        mov     ADR13,#1
;        jmp     d9
;d8:     mov     R3,#24
;d8a:    MOV     R5,ADR3         ;восстановить R5,R6,R7
;        MOV     R6,ADR2         ;
;        MOV     R7,ADR1         ;
;d9:     mov     R3,#24
;        mov     A,R3
;        add     A,R2
;        clr     c
;        subb    A,R1
;        mov     R3,A
;d10:    djnz    R3,d10a
;        call    sdvigl  	;округление младшего разряда
;        jb      ACC.0,dp
;        mov     A,ADR1
;        add     A,#1
;        mov     ADR1,A
;        mov     A,ADR2
;        addc    A,#0
;        mov     ADR2,A
;        mov     A,ADR3
;        addc    A,#0
;        mov     ADR3,A
;dp:     ret
;d10a:   call    sdvigl
;        jc      d11
;        mov     A,ADR7          ;в ACC. < старший байт делителя
;        cjne    A,5,d11         ;сравнить старшие байты, если
;        mov     A,ADR6          ;равны, то сравнить средние,
;        cjne    A,6,d11         ;и в случае их равенства
;        mov     A,ADR5          ;сравнить младшие
;        cjne    A,7,d11         ;
;        setb    C
;        call    rlCHt
;        clr     C
;        jmp     d12
;d11:    mov     F0,C
;        call    rlCHt
;        mov     C,F0
;        jnc     d10
;d12:    call    sub2            ;если перенос, то вычитать дел-ль.
;        jmp     d10
;********************************************************
;Подпрограмма сдвига делимого влево на 1 разряд
;********************************************************
;rlDm:   clr     C               ;сдвиг делимого влево
;        mov     A,ADR1
;        rlc     A
;        mov     ADR1,A
;        mov     A,ADR2
;        rlc     A
;        mov     ADR2,A
;        mov     A,ADR3
;        rlc     A
;        mov     ADR3,A
;        ret
;********************************************************
;Подпрограмма сдвига делителя влево на 1 разряд
;********************************************************
;rlDt:   clr     C               ;сдвиг делителя влево
;        mov     A,ADR5
;        rlc     A
;        mov     ADR5,A
;        mov     A,ADR6
;        rlc     A
;        mov     ADR6,A
;        mov     A,ADR7
;        rlc     A
;        mov     ADR7,A
;        ret
;********************************************************
;Подпрограмма сдвига частного влево на 1 разряд
;********************************************************
;rlCHt:                         ;сдвиг частного влево
;        mov     A,ADR13
;        rlc     A
;        mov     ADR13,A
;        mov     A,ADR14
;        rlc     A
;        mov     ADR14,A
;        mov     A,ADR15
;        rlc     A
;        mov     ADR15,A
;        mov     A,ADR9
;        rlc     A
;        mov     ADR9,A
;        mov     A,ADR10
;        rlc     A
;        mov     ADR10,A
;        mov     A,ADR11
;        rlc     A
;        mov     ADR11,A
;        ret
;*********************************************************
;*********************************************************
;Подпрограмма вычисления показательной функции. Исходное число в формате
;с плавающей запятой находится по адресу
;ADR0 - знак числа + смещенный порядок
;ADR1,ADR2,ADR3 - мл.,ср.,ст. байты мантиссы.
;PokSt - показатель степени (<256)
;Результат там же.
;
;Внимание: ячейка PokSt сохраняет свое значение через стек
;
;Алгоритм: метод экономичного вычисления определяется выражением
;X**n=(...((X**0*X**a(k-1))**2*X**a(k-2)*...*X**a1)**2*X**a0
;используются все регистры и ячейки временного хранения исходного числа
;ADR8...ADR11.
;В ячейках ADR8...11 хранится исходное число по выходе из подпрограммы
;*********************************************************
pok:    mov     StCikl,#7       ;счетчик циклов
        call    mv8_0           ;сохранить исходное число  в ADR8..11
        mov     A,PokSt
        cjne    A,#0,pok1       ;проверка показателя степени на 0
        mov     ADR0,#41h
        mov     ADR1,#0
        mov     ADR2,#0
        mov     ADR3,#80h
        ret
pok1:   cjne    A,#1,pok1a      ;проверка показателя степени на 1
        ret
pok1a:  push    PokSt
        call    mv4_8           ;переслать исходное число во второй множитель
        call    mul3            ;получить квадрат числа X**2
pok2:   mov     A,PokSt         ;сдвиг PokSt с уменьшением счетчика циклов
        rlc     A               ;до появления первой значащей 1
        mov     PokSt,A         ;Для этой единицы уже квадрат числа сущес-
        jc      pok3            ;твует в первом множителе ADR0..3
        djnz    StCikl,pok2
pok3:   mov     A,PokSt         ;Сдвиг показателя степени
        rlc     A               ;
        mov     PokSt,A         ;
        jnc     pok4            ;
        call    mv4_8           ;если 1 то умножение на исходное число
        call    mul3            ;потом возведение в квадрат
pok4:   djnz    StCikl,pok5     ;проверка окончания сдвигов
        pop     PokSt
        ret
pok5:   mov     ADR4,ADR0       ;иначе просто возводим в квадрат
        mov     ADR5,ADR1
        mov     ADR6,ADR2
        mov     ADR7,ADR3
        call    mul3
        jmp     pok3

;*********************************************************************
;Подпрограмма вычисления синуса. Исходное число выраженное в радианах
;находится по адресу:
;ADR0 - знак + порядок
;ADR1,ADR2,ADR3 - мл.,ср.,ст. байты мантиссы
;Результат там же.
;Алгоритм:
;sin(x)=x-(x**3)/3!+(x**5)/5!-(x**7)/7!
;*********************************************************************
sin:    mov     DPTR,#sfakt0

sin0:   mov     PokSt,#0
        mov     ADR12,#40h      ;обнулить первоначальную сумму
        mov     ADR13,#0
        mov     ADR14,#0
        mov     ADR15,#0
sin1:   call    pok             ;вычисление степени Pokst числа по ADR0..3
        mov     R0,#ADR4        ;загрузка очередного множителя в ADR4..7
        mov     R1,#4
        call    rdPROM
        call    mul3            ;умножение числа на очередной множитель
        call    mv4_12          ;пересылка суммы во второе слагаемое
        call    subb3           ;суммирование
        call    mv12_0          ;сохранение суммы по ADR12..15
        mov     A,PokSt
        cjne    A,#8,sin2
        ret
sin2:   inc     PokSt
        call    mv0_12
        call    mv0_8
        jmp     sin1


;***************************************************************
;Подпрограмма перевода градусов в радианы. Исходное число нахо-
;дится по адресу DES0,DES1,DES2,DES3 - целая часть
;                DES4,DES5,DES6      - дробная часть
;Выход там же
;***************************************************************
grtoRa: call    dtob
        clr     F0
        call    inReal
        mov     ADR4,#3Bh
        mov     ADR5,#6Ch
        mov     ADR6,#0FAh
        mov     ADR7,#8Eh
        call    mul3
        call    realIn
        call    btod
        ret

;***************************************************************
;Подпрограмма перевода радиан в градусы  . Исходное число нахо-
;дится по адресу DES0,DES1,DES2,DES3 - целая часть
;                DES4,DES5,DES6      - дробная часть
;Выход там же
;***************************************************************
ratoGr: call    dtob
        clr     F0
        call    inReal
        mov     ADR4,#46h
        mov     ADR5,#0BFh
        mov     ADR6,#2Eh
        mov     ADR7,#0E5h
        call    mul3
        call    realIn
        call    btod
        ret

;********************************************************************
;Подпрограмма чтения области ПЗУ(начальный адрес указан в DPTR)
;в РПД (начальный адрес указан в R0). Размер задается в R1
;********************************************************************
rdPROM: clr     A
        movc    A,@A+DPTR
        mov     @R0,A
        inc     DPTR
        inc     R0
        djnz    R1,rdPROM
        ret

sfakt0: db      40h,00h,00h,00h         ;0
sfakt1: db      41h,00h,00h,80h         ;1/1!
sfakt2: db      40h,00h,00h,00h         ;0
sfakt3: db      0BEh,55h,0AAh,0AAh        ;-1/3!
sfakt4: db      40h,00h,00h,00h         ;0
sfakt5: db      3Ah,11h,88h,88h         ;1/5!
sfakt6: db      40h,00h,00h,00h         ;0
sfakt7: db      0B4h,02h,0Dh,0D0h       ;-1/7!
sfakt8: db      40h,00h,00h,00h         ;0
;*********************************************************************
;Подпрограмма вычисления косинуса. Исходное число выраженное в радианах
;находится по адресу:
;ADR0 - знак + порядок
;ADR1,ADR2,ADR3 - мл.,ср.,ст. байты мантиссы
;Результат там же.
;Алгоритм:
;cos(x)=1-(x**2)/2!+(x**4)/4!-(x**6)/6!
;*********************************************************************
cos:    mov     DPTR,#cfakt0
        jmp     sin0
;***************************************************************
cfakt0: db      41h,00h,00h,80h ;1
cfakt1: db      40h,00h,00h,00h ;0
cfakt2: db      0C0h,00h,00h,80h;-1/2!
cfakt3: db      40h,00h,00h,00h ;0
cfakt4: db      3Ch,55h,0AAh,0AAh ;1/4!
cfakt5: db      40h,00h,00h,00h ;0
cfakt6: db      0B7h,0C1h,0Bh,0B6h;-1/6!
cfakt7: db      40h,00h,00h,00h ;0
cfakt8: db      31h,02h,0Dh,0D0h ;1/8!
;**********************************************************
;*********************************************************************
;Подпрограмма вычисления арксинуса. Исходное число находится по адресу:
;ADR0 - знак + порядок
;ADR1,ADR2,ADR3 - мл.,ср.,ст. байты мантиссы
;Результат, выраженный в радианах находится там же там же.
;Алгоритм:
;arcsin(x)=x+(x**3)/2*3+1*3*(x**5)/2*4*5+1*3*5*(x**7)/2*4*6*7
;Из-за небольшого количества членов разложения для углов больше 45 градусов
;получается большая погрешность. Для угла в 45 градусов получается число
;44,87 градуса
;Используется 4 члена разложения.
;
;*********************************************************************
arcsin: mov     DPTR,#afakt0
        jmp     sin0
;**********************************************************
afakt0: db      40h,00h,00h,00h
afakt1: db      41h,00h,00h,80h         ;1
afakt2: db      40h,00h,00h,00h
afakt3: db      3Eh,0C0h,0AAh,0AAh        ;
afakt4: db      40h,00h,00h,00h
afakt5: db      3Dh,33h,99h,99h
afakt6: db      40h,00h,00h,00h
afakt7: db      3Ch,0DBh,0DBh,0B6h
afakt8: db      40h,00h,00h,00h
afakt9: db      3Bh,1Ch,0E3h,0F8h
afakt10: db     40h,00h,00h,00h
afakt11: db     3Bh,0A3h,45h,0B7h
afakt12: db     40h,00h,00h,00h
;**********************************************************
;*********************************************************************
;Подпрограмма извлечения квадратного корня. Исходное число
;находится по адресу:
;ADR0 - знак + порядок
;ADR1,ADR2,ADR3 - мл.,ср.,ст. байты мантиссы
;Результат там же.
;Алгоритм:
;вычисление производится по итерационному методу последовательных
;приближений (методу Hьютона), который дает результат за приемлемое
;количество итераций (внашем случае их 5). За первое приближение прини-
;мается x=N/200+2. Все остальные итерации - по формуле
; X i+1 = (N/Xi+Xi)/2
;*********************************************************************
sqrt:   mov     ADR4,#48h       ;в делитель заносим 200
        mov     ADR5,#0
        mov     ADR6,#0
        mov     ADR7,#0C8h
        call    mv8_0           ;исходное число сохраним в ADR8..ADR11
        mov     StCikl,#7       ;счетчик итераций <--7
        call    div3            ;исходное число делим на 200
        mov     ADR4,#42h       ;во второе слагаемое заносим 2
        mov     ADR5,#0
        mov     ADR6,#0
        mov     ADR7,#80h
        call    add3            ;вычисляем N/200+2
        call    mv12_0          ;сохраняем по адресу ADR12...ADR15
                        ;ВЫЧИСЛЕHИЕ ИТЕРАЦИЙ
sqr1:   call    mv0_8           ;исходное число заносим в делимое
        call    mv4_12          ;очередную итерацию заносим в делитель
        call    div3            ;деление
        call    mv4_12          ;очередную итерацию заносим во второе слага-
                                ;емое
        call    add3            ;
        mov     ADR4,#42h       ;во второе слагаемое заносим 2
        mov     ADR5,#0
        mov     ADR6,#0
        mov     ADR7,#80h
        call    div3
        call    mv12_0
        djnz    StCikl,sqr1
        ret

;*****************************************************************
;**************************************************************
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ПОДПРОГРАММЫ переводов чисел
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;***********************************************************
;Подпрограмма перевода двоичного числа с плавающей запятой,
;находящегося по ADR0 - зн.+порядок, ADR1,ADR2,ADR3 -
;мл., ср., ст. байты мантиссы.
;в двоичное с фиксированной запятой в ячейках BIN0,BIN1,BIN2 - целая
;часть, BIN3,BIN4,BIN5 - дробная часть. Если целая часть превышает
;три байта выдается код ошибки.

;в десятичное с фиксированной запятой следующего формата
;DES0,DES1,DES2,DES3 -целая часть, DES4,DES5,DES6 - дробная, знак в F0.
;0 -"+",   1 - "-".
;***********************************************************
realIn: mov     BIN0,#0         ;в BIN0,BIN1,BIN2 целая часть
        mov     BIN1,#0
        mov     BIN2,#0
        mov     R3,#24          ;счетчик сдвигов влево
        call    zagr1s          ;загрузка исходного числа в R5,R6,R7
        mov     R0,ADR0         ;порядок числа в R0
        mov     A,R0
        rlc     A               ;загрузка знака в F0
        mov     F0,C
        anl     0,#7FH          ;очистить знаковый разряд
rIn1:   cjne    R0,#64,rIn2     ;порядок равен 0?
        mov     BIN3,R5
        mov     BIN4,R6
        mov     BIN5,R7

;        call    btod

        ret
rIn2:   jc      rIn3
        call    sdvigl          ;порядок положительный
        dec     R0
        mov     A,BIN2
        rlc     A
        mov     BIN2,A
        mov     A,BIN1

        rlc     A
        mov     BIN1,A
        mov     A,BIN0
        rlc     A
        mov     BIN0,A
        djnz    R3,rIn1
        mov     ERROR,#Err_REALIN       ;нарушение формата
        ret
rIn3:   clr     C
        call    sdvigp          ;порядок отрицательный
        inc     R0
        jmp     rIn1
;************************************************************************

;**********************************************************
;***********************************************************
;Преобразование дробного двоичного числа, находящегося в BIN0,BIN1,BIN2 -
;целая часть, BIN3,BIN4,BIN5 - дробная часть, F0 - знак
;в формат с плавающей точкой. Результат: мантисса в ADR1,ADR2,ADR3,
;порядок в ADR0. Число нормализовано.
;
; Формат исходного целого числа:
; F0: зн.(0-"+",1-"-") бит числа
; BIN0,BIN1,BIN2 - целая часть числа.
; BIN3,BIN4,BIN5 - дробная часть числа.
;Формат числа с пл. точкой: ADR0 - зн.м.+см.пор.
;ADR3,ADR2,ADR1 - ст.,ср.,мл. байты мантиссы. Число нормализовано.
;************************************************************
;Алгоритм: сдвигаем запятую в двоичном числе на 3 байта влево.
;При этом порядок будет 64+24=88=58H. Сдвигая число влево на один
;разряд будем уменьшать порядок, пока не появиться 1 в старшем разряде.
;**************************************************************
inReal: mov     ADR0,#58h
        mov     R2,#48          ;счетчик сдвигов
inR1:   mov     A,BIN0
        jb      ACC.7,inR2
        dec     ADR0
        clr     C               ;сдвиг BIN0..BIN5 влево на один разряд
        mov     A,BIN5
        rlc     A
        mov     BIN5,A
        mov     A,BIN4
        rlc     A
        mov     BIN4,A
        mov     A,BIN3
        rlc     A
        mov     BIN3,A
        mov     A,BIN2
        rlc     A
        mov     BIN2,A
        mov     A,BIN1
        rlc     A
        mov     BIN1,A
        mov     A,BIN0
        rlc     A
        mov     BIN0,A
        djnz    R2,inR1
        mov     ADR0,#40h       ;если за 48 сдвигов не появилась значащая
        mov     ADR1,#0         ;цифра, то число равно 0
        mov     ADR2,#0
        mov     ADR3,#0
        ret
inR2:   mov     A,ADR0
        mov     C,F0
        mov     ACC.7,C
        mov     ADR0,A
        mov     ADR3,BIN0
        mov     ADR2,BIN1
        mov     ADR1,BIN2
        ret
;***********************************************************
;***********************************************************
;Подпрограмма перевода двоичного числа с фиксированной запятой, находящегося
;в BIN0 BIN1 BIN2,BIN3 BIN4 BIN5 в десятичное с фиксированной запятой
;следующего формата  DES0 DES1 DES2 DES3,DES4 DES5 DES6
;Вышеуказанные ячейки памяти должны быть расположены в памяти в порядке
;возрастания, т.е. по порядку
;***********************************************************
btod:   call    p1610
        mov     R5,BIN3
        mov     R6,BIN4
        mov     R7,BIN5
        mov     DES4,#0
        mov     DES5,#0
        mov     DES6,#0
        mov     R0,#24          ;счетчик сдвигов
btod1:  mov     R2,#3H          ;счетчик циклов
;        clr     C
        call    sdvigp          ;сдвиг двоичной дроби вправо
        mov     A,DES4          ;сдвиг десятичной дроби вправо
        rrc     A               ;с учетом переноса
        mov     DES4,A
        mov     A,DES5
        rrc     A
        mov     DES5,A
        mov     A,DES6
        rrc     A
        mov     DES6,A
        mov     R1,#DES4
btod2:  mov     A,@R1           ;вычитание 3 из тетрад>8
        jnb     ACC.7,btod3     ;без учета переноса
        clr     C
        subb    A,#30H
btod3:  swap    A
        jnb     ACC.7,btod4
        clr     C
        subb    A,#30H
btod4:  swap    A
        mov     @R1,A
        inc     R1
        djnz    R2,btod2
        djnz    R0,btod1
        ret

;**********************************************************
;***********************************************************
;Подпрограмма перевода десятичного числа с фиксированной запятой,
;находящегося в DES0 DES1 DES2 DES3,DES4 DES5 DES6 в двоичное в
; BIN0 BIN1 BIN2,BIN3 BIN4 BIN5 в  с фиксированной запятой.
;Вышеуказанные ячейки памяти должны быть расположены в памяти в порядке
;возрастания, т.е. по порядку
;***********************************************************
dtob:   call    p1016

        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        mov     R5,DES4         ;загрузка десятичной дроби в R5,R6,R7
        mov     R6,DES5
        mov     R7,DES6

        mov     R0,#24          ;счетчик сдвигов
dtob1:  mov     R2,#3           ;счетчик циклов
        mov     R1,#5           ;в R1 адрес старшего байта десятичной дроби
dtob2:  mov     A,@R1           ;прибавление 3 в тетрады > 5
        push    ACC
        anl     A,#0F0h
        cjne    A,#50h,dtob3
        jmp     dtob3a
dtob3:  jc      dtob4
dtob3a: add     A,#30h
dtob4:  mov     B,A
        pop     ACC
        anl     A,#0Fh
        cjne    A,#5h,dtob5
        jmp     dtob5a
dtob5:  jc      dtob6
dtob5a: add     A,#3
dtob6:  orl     A,B
        mov     @R1,A
        inc     R1
        djnz    R2,dtob2

        call    sdvigl          ;сдвиг десятичной дроби влево

        mov     A,BIN5          ;сдвиг двоичной дроби влево
        rlc     A               ;с учетом переноса
        mov     BIN5,A
        mov     A,BIN4
        rlc     A
        mov     BIN4,A
        mov     A,BIN3
        rlc     A
        mov     BIN3,A
        djnz    R0,dtob1        ;
        ret
;**********************************************************
;********************************************************
;***********************************************************
;Подпрограмма перевода двоичного числа находящегося в ячейках
;       BIN2  - мл. байт
;       BIN1  - ср. байт
;       BIN0  - ст. байт
;в двоично-десятичное в ячейках
;       DES3  - мл. байт
;       DES2  -     байт
;       DES1  -     байт
;       DES0  - ст. байт
;
;Алгоритм: из двоичного числа вычитаем сначала десятки миллионов
;          пока не получим число меньше нуля и подсчитывая количе-
;          ство вычитаний, затем миллионы и т.д
;          Количества вычитаний заносим в соответствующую тетраду
;          DES0...DES3
;
;          Константы соответствующих чисел заносятся в регистры
;          R5,R6,R7 и применяется подпрограмма вычитания трех-
;          байтных чисел SUBB3b
;***********************************************************
p1610:  mov     DES0,#0
        mov     DES1,#0
        mov     DES2,#0
        mov     DES3,#0

m10:    mov     B,#0            ;счетчик количеств вычитаний
        mov     R5,#98h         ;из BIN0, BIN1, BIN2, вычитаем по 10 000 000
        mov     R6,#96h         ;(98 96 80H) пока не 0
        mov     R7,#80h
        call    SUBB3b
        swap    A
        orl     DES0,A          ;в старшую тетраду DES0 занести десятки мил-
                                ;лионов
m1a:    mov     B,#0            ;счетчик количеств вычитаний
        mov     R5,#0Fh         ;из BIN0, BIN1, BIN2, вычитаем по 1 000 000
        mov     R6,#42h         ;(0F 42 40H) пока не 0
        mov     R7,#40h
        call    SUBB3b
        orl     DES0,A          ;в младшую тетраду DES0 занести миллионы

t100:   mov     B,#0            ;счетчик количеств вычитаний
        mov     R5,#1h          ;из BON0, BIN1, BIN2, вычитаем по 100 000
        mov     R6,#86h         ;(01 86 A0H) пока не 0
        mov     R7,#0A0h
        call    SUBB3b
        swap    A
        orl     DES1,A          ;в старшую тетраду DES1 занести сотни тысяч
t10:    mov     B,#0            ;счетчик количеств вычитаний
        mov     R5,#0h          ;из BIN0, BIN1, BIN2, вычитаем по 10 000
        mov     R6,#27h         ;(00 27 10H) пока не 0
        mov     R7,#10h
        call    SUBB3b
        orl     DES1,A          ;в младшую тетраду DES1 занести десятки тысяч

t1:     mov     B,#0            ;счетчик количеств вычитаний
        mov     R5,#0h          ;из BIN0, BIN1, BIN2, вычитаем по 1000
        mov     R6,#3h         ;(00 03 E8H) пока не 0
        mov     R7,#0E8h
        call    SUBB3b
        swap    A
        orl     DES2,A          ;в старшую тетраду DES2 занести тысячи
sot:    mov     B,#0            ;счетчик количеств вычитаний
        mov     R5,#0h          ;из BIN0, BIN1, BIN2, вычитаем по 100
        mov     R6,#0h          ;(00 00 64H) пока не 0
        mov     R7,#64h
        call    SUBB3b
        orl     DES2,A          ;в младшую тетраду DES2 занести сотни

des:    mov     B,#0            ;счетчик количеств вычитаний
        mov     R5,#0h          ;из BIN0, BIN1, BIN2,вычитаем по 10
        mov     R6,#0h         ;(00 03 0AH) пока не 0
        mov     R7,#0Ah
        call    SUBB3b
        swap    A
        orl     DES3,A          ;в старшую тетраду DES3 занести десятки
ed:     mov     B,#0            ;счетчик количеств вычитаний
        mov     R5,#0h          ;из BIN0, BIN1, BIN2,вычитаем по 1
        mov     R6,#0h          ;(00 00 01H) пока не 0
        mov     R7,#1h
        call    SUBB3b
        orl     DES3,A          ;в младшую тетраду DES3 занести единицы
        ret
;***********************************************************
SUBB3b: clr     C
        mov     A,BIN2
        subb    A,R7
        mov     BIN2,A
        mov     A,BIN1
        subb    A,R6
        mov     BIN1,A
        mov     A,BIN0
        subb    A,R5
        mov     BIN0,A
        jc      su3
        inc     B
        jmp     SUBB3b
su3:    mov     A,BIN2          ;ВОССТАНОВИТЬ BIN2,BIN1,BIN0
        add     A,R7
        mov     BIN2,A
        mov     A,BIN1
        addc    A,R6
        mov     BIN1,A
        mov     A,BIN0
        addc    A,R5
        mov     BIN0,A
        mov     A,B
        ret
;***********************************************************
;***********************************************************
;***********************************************************
;Подпрограмма перевода двоично-десятичного числа в ячейках
;       DES3  - мл. байт
;       DES2  -     байт
;       DES1  -     байт
;       DES0  - ст. байт
;в двоичное число находящееся в ячейках
;       BIN2  - мл. байт
;       BIN1  - ср. байт
;       BIN0  - ст. байт
;
;Алгоритм: суммируем сначала десятки миллионов  и уменьшаем двоично-десятич-
;          ные цифры десятков миллионов пока не получим нуль, затем миллионы
;          и т.д

;************************************************************
p1016:  mov     BIN2,#0         ;накопление суммы
        mov     BIN1,#0
        mov     BIN0,#0

        mov     A,DES0
        swap    A
        anl     A,#0Fh
        cjne    A,#0,dcb1
        jmp     dcb3
dcb1:   mov     R0,A            ;счетчик
        mov     R5,#98h         ;
        mov     R6,#96h         ;(98 96 80H)
        mov     R7,#80h
dcb2:   call    nakopl
        djnz    R0,dcb2
dcb3:   mov     R0,DES0
        anl     0,#0Fh
        cjne    R0,#0,dcb4
        jmp     dcb6
dcb4:   mov     R5,#0Fh         ;
        mov     R6,#42h         ;(0F 42 40H)
        mov     R7,#40h
dcb5:   call    nakopl
        djnz    R0,dcb5

dcb6:   mov     A,DES1
        swap    A
        anl     A,#0Fh
        cjne    A,#0,dcb7
        jmp     dcb9
dcb7:   mov     R0,A            ;счетчик
        mov     R5,#1h         ;
        mov     R6,#86h         ;(01 86 A0H)
        mov     R7,#0A0h
dcb8:   call    nakopl
        djnz    R0,dcb8
dcb9:   mov     R0,DES1
        anl     0,#0Fh
        cjne    R0,#0,dcb10
        jmp     dcb12
dcb10:  mov     R5,#0h         ;
        mov     R6,#27h         ;(00 27 10H)
        mov     R7,#10h
dcb11:  call    nakopl
        djnz    R0,dcb11

dcb12:  mov     A,DES2
        swap    A
        anl     A,#0Fh
        cjne    A,#0,dcb13
        jmp     dcb15
dcb13:  mov     R0,A            ;счетчик
        mov     R5,#0h         ;
        mov     R6,#3h         ;(00 03 E8H)
        mov     R7,#0E8h
dcb14:  call    nakopl
        djnz    R0,dcb14
dcb15:  mov     R0,DES2
        anl     0,#0Fh
        cjne    R0,#0,dcb16
        jmp     dcb18
dcb16:  mov     R5,#0h         ;
        mov     R6,#0h         ;(00 00 64H)
        mov     R7,#64h
dcb17:  call    nakopl
        djnz    R0,dcb17

dcb18:  mov     A,DES3
        swap    A
        anl     A,#0Fh
        cjne    A,#0,dcb19
        jmp     dcb21
dcb19:  mov     R0,A            ;счетчик
        mov     R5,#0h         ;
        mov     R6,#0h         ;(00 00 0AH)
        mov     R7,#0Ah
dcb20:  call    nakopl
        djnz    R0,dcb20
dcb21:  mov     R0,DES3
        anl     0,#0Fh
        cjne    R0,#0,dcb22
        jmp     dcb24
dcb22:  mov     R5,#0h         ;
        mov     R6,#0h         ;(00 00 01H)
        mov     R7,#1h
dcb23:  call    nakopl
        djnz    R0,dcb23
dcb24:  ret
;******************************************************
nakopl: mov     A,R7
        add     A,BIN2
        mov     BIN2,A
        mov     A,R6
        addc    A,BIN1
        mov     BIN1,A
        mov     A,R5
        addc    A,BIN0
        mov     BIN0,A
        ret
;********************************************************
;===========================================================================================
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;*******************************************************************************************
;*******************************************************************************************
;ПОДПРОГРАММЫ ОТНОСЯЩИЕСЯ К ИЗМЕРЕНИЮ
;*******************************************************************************************
;*******************************************************************************************
;****************************************************************************
;Подпрограмма измерения для опорного и измерительного каналов АЦП
;Результат измерительного канала в  I1h,I1m,I1l а опорного в I1oh,I1om,I1ol 
;----------------------------------------------------------------------------
izmer:  mov     SFRPAGE,#0      ; выключить таймер 2 на момент измерения (выключение)
        clr     TR2
        mov     SFRPAGE,#0Fh

;        call    anLamp          ;т.к. при измерениях всегда первым 
anLamp: 
        mov     MlSt,#1         ;анализ диапазона яркости лампочки
        mov     MlMl,#9Bh
        mov     StSt,#1
        mov     StMl,#0E9h
        mov     ChSt,TekWlH
        mov     ChMl,TekWlL
        call    anSize
;        ret



        mov     A,B             ;измеряется опорный канал, то по нему осущесвляем
        cjne    A,#0,iz1        ;установку яркости лампы а выключаем в измерительном


        mov     MlSt,#1         ;анализ диапазона яркости лампочки
        mov     MlMl,#73h
        mov     StSt,#1
        mov     StMl,#0E9h
        mov     ChSt,TekWlH
        mov     ChMl,TekWlL
        call    anSize

	mov	A,B
	cjne	A,#0,iidz1
        mov     YSR,#4

        jnb     maxLamp,iidz2
        jnb     medLamp,iidz2
        jmp     iz4a
iidz2:  setb    maxLamp
        setb    medLamp         ; очень максимальная яркость
        jmp     iz3
iidz1:



        mov     YSR,#4
	jb	medLamp,iizz1
        jnb     maxLamp,iizz1
        jmp     iz4a
iizz1:  setb    maxLamp
        clr     medLamp         ;максимальная яркость
        jmp     iz3





iz1:    cjne    A,#1,iz2
        mov     YSR,#4

	jb	maxLamp,iizz2
        jnb     medLamp,iizz2

        jmp     iz4a
iizz2:  clr     maxLamp         ;средняя яркость
        setb    medLamp 
        jmp     iz3
iz2:    
;анализ диапазона >800nm
;        mov     MlSt,#1         ;анализ диапазона яркости лампочки
;        mov     MlMl,#0E9h
;        mov     StSt,#3
;        mov     StMl,#20h
;        mov     ChSt,TekWlH
;        mov     ChMl,TekWlL
;        call    anSize
;        mov     A,B
;        cjne    A,#2,iz2a
;        jmp     iz0
;iz2a:
        mov     YSR,#8
        jb      maxLamp,iizz3
        jb      medLamp,iizz3
        jmp     iz4a
        
iizz3:  clr     maxLamp         ;минимальная яркость
        clr     medLamp 
iz3:    mov     R5,#2Ah         ;задержка включения лампы
        mov     R6,#0FFh
        mov     R7,#0FFh
iz4:    djnz    R7,iz4
        djnz    R6,iz4
        djnz    R5,iz4
iz4a:
        call    getACP
        mov     I1oh,ADR15
        mov     I1om,ADR14
        mov     I1ol,ADR13
        mov     I1h,ADR11
        mov     I1m,ADR10
        mov     I1l,ADR9
        jnb     bitTTT,iz5
        mov     SFRPAGE,#0Fh
        setb    trstat          ;включить термостат
;	call	onTrst
iz5:    clr     bitTTT
;        clr     maxLamp         ;минимальная яркость
;        clr     medLamp 
        mov     SFRPAGE,#0
        setb    TR2             ;включить таймер2
        mov     SFRPAGE,#0Fh
        ret


;***********************************************************
;Подпрограмма измерения светового сигнала.
;Измерение производится по формуле I=Is-It, где
;    Is - величина сигнала при открытом модуляторе
;    It - величина сигнала при закрытом модуляторе, т.е. темн. ток.
;Измерение Is  и It проводится n-ое количество раз определяемое ячейкой NAKOP
; и вычисляется по формуле: n = 2**NAKOP. Результат суммируется и
;делится на коэффициент усиления. Берется целая часть.
;Результат состоит из трех байт в результате накопления и помещается
;в ячейки I1h,I1m,I1l. Используются ячейки ADR0..ADR15.

;***********************************************************
;izmIK:  call    getACP
;        mov     I1h,ADR11
;        mov     I1m,ADR10
;        mov     I1l,ADR9
;        jnb     prTrst,izIK1
;	call	onTrst          
;izIK1:  clr     maxLamp         ;минимальная яркость
;        clr     medLamp 
;        ret
;***********************************************************
;Подпрограмма измерения      (Общая)
;Результат измерения в ADR9..11,ADR13..15
;***********************************************************
getACP:	call	initRDacp
        jnb     SINC,$
getA_1: 
;        mov     R0,#0FFh
;        djnz    R0,$



;        mov     SFRPAGE,#0      ;чтение АЦП
;	clr	AD0INT
;	setb	AD0BUSY
;	jnb	AD0INT,$
;       mov     SFRPAGE,#1      ;чтение АЦП
;	clr	AD1INT	
;	setb	AD1BUSY
;	jnb	AD1INT,$


	call	nakkk
        call    nakop           ;накопление
	jb	yskor,getA_2
        jb      SINC,$
        jnb     SINC,$
getA_2:
        djnz    ADR0,getA_1
        mov     SFRPAGE,#0Fh
        ret
;*************************************************************************
;Подпрограмма накопления суммы показаний АЦП в ячейках ADR9..11,ADR13..ADR15
;ячейка ADR9 и ADR13 младшая
;*************************************************************************
nakop:  mov     SFRPAGE,#1
        mov     A,ADC1L         ;накопление для измерительного канала
        add     A,ADR9
        mov     ADR9,A
        mov     A,ADC1H
        addc    A,ADR10
        mov     ADR10,A
        mov     A,#0
        addc    A,ADR11
        mov     ADR11,A
        mov     SFRPAGE,#0
        mov     A,ADC0L         ;накопление для опорного канала
        add     A,ADR13
        mov     ADR13,A
        mov     A,ADC0H
        addc    A,ADR14
        mov     ADR14,A
        mov     A,#0
        addc    A,ADR15
        mov     ADR15,A
        ret




;*************************************************************************
;Подпрограмма накопления суммы показаний АЦП в ячейках ADR9..11,ADR13..ADR15
;ячейка ADR9 и ADR13 младшая
;*************************************************************************
nakkk:  
;...........................................
	mov	DPTR,#3840
	clr	A
	movx	@DPTR,A		;3840
	inc	DPTR
	movx	@DPTR,A		;3641	
	inc	DPTR
	movx	@DPTR,A		;3842
	inc	DPTR
	movx	@DPTR,A		;3843
	inc	DPTR
	movx	@DPTR,A		;3844
	inc	DPTR
	movx	@DPTR,A		;3845
;...........................................

	mov	R4,#255

nakk1:
        mov     SFRPAGE,#0      ;чтение АЦП
	clr	AD0INT
	setb	AD0BUSY
	jnb	AD0INT,$
        mov     SFRPAGE,#1      ;чтение АЦП
	clr	AD1INT	
	setb	AD1BUSY
	jnb	AD1INT,$


	mov	DPTR,#3840
	movx	A,@DPTR
	mov	R5,A
	mov     SFRPAGE,#1
        mov     A,ADC1L         ;накопление для измерительного канала
        add     A,R5
	movx	@DPTR,A		;ml
	inc	DPTR
	movx	A,@DPTR
	mov	R5,A
	mov     SFRPAGE,#1
        mov     A,ADC1H
        addc    A,R5
	movx	@DPTR,A		;sr
	inc	DPTR
	movx	A,@DPTR
	mov	R5,A
        mov     A,#0
        addc    A,R5
	movx	@DPTR,A		;st
	inc	DPTR


	movx	A,@DPTR
	mov	R5,A
	mov     SFRPAGE,#0
        mov     A,ADC0L         ;накопление для опорного канала
        add     A,R5
	movx	@DPTR,A		;ml
	inc	DPTR
	movx	A,@DPTR
	mov	R5,A
	mov     SFRPAGE,#0
        mov     A,ADC0H
        addc    A,R5
	movx	@DPTR,A		;sr
	inc	DPTR
	movx	A,@DPTR
	mov	R5,A
        mov     A,#0
        addc    A,R5
	movx	@DPTR,A		;st
;	inc	DPTR

	call	zdIzm		
	dec	R4
	cjne	R4,#0FFh,nakk1

;	djnz	R4,nakk1	; и все это 16 раз

	mov	DPTR,#3840	; усреднение для ИК
	movx	A,@DPTR		; в R7,R6,R5 информация с ИК
	mov	R5,A
	inc	DPTR
	movx	A,@DPTR
	mov	R6,A
	inc	DPTR
	movx	A,@DPTR
	mov	R7,A

;	anl	5,#0F0h
	mov	A,R6
;	anl	A,#0Fh
;	orl	A,R5
;	swap	A		;в ACC. усредненный младший байт ИК
	mov     SFRPAGE,#1
        mov     ADC1L,A         ; посылаем его в ADC1L

;	anl	6,#0F0h
	mov	A,R7
;	anl	A,#0Fh
;	orl	A,R6
;	swap	A		;в ACC. усредненный старший байт ИК
	mov     SFRPAGE,#1
        mov     ADC1H,A         ; посылаем его в ADC1H

	mov	DPTR,#3843	; усреднение для OК
	movx	A,@DPTR		; в R7,R6,R5 информация с OК
	mov	R5,A
	inc	DPTR
	movx	A,@DPTR
	mov	R6,A
	inc	DPTR
	movx	A,@DPTR
	mov	R7,A

;	anl	5,#0F0h
	mov	A,R6
;	anl	A,#0Fh
;	orl	A,R5
;	swap	A		;в ACC. усредненный младший байт OК
	mov     SFRPAGE,#0
        mov     ADC0L,A         ; посылаем его в ADC0L

;	anl	6,#0F0h
	mov	A,R7
;	anl	A,#0Fh
;	orl	A,R6
;	swap	A		;в ACC. усредненный старший байт OК
	mov     SFRPAGE,#0
        mov     ADC0H,A         ; посылаем его в ADC0H

        ret

;_______________________________________________________
zdIzm:	mov	SFRPAGE,#0Fh
zdIz1:	cpl	P5.0
;	djnz	R6,zdIz1
	ret
;*************************************************************************
;Подпрограмма накопления суммы показаний АЦП в ячейках ADR9..11,ADR13..ADR15
;ячейка ADR9 и ADR13 младшая
;*************************************************************************
;nakkk:  
;	mov	DPTR,#3840
;	clr	A
;	movx	@DPTR,A		;3840
;	inc	DPTR
;	movx	@DPTR,A		;3641	
;	inc	DPTR
;	movx	@DPTR,A		;3842
;	inc	DPTR
;	movx	@DPTR,A		;3843
;	inc	DPTR
;	movx	@DPTR,A		;3844
;	inc	DPTR
;	movx	@DPTR,A		;3845
;;...........................................
;
;	mov	R4,#16
;
;nakk1:
;        mov     SFRPAGE,#0      ;чтение АЦП
;	clr	AD0INT
;	setb	AD0BUSY
;	jnb	AD0INT,$
;       mov     SFRPAGE,#1      ;чтение АЦП
;	clr	AD1INT	
;	setb	AD1BUSY
;	jnb	AD1INT,$


;	mov	DPTR,#3840
;	movx	A,@DPTR
;	mov	R5,A
;	mov     SFRPAGE,#1
;       mov     A,ADC1L         ;накопление для измерительного канала
;        add     A,R5
;	movx	@DPTR,A		;ml
;	inc	DPTR
;	movx	A,@DPTR
;	mov	R5,A
;	mov     SFRPAGE,#1
;       mov     A,ADC1H
;        addc    A,R5
;	movx	@DPTR,A		;sr
;	inc	DPTR
;	movx	A,@DPTR
;	mov	R5,A
 ;       mov     A,#0
 ;       addc    A,R5
;	movx	@DPTR,A		;st
;	inc	DPTR
;
;
;	movx	A,@DPTR
;	mov	R5,A
;	mov     SFRPAGE,#0
 ;       mov     A,ADC0L         ;накопление для опорного канала
  ;      add     A,R5
;	movx	@DPTR,A		;ml
;	inc	DPTR
;	movx	A,@DPTR
;	mov	R5,A
;	mov     SFRPAGE,#0
 ;       mov     A,ADC0H
  ;      addc    A,R5
;	movx	@DPTR,A		;sr
;	inc	DPTR
;	movx	A,@DPTR
;	mov	R5,A
 ;       mov     A,#0
  ;      addc    A,R5
;	movx	@DPTR,A		;st

;	call	zdIzm		
;	djnz	R4,nakk1	; и все это 16 раз

;	mov	DPTR,#3840	; усреднение для ИК
;	movx	A,@DPTR		; в R7,R6,R5 информация с ИК
;	mov	R5,A
;	inc	DPTR
;	movx	A,@DPTR
;	mov	R6,A
;	inc	DPTR
;	movx	A,@DPTR
;	mov	R7,A
;
;	anl	5,#0F0h
;	mov	A,R6
;	anl	A,#0Fh
;	orl	A,R5
;	swap	A		;в ACC. усредненный младший байт ИК
;	mov     SFRPAGE,#1
 ;       mov     ADC1L,A         ; посылаем его в ADC1L
;
;	anl	6,#0F0h
;	mov	A,R7
;	anl	A,#0Fh
;	orl	A,R6
;	swap	A		;в ACC. усредненный старший байт ИК
;	mov     SFRPAGE,#1
 ;       mov     ADC1H,A         ; посылаем его в ADC1H
;
;	mov	DPTR,#3843	; усреднение для OК
;	movx	A,@DPTR		; в R7,R6,R5 информация с OК
;	mov	R5,A
;	inc	DPTR
;	movx	A,@DPTR
;	mov	R6,A
;	inc	DPTR
;	movx	A,@DPTR
;	mov	R7,A
;
;	anl	5,#0F0h
;	mov	A,R6
;	anl	A,#0Fh
;	orl	A,R5
;	swap	A		;в ACC. усредненный младший байт OК
;	mov     SFRPAGE,#0
 ;       mov     ADC0L,A         ; посылаем его в ADC0L
;
;	anl	6,#0F0h
;	mov	A,R7
;	anl	A,#0Fh
;	orl	A,R6
;	swap	A		;в ACC. усредненный старший байт OК
;	mov     SFRPAGE,#0
 ;       mov     ADC0H,A         ; посылаем его в ADC0H
;
 ;       ret

;_______________________________________________________
;zdIzm:	mov	R6,#2
;zdIz1:	mov	R7,#250
;	djnz	R7,$
;	djnz	R6,zdIz1
;	ret

;_______________________________________________________
;zdIzm:	nop
;zdIz1:	mov	R7,#100
;	djnz	R7,$
;;	djnz	R6,zdIz1
;	ret





;***********************************************************************
;Выключение термостата + задержка
;Подпрограмма подготовки ячеек для занесения считанных с АЦП кодов
;обнуляются ячейки ADR9,ADR10,ADR11 и ADR13,ADR14,ADR15 для накопления суммы, 
;а в ADR5 заносится число считываний АЦП путем возведения 2**NAKOPLEN
;***********************************************************************

initRDacp:
        mov     SFRPAGE,#0Fh
        jnb     trstat,iRa0
        setb    bitTTT 
iRA0:   clr     trstat          ;выключить термостат
        mov     R7,#0FFh         ;задержка
        djnz    R7,$
        mov     ADR1,#0         ;обнулить ячейки накопления суммы
        mov     ADR2,#0
        mov     ADR3,#0
        mov     A,#1            ;в зависимости от ячейки NAKOPLEN получить
        mov     ADR0,#NAKOPLEN        ;в ADR0 число 2**NAKOPLEN путем сдвига ACC.
        inc     ADR0
iRa1:   djnz    ADR0,iRa2       ;влево. Сохранить это число в ADR0  для
        mov     ADR0,A          ;подсчета накоплений и в ADR5 для
        mov     ADR5,A          ;последующих действий
        jmp     iRa3
iRa2:   rl      A
        jmp     iRa1

;чтение АЦП с усреднением
;	mov	ADR0,NAKOPLEN   ;YSR
;	inc	ADR0
iRa3: 
        mov     ADR9,#0         ;обнулить ячейки накопления суммы
        mov     ADR10,#0
        mov     ADR11,#0
        mov     ADR13,#0
        mov     ADR14,#0
        mov     ADR15,#0
        mov     ADR0,ADR5
;...........................................
;	mov	DPTR,#3840
;	clr	A
;	movx	@DPTR,A		;3840
;	inc	DPTR
;	movx	@DPTR,A		;3641	
;	inc	DPTR
;	movx	@DPTR,A		;3842
;	inc	DPTR
;	movx	@DPTR,A		;3843
;	inc	DPTR
;	movx	@DPTR,A		;3844
;	inc	DPTR
;	movx	@DPTR,A		;3845
;...........................................
	ret
;*************************************************************************
;ИЗМЕРЕHИЕ темнового тока на том же коэффициенте усиления:
;Темновой ток хранится в ячейках ItIh, ItIm, ItIl - для ИК
;				 ItOh, ItOm, ItOl - для OК
;*************************************************************************
izmTemn:
	clr	lamp		;выключить лампу
	mov	R5,#160
	mov	R6,#0FFh	;задержка
	mov	R7,#0FFh
izT_0:	djnz	R7,$
	djnz	R6,izT_0		
	call	stKey
	jnz	izT_1
	setb	konec
	djnz	R5,izT_0	
izT_1:  call    izmer
        mov	ItIh,I1h
	mov	ItIm,I1m
	mov	ItIl,I1l
        mov	ItOh,I1oh
	mov	ItOm,I1om
	mov	ItOl,I1ol
	setb	lamp		;включить лампу
	clr	medLamp
	clr	maxLamp
;	jb	konec,izT_4
        mov     R5,#160
	mov	R6,#0FFh	;задержка
	mov	R7,#0FFh
izT_3:	djnz	R7,$
	djnz	R6,izT_3
	call	stKey
	jnz	izT_4
        djnz    R5,izT_3
izT_4:	
	clr	konec
	ret

;**********************************************************************************************
;*******************************************************************
;Подпрограмма измерения пробы. Высвечивается сообщение
;и по нажатии ПУСК происходит измерение пробы, которая заносится в
;ячейки  I1h,I1m,I1l и I1oh,I1om,I1ol
;Если была нажата СТОП то выход из подпрограммы и установка бита
;konec. При измерении происходит подача звука.
;*******************************************************************
;izmProba:	
;        mov     DPTR,#iProba    ;измерение пробы
;        call    zagr
;        call    out_str1
;        mov     DPTR,#iNagStart
;        call    zagr
;        call    out_str2
;prb_1:  call    klav
;        cjne    A,#KlEsc,prb_2
;        call    zvyk            ;нажата ESC
;        setb    konec
;        ret		;
;prb_2:  cjne    A,#KlStart,prb_1
;        call    zvyk            ;нажата START
;prb_3:  call    izmer           ;измерить OК
;	call	zvyk
;	ret
;prb_5:	call	och
;	ret
;*******************************************************************

;*******************************************************************
;Подпрограмма измерения контроля. Высвечивается сообщение
;и по нажатии ПУСК происходит измерение контроля, который заносится в
;ячейки  Izh,Izm,Izl и Iozh,Iozm,Iozl
;Если была нажата СТОП то выход из подпрограммы и установка бита
;konec. При измерении происходит установка бита nul и подача звука
;*******************************************************************
izmKontr:  
        mov     DPTR,#iNol      ;
        call    zagr            ;выдать сообщ. ИЗМЕРИТЬ КОHТРОЛЬ
        call    out_str1
        mov     DPTR,#iNagZero
        call    zagr
        call    out_str2
	clr	konec
kontr1: call    klav
        cjne    A,#KlEsc,kontr2
        call    zvyk            ;нажата ESC
        setb    konec
        ret
kontr2: cjne    A,#KlZero,kontr1
        call    zvyk            ;нажата ZERO
	call	izmTemn
        call    izmer           ;измерить 
        mov     Iozh,I1oh       ;переслать в Iozh,Iozm,Iozl
        mov     Iozm,I1om
        mov     Iozl,I1ol
        mov     Izh,I1h         ;переслать в Izh,Izm,Izl
        mov     Izm,I1m
        mov     Izl,I1l
        setb    nul1            ;установить признак измерения контроля
        call    zvyk            ;подать протяжный звуковой сигнал
        call    zvyk
        call    zvyk
        ret


;****************************************************************************
;**********************************************************
;Измерение стандарта
;**********************************************************
izmSt:  mov     DPTR,#iStnd
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
izS2:   call    klav
        cjne    A,#KlEsc,izS3
        call    zvyk            ;нажата ESC
        setb    konec
        ret
izS3:   cjne    A,#KlStart,izS2
        call    zvyk            ;нажата START
	call	izmTemn
        call    izmer           ;измерить 
        call    D1		;вычислить плотность
        mov     A,ERROR
        jz      izS4
        jmp     izS5
izS4:   mov     R0,#As0		;сохранить стандарт в ячейках As0..As3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        setb    stand
        mov     DPTR,#iAs       ;вывод плотности на индикатор
        call    zagr
        call    obch2
        ret

izS5:	call    och             ;проиндицировать ошибку
;        setb    konec
        ret

;***************************************************************************************
;**********************************************************
;Измерение бланка стандарта
;**********************************************************
izmBS:  mov     DPTR,#iBlSt 
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
izBS2:  call    klav
        cjne    A,#KlEsc,izBS3
        call    zvyk            ;нажата ESC
        setb    konec
        clr     BlSt
        ret
izBS3:  cjne    A,#KlStart,izBS2
        call    zvyk            ;нажата START
	call	izmTemn
        call    izmer           ;измерить 
        call    D1
        mov     A,ERROR
        jz      izBS4
        jmp     izBS5
izBS4:  mov     R0,#Abs0
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        setb    BlSt
        mov     DPTR,#iAbs       ;вывод плотности на индикатор
        call    zagr
        call    obch2
        ret
izBS5:	call    och             ;проиндицировать ошибку
;        setb    konec
        ret



;**********************************************************
;Измерение бланка пробы
;**********************************************************
izmBP:  mov     DPTR,#iBlPr
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
izBP2:  call    klav
        cjne    A,#KlEsc,izBP3
        call    zvyk            ;нажата ESC
        setb    konec
        clr     BlPr
        ret
izBP3:  cjne    A,#KlStart,izBP2
        call    zvyk            ;нажата START
	call	izmTemn
        call    izmer           ;измерить OК
        call    D1
        mov     A,ERROR
        jz      izBP4
        jmp     izBP5
izBP4:  mov     R0,#Abp0
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
        setb    BlPr
        mov     DPTR,#iAbp       ;вывод плотности на индикатор
        call    zagr
        call    obch2
        ret
izBP5:	call    och             ;проиндицировать ошибку
;        setb    konec
        ret

;*****************************************************************************
;Подпрограмма обработки прерывания INT0
;производит декремент ячеек codeH, codeL и по нулю подает звуковой сигнал и устанавливает бит
;timEnd
;----------------------------------------------------
prINT0: push    ACC

        mov     A,YSR
        cjne    A,#0,prI1d
        clr     maxLamp         ;минимальная яркость
        clr     medLamp
        jmp     prI1e
prI1d:  dec     YSR
        
prI1e:  jnb     strtKin,prI0_3
;        mov     A,Rejim
;        cjne    A,#0,prI0_3     ;если режим ЗАПИСИ программы то prI0_3
;prI1g:
;        mov     A,podRej        ;анализ кинетики
;        anl     A,#3
;        cjne    A,#2,prI0_3
        djnz    codeL,prI0_1
        djnz    codeH,prI0_1
        jmp     prI0_2
prI0_1: dec     BIN0
        mov     A,BIN0
        cjne    A,#0FFh,prI0_3
        mov     BIN0,#9
        dec     BIN1
        mov     A,BIN1
        cjne    A,#0FFh,prI0_3
        mov     BIN1,#9
        dec     BIN2
        jmp     prI0_3
prI0_2: setb    timEnd
        call    zvyk
prI0_3: 
        setb    BitSEC
        pop     ACC
        reti
;----------------------------------------------------------------------
;Подпрограмма для задания времени отсчета одной фазы в кинетике
TFaz:   mov     R0,#PhH         ;переслать в аккумулятор код времени фазы
        jmp     TVr
;**************************************************************************
;Подпрограмма для задания времени отсчета  лагфазы в кинетике
TLag:   mov     R0,#LagH        ;переслать в аккумулятор код времени лагфазы
;-------------------------------------------------------------------------
TVr:    
        mov     codeH,@R0       ;занести в codeH,codeL длительность ...
        inc     R0
        mov     codeL,@R0
;        inc     codeH
        mov     BIN0,#0         ;перевести ее в десятичный код для обратного отсчета времени
        mov     BIN1,codeH
        mov     BIN2,codeL
        call    p1610

        mov     BIN2,DES2
        mov     A,DES3
        swap    A
        anl     A,#0Fh
        mov     BIN1,A
        mov     A,DES3
        anl     A,#0Fh
        mov     BIN0,A

        inc     codeH

        ret




;        mov     A,@R0
;        cjne    A,#1,TVr1       ;если код равен 1 то заносим 30 сек
;        mov     codeH,#1
;        mov     codeL,#30
;        mov     BIN2,#0
;        mov     BIN1,#3
;        mov     BIN0,#0
;TVr1:   cjne    A,#2,TVr2       ;если код равен 2 то заносим 60 сек
;        mov     codeH,#1
;        mov     codeL,#60
;        mov     BIN2,#0
;        mov     BIN1,#6
;        mov     BIN0,#0
;TVr2:   cjne    A,#3,TVr3       ;если код равен 3 то заносим 90 сек
;        mov     codeH,#1
;        mov     codeL,#90
;        mov     BIN2,#0
;        mov     BIN1,#9
;        mov     BIN0,#0
;TVr3:   cjne    A,#4,TVr4       ;если код равен 4 то заносим 120 сек
;        mov     codeH,#1
;        mov     codeL,#120
;        mov     BIN2,#1
;        mov     BIN1,#2
;        mov     BIN0,#0
;TVr4:   cjne    A,#5,TVr5       ;если код равен 5 то заносим 150 сек
;        mov     codeH,#1
;        mov     codeL,#150
;        mov     BIN2,#1
;        mov     BIN1,#5
;        mov     BIN0,#0
;TVr5:   cjne    A,#6,TVr6       ;если код равен 6 то заносим 180 сек
;        mov     codeH,#1
;        mov     codeL,#180
;        mov     BIN2,#1
;        mov     BIN1,#8
;        mov     BIN0,#0
;TVr6:   cjne    A,#7,TVr7       ;если код равен 7 то заносим 210 сек
;        mov     codeH,#1
;        mov     codeL,#210
;        mov     BIN2,#2
;        mov     BIN1,#1
;        mov     BIN0,#0
;TVr7:   cjne    A,#8,TVr8       ;если код равен 8 то заносим 240 сек
;        mov     codeH,#1
;        mov     codeL,#240
;        mov     BIN2,#2
;        mov     BIN1,#4
;        mov     BIN0,#0
;TVr8:   cjne    A,#9,TVr9       ;если код равен 9 то заносим 270 сек
;        mov     codeH,#2
;        mov     codeL,#0Eh
;        mov     BIN2,#2
;        mov     BIN1,#7
;        mov     BIN0,#0
;TVr9:   cjne    A,#10,TVr10     ;если код равен 10 то заносим 300 сек
;        mov     codeH,#2
;        mov     codeL,#2Ch
;        mov     BIN2,#3
;        mov     BIN1,#0
;        mov     BIN0,#0
;TVr10:  ret

;*************************************************************************************
;Подпрограмма индикации фазы с обратным отсчетом времени
;*************************************************************************************
iFaz:
 db    20h,0AAh,61h,0B7h,61h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,63h
;      .   ф    а   з    a   .   .   .   .   .   .   .   .   .   .   c
;-------------------------------------------------------------------------------------
indFaz: mov     DPTR,#iFaz
        call    zagr
        mov     R0,#ZN6
        mov     A,PrJ 
;        mov     B,#10
;        div     AB
        orl     A,#30h
        mov     @R0,A
;        inc     R0
;        mov     A,B
;        orl     A,#30h
;        mov     @R0,A
        jmp     indF

;*************************************************************************************
;Подпрограмма индикации лагфазы с обратным отсчетом времени
;*************************************************************************************
iLag1:
 db    20h,0A7h,61h,0B4h,0E4h,61h,0B7h,61h,20h,20h,20h,20h,20h,20h,20h,63h
;      .   Л    а   г    ф    а   з    a   .   .   .   .   .   .   .   c
;-------------------------------------------------------------------------------------
indLag: 
        mov     DPTR,#iLag1
        call    zagr
indF:   
        mov     R0,#ZN12
        mov     A,BIN2
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,BIN1
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,BIN0
        orl     A,#30h
        mov     @R0,A
indL_1: ret

        


;----------------------------------------------------------------------
;ПРОГРАММИРОВАНИЕ таймера 3 для работы UART0 на частоте 9600
;----------------------------------------------------------------------
RS9600: mov     SFRPAGE,#1h     ;
        mov     TMR3CF,#00001000b      ; Timer 3 Configuration
        mov     RCAP3L,#61h     ; Timer 3 Reload Register Low Byte
        mov     RCAP3H,#0FFh    ; Timer 3 Reload Register High Byte
        mov     TMR3H,#0h       ; Timer 3 High Byte
        mov     TMR3L,#0h       ; Timer 3 Low Byte
        mov     TMR3CN,#4h      ; Timer 3 Control Register (включение)
        mov     SFRPAGE,#0Fh    ;
        ret
;----------------------------------------------------------------------
;----------------------------------------------------------------------
;ПРОГРАММИРОВАНИЕ таймера 3 для работы UART0 на частоте 2400
;----------------------------------------------------------------------
RS2400: mov     SFRPAGE,#1h     ;
        mov     TMR3CF,#00001000b      ; Timer 3 Configuration
        mov     RCAP3L,#82h     ; Timer 3 Reload Register Low Byte
        mov     RCAP3H,#0FDh    ; Timer 3 Reload Register High Byte
        mov     TMR3H,#0h       ; Timer 3 High Byte
        mov     TMR3L,#0h       ; Timer 3 Low Byte
        mov     TMR3CN,#4h      ; Timer 3 Control Register (включение)
        mov     SFRPAGE,#0Fh    ;
        ret
;----------------------------------------------------------------------

;*********************************************************************
;Подпрограмма загрузки принтерных ячеек из ПП по адресу DPTR
; (A,R0,R1,R2,DPTR)  (откорр.)
;*********************************************************************
pzagr:  mov     R0,#PrinAdr     ;принтерная строка формируется с нулевого адреса ОЗУ
pzagr_1:
        clr     A
        movc    A,@A+DPTR
        mov     SFRPAGE,#0
        mov     EMI0CN,#0
        movx    @R0,A
        inc     R0
        inc     DPTR
        cjne    R0,#PrinAdr+37,pzagr_1
        ret

pPV:    db  20h,20h,50h,56h,20h,31h,32h,35h,31h,20h,20h,20h,20h,2Eh,20h,20h,2Eh,32h
;           .   .   P   V   .   1   2   5   1   .   .   .   .   ,   .   .   ,   2
;           1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18
        db  30h,20h,20h,0A3h,2Eh,20h,20h,20h,3Ah,20h,20h,3Ah,20h,20h,20h,20h,20h,20h
;           0   .   .   г    .   .   .   .   :   .   .   :   .   .   .   .   .   .
;           19  20  21  22   23  24  25  26  27  28  29  30  31  32  33  34  35  36

;*************************************************************************************
;Подпрограмма вывода на термопринтер первой строки, например
;"  PV 1251  15.02.2005г. 09:23:56    " время и год считываются из микросхемы часов
;*************************************************************************************
pStr1:  call    RS9600
        mov     DPTR,#pPV
        call    pzagr

        mov     ADRl,#YEAR      ;чтение ГОДА. из м/с часов и запись в принтерную
        call    rdDS            ;строку с адреса 20
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+19         
;        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+20        
;        mov     EMI0CN,#0
        movx    @R0,A

        mov     ADRl,#DATE      ;чтение ЧИСЛА из м/с часов и запись в принтерную
        call    rdDS            ;строку с адреса 12
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+11         
;        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+12        
;        mov     EMI0CN,#0
        movx    @R0,A

        mov     ADRl,#MONTH     ;чтение МЕСЯЦА из м/с часов и запись в принтерную
        call    rdDS            ;строку с адреса 15
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+14         
;        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+15        
;        mov     EMI0CN,#0
        movx    @R0,A

        mov     ADRl,#HOURS     ;чтение ЧАСОВ из м/с часов и запись в принтерную
        call    rdDS            ;строку с адреса 25
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+24         
;        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+25        
;        mov     EMI0CN,#0
        movx    @R0,A

        mov     ADRl,#MINUT     ;чтение МИНУТ из м/с часов и запись в принтерную
        call    rdDS            ;строку с адреса 28
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+27         
;        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+28        
;        mov     EMI0CN,#0
        movx    @R0,A

        mov     ADRl,#SEK       ;чтение МИНУТ из м/с часов и запись в принтерную
        call    rdDS            ;строку с адреса 31
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+30         
;        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+31        
;        mov     EMI0CN,#0
        movx    @R0,A


;непосредственно - печать
        mov     SFRPAGE,#0
        mov     R0,#PrinAdr
pStr1_1:
        movx    A,@R0
        mov     SFRPAGE,#0
        mov     SBUF0,A         ;Посылка 
        call    delay1
        inc     R0
        cjne    R0,#PrinAdr+35,pStr1_1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
        mov     SFRPAGE,#0Fh
        ret       



;*************************************************************************************
;Подпрограмма вывода на термопринтер второй строки, 
;в виде прочерков
;*************************************************************************************
pStr2:  
        mov     SFRPAGE,#0
        mov     R0,#PrinAdr
        mov     A,#0C4h         ;в ACC код прочерка
pStr2_1:
        mov     SFRPAGE,#0
        mov     SBUF0,A         ;Посылка 
        call    delay1
        inc     R0
        cjne    R0,#PrinAdr+35,pStr2_1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
        mov     SFRPAGE,#0Fh
        ret       
;*********************************************************************************************
pProba: db  20h,8Fh,0E0h,0AEh,0A1h,0A0h,0B3h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,0B3h
;           .   П   p    o    б    а    !    .   .   .   .   .   .   ,   .   .   .   !
;           1   2   3    4    5    6    7   8    9   10  11  12  13  14  15  16  17  18
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   .    .   .   .   .   .   .   .   .   .   .
;           19  20  21  22   23  24  25  26  27  28  29  30  31  32  33  34  35  36
;______________________________________________________________________________________________
pKT:
 db    8Ah,0AEh,0ADh,2Eh,20h,0E2h,0AEh,0E7h,0AAh,0A0h
;      K   о    н    .       т    o    ч    к    a  
pKn:
 db    20h,8Ah,0A8h,0ADh,0A5h,0E2h,0A8h,0AAh,0A0h,20h
;      .   K   и    н    e    т    и    к    а   .  
pDv:
 db    20h,84h,0A2h,0E3h,0E5h,0A2h,0AEh,0ABh,0ADh,2Eh
;      .   Д   в    у    х    в    o    л    н    ,  
;______________________________________________________________________________________________
pMetod:
 db    80h,8Bh,92h,2Dh,8Ch
         ;АЛТ-М                                       0
 db    80h,8Bh,92h,2Dh,91h
         ;АЛТ-С                                       1
 db    80h,8Bh,92h,2Dh,86h
         ;АЛТ-Ж                                       2
 db    80h,8Bh,81h,8Ch,20h
         ;АЛБM                                        3
 db    80h,8Ch,88h,8Bh,20h
         ;АМИЛ                                        4
 db    80h,91h,92h,2Dh,8Ch
         ;АCТ-M                                       5
 db    80h,91h,92h,2Dh,91h
         ;АCТ-C                                       6
 db    80h,91h,92h,2Dh,86h
         ;АCТ-Ж                                       7
 db    81h,88h,8Bh,2Dh,8Fh
         ;БИЛ-П                                       8
 db    81h,88h,8Bh,2Dh,8Eh
         ;БИЛ-O                                       9
 db    83h,85h,8Ch,83h,8Bh
         ;ГЕМГЛ                                       A
 db    83h,8Bh,9Eh,8Ah,20h
         ;ГЛЮК                                        B
 db    83h,8Bh,2Dh,83h,8Ah
         ;ГЛ-ГК                                       C
 db    20h,83h,92h,92h,20h
         ;ГТТ                                         D
 db    20h,86h,85h,8Bh,20h
         ;ЖЕЛ                                         E
 db    8Ah,80h,8Bh,88h,89h
         ;КАЛИй                                       F
 db    8Ah,80h,8Bh,9Ch,96h
         ;КАЛьц                                       10
 db    8Ah,2Eh,94h,8Eh,91h
         ;К.ФОС                                       11
 db    8Ah,90h,85h,80h,92h
         ;КРЕАТ                                       12
 db    20h,8Ah,94h,8Ah,20h
         ;КФК                                         13
 db    8Ah,94h,8Ah,8Ch,82h
         ;КФКMB                                       14
 db    20h,8Bh,84h,83h,20h
         ;ЛДГ                                         15
 db    8Ch,80h,83h,8Dh,20h
         ;МАГH                                        16
 db    8Bh,80h,8Ah,92h,20h
         ;ЛАКТ                                        17
 db    8Ch,8Ah,2Dh,92h,80h
         ;МК-ТА                                       18
 db    8Ch,8Eh,97h,85h,82h
         ;МОЧЕВ                                       19
 db    8Dh,80h,92h,90h,20h
         ;HАТР                                        1A
 db    8Eh,2Eh,81h,85h,8Bh
         ;О.БЕЛ                                       1B
 db    20h,92h,83h,20h,20h
         ;ТГ                                          1C
 db    94h,8Eh,91h,94h,20h
         ;ФОСФ                                        1D
 db    95h,8Bh,8Eh,90h,20h
         ;ХЛОР                                        1E
 db    20h,95h,8Eh,8Bh,20h
         ;ХOЛ                                         1F
 db    99h,2Eh,94h,8Eh,91h
         ;Щ.ФОС                                       20
 db    2Dh,2Dh,2Dh,2Dh,2Dh
         ;-----                                       21

;*************************************************************************************
;Подпрограмма вывода на термопринтер третьей строки, 
;*************************************************************************************
pStr3:  
        mov     SFRPAGE,#0
        mov     DPTR,#pProba
        call    pzagr
        mov     A,podRej        ;занесение режима работы
        anl     A,#00000011b
        cjne    A,#0,pStr3_1
        mov     DPTR,#pKT       
pStr3_1:
        cjne    A,#1,pStr3_2
        mov     DPTR,#pDv
pStr3_2:
        cjne    A,#2,pStr3_3
        mov     DPTR,#pKn
pStr3_3:       
        mov     R0,#PrinAdr+7   ;
pStr3_4:
        clr     A
        movc    A,@A+DPTR
;        mov     EMI0CN,#0
        movx    @R0,A
        inc     R0
        inc     DPTR
        cjne    R0,#PrinAdr+17,pStr3_4
;_________________________________________________________________________
;Подпрограмма печати  метода в зависимости от ячейки Metod
pMet:   mov     DPTR,#pMetod    ;в DPTR занести нач. адрес методов
;вычисление смещения
        mov     R0,#Metod
        mov     A,@R0
        mov     B,#5           ;
        mul     AB
        add     A,DPL
        mov     DPL,A
        mov     A,B
        addc    A,DPH
        mov     DPH,A

        mov     R0,#PrinAdr+19  ;в R0 занести яч. инд. в которую пишем
;        mov     R1,#0

pmet_1: clr     A
;        mov     A,R1
        movc    A,@A+DPTR
        movx    @R0,A
        inc     R0
;        inc     R1
        inc     DPTR
        cjne    R0,#PrinAdr+24,pmet_1
;вывод фактора или введенного значения стандарта
;--------------------------------------------------------------------------------------------
        mov     R1,#PrinAdr+26
        mov     A,podRej        ;занесение режима работы
        anl     A,#00001100b
        cjne    A,#0,pFCs_1
        mov     A,#'F'          ;занесение F=
        mov     R2,#'='
        mov     R3,#' '
        mov     R0,#ZnFakt
        jmp     pFCs_2                  
pFCs_1: cjne    A,#4h,pFCs_4a
        mov     A,#'C'          ;занесение Cs
        mov     R2,#'s'
        mov     R3,#'='
        mov     R0,#ZnCs
pFCs_2: 
        movx    @R1,A
        inc     R1
        mov     A,R2
        movx    @R1,A
        inc     R1
        mov     A,R3
        movx    @R1,A
        inc     R1

        call    pChislo
        mov     A,podRej        ;занесение режима работы
        anl     A,#00001100b
        cjne    A,#0,pFCs_3
        mov     R1,#PrinAdr+29
        mov     A,BIN0
        movx    @R1,A
        inc     R1
pFCs_2a:
        mov     A,BIN1
        movx    @R1,A
        inc     R1
        mov     A,BIN2
        movx    @R1,A
        inc     R1
        mov     A,BIN3
        movx    @R1,A
        inc     R1
        mov     A,BIN4
        movx    @R1,A
        inc     R1
        mov     A,BIN5
        movx    @R1,A
;        inc     R1

;непосредственно - печать
;        mov     SFRPAGE,#0
        mov     R0,#PrinAdr
pStr3_5:
        movx    A,@R0
        mov     SFRPAGE,#0
        mov     SBUF0,A         ;Посылка 
        call    delay1
        inc     R0
        cjne    R0,#PrinAdr+35,pStr3_5
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
pFCs_4: mov     SFRPAGE,#0Fh
        ret
pFCs_4a:
        mov     R1,#PrinAdr+29
        mov     A,#83h                  ;Г
        movx    @R1,A
        inc     R1
        mov     A,#0E0h                 ;р
        movx    @R1,A
        inc     R1
        mov     A,#0A0h                 ;a
        movx    @R1,A
        inc     R1
        mov     A,#0E4h                 ;ф
        movx    @R1,A
        inc     R1
        mov     A,#0A8h                 ;и
        movx    @R1,A
        inc     R1
        mov     A,#0AAh                 ;k
        movx    @R1,A
        mov     R0,#PrinAdr
        jmp     pStr3_5

pFCs_3: cjne    A,#4,pFCs_4
        mov     R1,#PrinAdr+29
        jmp     pFCs_2a

;********************************************************************************************
pProbel: 
        db  20h,20h,20h,20h,20h,20h,0B3h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,0B3h
;           .                       !    .   .   .   .   .   .   ,   .   .   .   !
;           1   2   3    4    5    6    7   8    9   10  11  12  13  14  15  16  17  18
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   .    .   .   .   .   .   .   .   .   .   .
;           19  20  21  22   23  24  25  26  27  28  29  30  31  32  33  34  35  36



;*************************************************************************************
;Подпрограмма вывода на термопринтер четвертой строки, 
;*************************************************************************************
pStr4:  
        mov     SFRPAGE,#0
        mov     DPTR,#pProbel
        call    pzagr

        mov     ADRh,#HIGH(NumSer)     ;занесение в принтерные ячейки номера серии
        mov     ADRl,#LOW(NumSer)
        call    readFM
        mov     R0,#PrinAdr+1
        mov     A,DANl
        mov     B,#10
        div     AB
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,B
        orl     A,#30h
        movx    @R0,A
;-----------------------------------------------------------------------------------------
pStr4_0:
        mov     R0,#PrinAdr+4           ;занесение в принтерные ячейки номера программы
        mov     R1,#NP
        mov     A,@R1
        mov     B,#10
        div     AB
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,B
        orl     A,#30h
        movx    @R0,A
;------------------------------------------------------------------------------------------
;занесение в принтерные ячейки длины волны
        mov     BIN0,#0
	mov	R0,#Lw1h
        mov     BIN1,@R0
	mov	R0,#Lw1l
        mov     BIN2,@R0
        call    p1610
        mov     R0,#PrinAdr+7
        mov     A,DES2
        orl     A,#30h
        movx    @R0,A           ;1
        inc     R0
        mov     A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;2
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;3
	inc	R0
        mov     A,#'n'
	movx	@R0,A           ;n
	inc	R0
        mov     A,#'m'
	movx	@R0,A           ;m
        mov     A,podRej                ;для двухволнового режима выводим вторую длину волны
        jb      acc.0,pStr4_1
        jmp     pStr4_1a

pStr4_1:  
        mov     BIN0,#0
	mov	R0,#Lw2h
        mov     BIN1,@R0
	mov	R0,#Lw2l
        mov     BIN2,@R0
        call    p1610
        mov     R0,#PrinAdr+12
        mov     A,DES2
        orl     A,#30h
        movx    @R0,A           ;1
        inc     R0
        mov     A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;2
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;3
	inc	R0
        mov     A,#'n'
	movx	@R0,A           ;n
	inc	R0
        mov     A,#'m'
	movx	@R0,A           ;m


;********************************************************
pStr4_1a:
        mov     R0,#Unit1       ;вывод единицы измерения
        mov     A,@R0
;        cjne    A,#0,pStr4_2
        mov     DPTR,#pBE1
;        jmp     pStr4_3
;pSstr4_2:  
;        mov     DPTR,#pBezEd
        mov     B,#7
        mul     AB
        add     A,DPL
        mov     DPL,A
        mov     A,B
        addc    A,DPH
        mov     DPH,A
pStr4_3:  

        mov     R0,#PrinAdr+18  ;в R0 занести яч. инд. в которую пишем
;        mov     R1,#0

pStr4_4: 
        clr     A
;        mov     A,R1
        movc    A,@A+DPTR
        movx    @R0,A
        inc     R0
;        inc     R1
        inc     DPTR
        cjne    R0,#PrinAdr+25,pStr4_4
;вывод концентрации (результата) из ячеек первого слагаемого
pStr4_5:
        call    obch1
        mov     R0,#PrinAdr+26
        mov     A,#'C'
        movx    @R0,A
        inc     R0
        mov     A,#'='
        movx    @R0,A
        inc     R0
        mov     A,BIN0
        movx    @R0,A
        inc     R0
        mov     A,BIN1
        movx    @R0,A
        inc     R0
        mov     A,BIN2
        movx    @R0,A
        inc     R0
        mov     A,BIN3
        movx    @R0,A
        inc     R0
        mov     A,BIN4
        movx    @R0,A
        inc     R0
        mov     A,BIN5
        movx    @R0,A
 ;непосредственно - печать
        mov     SFRPAGE,#0
        mov     R0,#PrinAdr
pStr4_6:
        movx    A,@R0
        mov     SFRPAGE,#0
        mov     SBUF0,A         ;Посылка 
        call    delay1
        inc     R0
        cjne    R0,#PrinAdr+35,pStr4_6
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
pStr4_7:
        mov     SFRPAGE,#0Fh
        ret

        
;********************************************************************************************
pLagFaz: 
        db  20h,4Eh,0E4h,3Dh,20h,20h,0B3h,20h,54h,0ABh,0A0h,0A3h,3Dh,20h,20h,20h,0E1h,0B3h
;           .   N   ф    =           !    .   T   л    а    г    =   ,   .   .   c    !
;           1   2   3    4    5    6    7   8    9   10  11  12  13  14  15  16  17  18
        db  92h,0E4h,3Dh,20h,20h,20h,0E1h,0B3h,43h,76h,3Dh,20h,20h,20h,20h,20h,20h,20h
;           T   ф    =    .   .   .  с    !    С   v   =   .   .   .   .   .   .   .
;           19  20  21  22   23  24  25  26  27  28  29  30  31  32  33  34  35  36


;*************************************************************************************
;Подпрограмма вывода на термопринтер пятой строки, для кинетики
;*************************************************************************************
pStr5:  mov     SFRPAGE,#0 
        mov     EMI0CN,#0

        mov     DPTR,#pLagFaz
        call    pzagr

        mov     R0,#NPh         ;вывод количества фаз
        mov     A,@R0
        mov     B,#10
        div     AB
        mov     R0,#PrinAdr+4
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,B
        orl     A,#30h
        movx    @R0,A
;-----------------------------------------------------------------------------------------
;вывод на термопринтер длительности лагфазы

        mov     R0,#LagH         ;занести длительность лагфазы в BIN0..BIN2
        mov     BIN0,#0
        mov     BIN1,@R0
        inc     R0
        mov     BIN2,@R0
        call    p1610

        mov     R0,#PrinAdr+13           ;занесение в принтерные ячейки лагфазы
        mov     A,DES2
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,DES3
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,DES3
        anl     A,#0Fh
        orl     A,#30h
        movx    @R0,A
;------------------------------------------------------------------------------------------
;занесение в принтерные ячейки длительности фазы

        mov     BIN0,#0
	mov	R0,#PhH
        mov     BIN1,@R0
	mov	R0,#PhL
        mov     BIN2,@R0
        call    p1610

        mov     R0,#PrinAdr+21
        mov     A,DES2
        orl     A,#30h
        movx    @R0,A           ;1
        inc     R0
        mov     A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;2
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;3

;********************************************************

;вывод коэффициента вариации 
        mov     R0,#NPh         ;если две фазы то коэффициент корреляции не выводится
        mov     A,@R0
        cjne    A,#1,pStr5_3
        jmp     pStr5_5
pStr5_3:
        mov     R0,#Cv0
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        inc     R0
        call    obch1
        mov     A,ERROR
        cjne    A,#Err_CONCENT,pStr5_4
        mov     R0,#PrinAdr+29
        mov     A,#3Eh
        movx    @R0,A
        inc     R0
        mov     A,#39h
        movx    @R0,A
        inc     R0
        movx    @R0,A
        inc     R0
        movx    @R0,A
        inc     R0
        movx    @R0,A
        jmp     pStr5_5
pStr5_4:
        mov     R0,#PrinAdr+29
        mov     A,BIN1
        movx    @R0,A
        inc     R0
        mov     A,BIN2
        movx    @R0,A
        inc     R0
        mov     A,BIN3
        movx    @R0,A
        inc     R0
        mov     A,BIN4
        movx    @R0,A
        inc     R0
        mov     A,BIN5
        movx    @R0,A
;непосредственно - печать
pStr5_5:
        mov     SFRPAGE,#0
        mov     R0,#PrinAdr
pStr5_6:
        movx    A,@R0
        mov     SFRPAGE,#0
        mov     SBUF0,A         ;Посылка 
        call    delay1
        inc     R0
        cjne    R0,#PrinAdr+35,pStr5_6
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
pStr5_7:
        mov     R0,#Abp0        ;возврат результата из ячеек для бланка пробы
        mov     ADR0,@R0        ;этот результат может использоваться при выводе на принтер
        inc     R0              ;pStr4
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        mov     SFRPAGE,#0Fh
        ret




;***********************************************************
pBE1:
 db    81h,0A5h,0A7h,20h,0A5h,0A4h,20h
;      Б   e    з    .   e    д    .  
pGL1:
 db    20h,20h,0A3h,2Fh,0ABh,20h,20h
;       .   .   г    /   л    .   .   
pGDl1:
 db    20h,0A3h,2Fh,0A4h,0ABh,20h,20h
;       .   г    /   д    л    .   .  
pMgDl1:
 db    20h,0ACh,0A3h,2Fh,0A4h,0ABh,20h
;       .   м    г    /   д    л    . 
pMkgL1:
 db    20h,0ACh,0AAh,0A3h,2Fh,0ABh,20h
;       .   м    к    г    /   л    . 
pMkgDl1:
 db    0ACh,0AAh,0A3h,2Fh,0A4h,0ABh,20h
;       м    к    г    /   д    л    .
pEdL1:
 db    20h,85h,0A4h,2Fh,0ABh,20h,20h
;      .   E    д    /   л    .   . 
pMmolL1:
 db    8Ch,0ACh,0AEh,0ABh,2Fh,0ABh,20h
;       M   м    o    л    /   л    .
pMkmolL1:
 db    8Ch,0AAh,0ACh,0AEh,0ABh,2Fh,0ABh
;       M   к    м    o    л    /   л 
pB1:
 db    20h,20h,81h,20h,20h,20h,20h
;       .   .   Б    .   .   .   .
;___________________________________________________________________________________
        
;***********************************************************
;Подпрограмма вывода на принтер четырехзначного числа 
;с запятой и знаком 
;исходные данные - 	R0 - указатель на число в формате
;						1)знак в старшем бите 0 - "+", 1 - "-"
;						 	младшая тетрада - 1 - запятая после первой цифры, 
;								   2 - после второй, 
;								   3 - после третьей,
;								   4 - целое число без запятых.
;						2)старший байт;
;						3)младший байт;
;					R1 - указатель на позицию принтера


;Число в формате с фиксированной запятой получается в BIN0 - знак BIN1..BIN5

;***********************************************************
pChislo:
        mov     BIN5,#20h 
        mov     A,@R0			;переслать знак в ACC
        jnb     ACC.7,pCh1
        mov     BIN0,#2Dh               ;- занесение "-" в знаковую ячейку
	jmp	pCh2
pCh1:	mov	BIN0,#20h		;+ занесение кода пробела в знаковую ячейку
pCh2:   clr     ACC.7			;очистить знаковый разряд
        mov     R2,A                    ;сохранение положения знака в R2
	inc	R0
        mov     A,@R0			;в ACC заносим старший байт
        mov     R3,A			;и сохраняем его в R3
	call	zHtetr			;отправляем старую тетраду в знаковую ячейку
        mov     BIN1,A
        mov	A,R3			;восстанавливаем в ACC старший байт
	call	zLtetr			;отправляем вторую тетраду в знаковую ячейку
        mov     BIN2,A
        inc     R0
        mov     A,@R0			;в ACC заносим младший байт
        mov     R3,A			;и сохраняем его в R3
	call	zHtetr			;отправляем старую тетраду в знаковую ячейку
        mov     BIN3,A
        mov	A,R3			;восстанавливаем в ACC старший байт
	call	zLtetr			;отправляем вторую тетраду в знаковую ячейку
        mov     BIN4,A
	mov	A,R2			;АНАЛИЗ положения запятой		
        cjne    A,#1,pCh3
        mov     BIN5,BIN4               ;запятая после первого знака
        mov     BIN4,BIN3               ;сдвигаем три цифры
        mov     BIN3,BIN2
        mov     BIN2,#2Ch
        jmp     pCh5
pCh3:   cjne    A,#2,pCh4
        mov     BIN5,BIN4               ;запятая после второго знака
        mov     BIN4,BIN3               ;сдвигаем  две цифры
        mov     BIN3,#2Ch
        jmp     pCh5
pCh4:   cjne    A,#3,pCh5

        mov     BIN5,BIN4               ;запятая после третьего знака
;        mov     BIN4,BIN3               ;сдвигаем  одну цифру
        mov     BIN4,#2Ch
pCh5:  ret






pProgr:
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,8Ch,0A5h,0E2h,0AEh,0A4h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   !    М   е    т    о    д    .   .   .   .   .
;           1   2   3   4   5   6   7   8    9   10   11   12   13   14  15  16  17  18
        db  20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,5Bh,20h,5Dh,20h,20h,20h
;           .   .   .   .   .   .   .   .    .   .   .  .   [   .   ]   .   .   .
;           19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания метода
;********************************************************************************************
pStr10:
        mov     SFRPAGE,#0
        mov     DPTR,#pProgr
        call    pzagr
        mov     A,podRej        ;занесение режима работы
        anl     A,#00000011b
        cjne    A,#0,pStr10_1
        mov     DPTR,#pKT       
pStr10_1:
        cjne    A,#1,pStr10_2
        mov     DPTR,#pDv
pStr10_2:
        cjne    A,#2,pStr10_3
        mov     DPTR,#pKn
pStr10_3:       
        mov     R0,#PrinAdr+20   ;
pStr10_4:
        clr     A
        movc    A,@A+DPTR
;        mov     EMI0CN,#0
        movx    @R0,A
        inc     R0
        inc     DPTR
        cjne    R0,#PrinAdr+30,pStr10_4
;_________________________________________________________________________
        mov     A,podRej
        anl     A,#00001100b
        cjne    A,#0,pStr10_5
        mov     A,#'F'                  ;F
pStr10_5:
        cjne    A,#4,pStr10_6
        mov     A,#'S'                  ;S
pStr10_6:
        cjne    A,#8,pStr10_7
        mov     A,#'G'                  ;G
pStr10_7:       
        mov     R0,#PrinAdr+31   ;
        movx    @R0,A
        call    pechat
        ret
;_________________________________________________________________________________



pZnatch:
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,87h,0ADh,0A0h,0E7h,0A5h,0ADh,0A8h,0A5h,20h,20h
;           .   .   .   .   .   .   .   !    З   н    а    ч    е    н    и    е    .   .
;           1   2   3   4   5   6   7   8    9   10   11   12   13   14  15  16  17  18
        db  20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   .    .   .   .  .   .   .   .   .   .   .
;           19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания метода
;********************************************************************************************
pStr11:
        mov     SFRPAGE,#0
        mov     DPTR,#pZnatch
        call    pzagr
        mov     R0,#PrinAdr+20
        mov     A,podRej        ;занесение режима работы
        anl     A,#00001100b
        cjne    A,#0,pStr11_1
        mov     A,#' '
        movx    @R0,A
        inc     R0
        mov     A,#'F'                  ;F
        movx    @R0,A
        inc     R0
        mov     A,#'='                  ;=
        movx    @R0,A
        mov     R0,#ZnFakt
        jmp     pStr11_3
pStr11_1:
        cjne    A,#4,pStr11_2
        mov     A,#'C'                  ;C
        movx    @R0,A
        inc     R0
        mov     A,#'s'                  ;s
        movx    @R0,A
        inc     R0
        mov     A,#'='                  ;=
        movx    @R0,A
        mov     R0,#ZnCs
        jmp     pStr11_3
pStr11_2:
        cjne    A,#8,pStr10_3
;        mov     A,#'G'                  ;G


        mov     R0,#Test
        mov     A,@R0
        jb      ACC.7,pStr11_2a
        mov     R0,#PrinAdr+20          ;график не строился выводим прочерки
        mov     A,#'G'                  ;G
        movx    @R0,A
        inc     R0
        mov     A,#'='                  ;=
        movx    @R0,A
        inc     R0


        mov     A,#'-'                  ;-
        movx    @R0,A
        inc     R0
        movx    @R0,A                   ;-
        inc     R0
        movx    @R0,A                   ;-
        inc     R0
        movx    @R0,A                   ;-
        inc     R0
        movx    @R0,A                   ;-
        mov     A,'x'
        movx    @R0,A                   ;x
        inc     R0
        mov     A,'+'
        movx    @R0,A                   ;+
        inc     R0
        mov     A,#'-'                  ;-
        movx    @R0,A
        inc     R0
        movx    @R0,A                   ;-
        inc     R0
        movx    @R0,A                   ;-
        inc     R0
        movx    @R0,A                   ;-
        inc     R0
        movx    @R0,A                   ;-
        ret
pStr11_2a:


        mov     R0,#As0         ;занести в первое слагаемое коэф. а
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    obch1           ;перевести в индик. коды
        mov     A,ERROR
        cjne    A,#Err_CONCENT,pStr11_2b
        mov     ERROR,#0
        mov     R0,#PrinAdr+20          ;ошибка -  выводим >999
        mov     A,#'G'                  ;G
        movx    @R0,A
        inc     R0
        mov     A,#'='                  ;=
        movx    @R0,A
        inc     R0

        mov     A,#' '                  ;
        movx    @R0,A
        inc     R0
        mov     A,#'>'                  ;>
        movx    @R0,A
        inc     R0
        mov     A,#'9'                  ;9
        movx    @R0,A
        inc     R0
        movx    @R0,A                   ;9
        inc     R0
        movx    @R0,A                   ;9
        inc     R0
        movx    @R0,A                   ;9
        jmp     pStr11_2c
pStr11_2b:
        mov     R0,#PrinAdr+20          ;
        mov     A,#'G'                  ;G
        movx    @R0,A
        inc     R0
        mov     A,#'='                  ;=
        movx    @R0,A
        inc     R0
        mov     A,BIN0
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN1
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN2
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN3
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN4
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN5
        movx    @R0,A                   ;
        inc     R0
        mov     A,#'x'
        movx    @R0,A                   ;x
        inc     R0
        mov     A,#'+'
        movx    @R0,A                   ;+
        inc     R0


pStr11_2c:
        mov     R0,#HH         ;занести в первое слагаемое коэф. b
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    obch1           ;перевести в индик. коды
        mov     A,ERROR
        cjne    A,#Err_CONCENT,pStr11_2d
        mov     ERROR,#0

        mov     R0,#PrinAdr+29          ;ошибка -  выводим >999

        mov     A,#' '                  ;
        movx    @R0,A
        inc     R0
        mov     A,#'>'                  ;>
        movx    @R0,A
        inc     R0
        mov     A,#'9'                  ;9
        movx    @R0,A
        inc     R0
        movx    @R0,A                   ;9
        inc     R0
        movx    @R0,A                   ;9
        inc     R0
        movx    @R0,A                   ;9
        jmp     pStr11_2e

pStr11_2d:
        mov     R0,#PrinAdr+29
        mov     A,BIN0
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN1
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN2
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN3
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN4
        movx    @R0,A                   ;
        inc     R0
        mov     A,BIN5
        movx    @R0,A                   ;
        inc     R0
pStr11_2e:
        call    pechat
        ret
;

        ;
        ;
pStr11_3: 
        call    pChislo
        mov     R0,#PrinAdr+24
        mov     A,BIN0
        movx    @R0,A
        inc     R0
pStr11_4:
        mov     A,BIN1
        movx    @R0,A
        inc     R0
        mov     A,BIN2
        movx    @R0,A
        inc     R0
        mov     A,BIN3
        movx    @R0,A
        inc     R0
        mov     A,BIN4
        movx    @R0,A
        inc     R0
        mov     A,BIN5
        movx    @R0,A
        call    pechat
        ret
;_________________________________________________________________________________



pDlVoln:
        db  20h,8Fh,0E0h,0AEh,0A3h,0E0h,2Eh,0B3h,84h,0ABh,0A8h,0ADh,0EBh,20h,0A2h,0AEh,0ABh,0ADh
;           .   П   р    о    г    р    ,   !    Д   л    и    н    ы    .   в    о    л    н
;           1   2   3    4    5    6    7   8    9   10   11   12   13   14  15   16   17   18
        db  20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   .    .   .   .  .   .   .   .   .   .   .
;           19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания длин волн
;********************************************************************************************
pStr12:
        mov     SFRPAGE,#0
        mov     DPTR,#pDlVoln
        call    pzagr

;занесение в принтерные ячейки длины волны
        mov     BIN0,#0
	mov	R0,#Lw1h
        mov     BIN1,@R0
	mov	R0,#Lw1l
        mov     BIN2,@R0
        call    p1610
        mov     R0,#PrinAdr+20
        mov     A,DES2
        orl     A,#30h
        movx    @R0,A           ;1
        inc     R0
        mov     A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;2
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;3
	inc	R0
        mov     A,#'n'
	movx	@R0,A           ;n
	inc	R0
        mov     A,#'m'
	movx	@R0,A           ;m
        mov     A,podRej                ;для двухволнового режима выводим вторую длину волны
        jb      acc.0,pStr12_1
        jmp     pStr12_2

pStr12_1:  
        mov     BIN0,#0
	mov	R0,#Lw2h
        mov     BIN1,@R0
	mov	R0,#Lw2l
        mov     BIN2,@R0
        call    p1610
        mov     R0,#PrinAdr+27
        mov     A,DES2
        orl     A,#30h
        movx    @R0,A           ;1
        inc     R0
        mov     A,DES3
	swap	A
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;2
	inc	R0
        mov     A,DES3
	anl	A,#0Fh
	orl	A,#30h
	movx	@R0,A           ;3
	inc	R0
        mov     A,#'n'
	movx	@R0,A           ;n
	inc	R0
        mov     A,#'m'
	movx	@R0,A           ;m
pStr12_2:
        call    pechat
        ret
;_________________________________________________________________________________




pParametr:
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,8Fh,0A0h,0E0h,0A0h,0ACh,0A5h,0E2h,0E0h,20h,20h
;           .   .   .   .   .   .   .   !    П   а    р    а    м    е    т    р    .   .
;           1   2   3   4   5   6   7   8    9   10   11   12   13   14   15   16   17  18
        db  20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   .    .   .   .  .   .   .   .   .   .   .
;           19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания  методики
;********************************************************************************************
pStr13:
        mov     SFRPAGE,#0
        mov     DPTR,#pParametr
        call    pzagr
;-----------------------------------------------------------------------------------------
        mov     R0,#PrinAdr+2           ;занесение в принтерные ячейки номера программы
        mov     R1,#NP
        mov     A,@R1
        mov     B,#10
        div     AB
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,B
        orl     A,#30h
        movx    @R0,A
;-----------------------------------------------------------------------------------------
;Подпрограмма печати  метода в зависимости от ячейки Metod
        mov     DPTR,#pMetod    ;в DPTR занести нач. адрес методов
;вычисление смещения
        mov     R0,#Metod
        mov     A,@R0
        mov     B,#5           ;
        mul     AB
        add     A,DPL
        mov     DPL,A
        mov     A,B
        addc    A,DPH
        mov     DPH,A
        mov     R0,#PrinAdr+20  ;в R0 занести яч. инд. в которую пишем
pStr13_1: 
        clr     A
        movc    A,@A+DPTR
        movx    @R0,A
        inc     R0
        inc     DPTR
        cjne    R0,#PrinAdr+25,pStr13_1
        call    pechat
        ret
 
;************************************************************************************************
pEdIzm:
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,85h,0A4h,2Eh,0A8h,0A7h,0ACh,2Eh,20h,20h,20h
;           .   .   .   .   .   .   .   !    Е   д    .   и    з    м    .   .   .   .
;           1   2   3   4   5   6   7   8    9   10   11  12   13   14   15   16   17  18
        db  20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   .    .   .   .  .   .   .   .   .   .   .
;           19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания единицы измерения
;********************************************************************************************
pStr14:
        mov     SFRPAGE,#0
        mov     DPTR,#pEdIzm
        call    pzagr
;-----------------------------------------------------------------------------------------
;********************************************************
        mov     R0,#Unit1       ;вывод единицы измерения
        mov     A,@R0
        mov     DPTR,#pBE1
        mov     B,#7
        mul     AB
        add     A,DPL
        mov     DPL,A
        mov     A,B
        addc    A,DPH
        mov     DPH,A
        mov     R0,#PrinAdr+20  ;в R0 занести яч. инд. в которую пишем
pStr14_1: 
        clr     A
        movc    A,@A+DPTR
        movx    @R0,A
        inc     R0
        inc     DPTR
        cjne    R0,#PrinAdr+27,pStr14_1
        call    pechat
        ret


;************************************************************************************************
pCBl:
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,91h,20h,0A1h,0ABh,0A0h,0ADh,0AAh,0A0h,0ACh,0A8h
;           .   .   .   .   .   .   .   !    С   .   б    л    а    н    к    а    м    и
;           1   2   3   4   5   6   7   8    9   10   11  12   13   14   15   16   17  18
        db  20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   .    .   .   .  .   .   .   .   .   .   .
;           19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания фразы "С бланками"
;********************************************************************************************
pStr15:
        mov     SFRPAGE,#0
        mov     DPTR,#pCBl
        call    pzagr
        call    pechat
        ret

;************************************************************************************************
pLagFaza:
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,8Bh,0A0h,0A3h,2Eh,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   !    Л   а    г    ,   .   .   .   .   .    .
;           1   2   3   4   5   6   7   8    9   10   11  12   13  14  15  16  17  18
        db  20h,20h,20h,20h,20h,0E1h,0A5h,0AAh,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   c    e    k    .   .   .  .   .   .   .   .   .   .
;           19  20  21  22  23  24   25   26   27  28  29  30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания лагфазы
;********************************************************************************************
pStr16:
        mov     SFRPAGE,#0
        mov     DPTR,#pLagFaza
        call    pzagr

;вывод на термопринтер длительности лагфазы

        mov     R0,#LagH         ;занести длительность лагфазы в BIN0..BIN2
        mov     BIN0,#0
        mov     BIN1,@R0
        inc     R0
        mov     BIN2,@R0
        call    p1610
        mov     R0,#PrinAdr+20           ;занесение в принтерные ячейки лагфазы
        mov     A,DES2
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,DES3
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,DES3
        anl     A,#0Fh
        orl     A,#30h
        movx    @R0,A
;------------------------------------------------------------------------------------------
        call    pechat
        ret

;************************************************************************************************
pFaza:
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,94h,0A0h,0A7h,0A0h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   !    Ф   а    з    а    .   .   .   .   .    .
;           1   2   3   4   5   6   7   8    9   10   11  12    13  14  15  16  17  18
        db  20h,20h,20h,20h,20h,0E1h,0A5h,0AAh,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   c    e    к    .   .   .  .   .   .   .   .   .   .
;           19  20  21  22  23  24   25   26  27  28  29  30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания фазы
;********************************************************************************************
pStr17:
        mov     SFRPAGE,#0
        mov     DPTR,#pFaza
        call    pzagr
;вывод на термопринтер длительности фазы

        mov     R0,#PhH         ;занести длительность фазы в BIN0..BIN2
        mov     BIN0,#0
        mov     BIN1,@R0
        inc     R0
        mov     BIN2,@R0
        call    p1610
        mov     R0,#PrinAdr+20           ;занесение в принтерные ячейки лагфазы
        mov     A,DES2
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,DES3
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,DES3
        anl     A,#0Fh
        orl     A,#30h
        movx    @R0,A
        call    pechat
        ret

;************************************************************************************************
pKolFaz:
        db  20h,20h,20h,20h,20h,20h,20h,0B3h,8Ah,0AEh,0ABh,2Eh,0E4h,0A0h,0A7h,20h,20h,20h
;           .   .   .   .   .   .   .   !    К   о    л    ,   ф    а    з    .   .    .
;           1   2   3   4   5   6   7   8    9   10   11  12   13   14   15   16  17  18
        db  20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h
;           .   .   .   .   .   .   .   .   .   .   .  .   .   .   .   .   .   .
;           19  20  21  22  23  24  25  26  27  28  29 30  31  32  33  34  35  36

;********************************************************************************************
;Подпрограмма печатания количества фаз
;********************************************************************************************
pStr18:
        mov     SFRPAGE,#0
        mov     DPTR,#pKolFaz
        call    pzagr
        mov     R0,#NPh         ;вывод количества фаз
        mov     A,@R0
        mov     B,#10
        div     AB
        mov     R0,#PrinAdr+20
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,B
        orl     A,#30h
        movx    @R0,A
        call    pechat
        ret




iProdolj:
        db      20h,0A8h,70h,6Fh,0E3h,6Fh,0BBh,0B6h,65h,0BDh,0B8h,65h,20h,20h,0DAh,20h     
iOtkaz:
        db      20h,4Fh,0BFh,0BAh,61h,0B7h,20h,20h,20h,20h,20h,45h,73h,63h,20h,20h     


;*************************************************************************************************
;Подпрограмма распечатки набранной программы
pechPrg:
        mov     NP,#0           ;поиск первой записанной прогр.
pePrg0: 
        mov     A,NP            ;считывание из ПЗУ
        mov     B,#32
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        call    readFM
        mov     A,DANl
        anl     A,#7Fh
        cjne    A,#66h,pePrg0c
        mov     R1,#Test        ;запись в ячейки
pePrg0a:
        mov     @R1,DANl
        inc     ADRl
        call    readFM
        inc     R1
        cjne    R1,#LL+1,pePrg0a
        call    indPrg          ;проиндицировать программу
        jnb     konec,pePrg0e
        ret
pePrg0e:
        jnb     enter,pePrg0b
        mov     DPTR,#iProdolj
        call    zagr
        call    out_str1
        mov     DPTR,#iOtkaz
        call    zagr
        call    out_str2


pePrg0b:
        call    klav
        cjne    A,#KlNiz,pePrg0d        ;если нажата ВНИЗ то на следующую программу
        call    zvyk
pePrg0c:
        inc     NP
        mov     A,NP
        cjne    A,#100,pePrg0
        mov     DPTR,#iPrgNet
        call    zagr
        call    out_str1
        mov     DPTR,#iNagPusk
        call    zagr
        call    out_str2
pePrg0f:
        call    klav
        cjne    A,#KlEnter,pePrg0f
        call    zvyk
        ret
;        mov     NP,#0
;        jmp     pePrg0
pePrg0d:
        cjne    A,#KlEsc,pePrg0b
        call    zvyk
        setb    konec
        ret
                       
;*************************************************************************************
;Печать текущей программы
;************************************************************************************* 
printTekPrg:
        mov     SFRPAGE,#0
        clr     IE.5            ;запретить прерывание термостата
        call    RS9600
        call    pStr1
        call    pStr2
        call    pStr10
        call    pStr11
        call    pStr12
        call    pStr13
        call    pStr14
   
        mov     A,podRej        ;занесение режима работы
        anl     A,#00000011b
        cjne    A,#0,pePrg_1
        jmp     pePrg_3       
pePrg_1:
        cjne    A,#1,pePrg_2
        call    pStr15
        jmp     pePrg_3       
pePrg_2:
        call    pStr16
        call    pStr17
        call    pStr18
pePrg_3: 
        mov     SFRPAGE,#0
        mov     R0,#5
pePrg_4:
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
        djnz    R0,pePrg_4

        call    RS2400
        setb    IE.5            ;разрешить прерывание термостата
        ret
;**********************************************************************************
;Непосредственно печать
;**********************************************************************************
pechat:  
        mov     SFRPAGE,#0h
        mov     R0,#PrinAdr
pech_1:
        movx    A,@R0
        mov     SFRPAGE,#0
        mov     SBUF0,A         ;Посылка 
        call    delay1
        inc     R0
        cjne    R0,#PrinAdr+35,pech_1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
        mov     SFRPAGE,#0Fh
        ret
;************************************************************************************
;*************************************************************************************
;Подпрограмма вывода на термопринтер первой строки, например
;"  PV 1251  15.02.2005г. 09:23:56    " время и год считываются из памяти когда были записаны результаты
;*************************************************************************************
;*************************************************************************************
pStr20: call    RS9600
        mov     DPTR,#pPV
        call    pzagr

        mov     ADRl,#YEAR      ;чтение ГОДА. из м/с часов и запись в принтерную
        call    rdDS            ;строку с адреса 20
        mov     A,DANl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+19         
        mov     SFRPAGE,#0h
        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,DANl
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+20        

        mov     SFRPAGE,#0h
        mov     EMI0CN,#0
        movx    @R0,A
        mov     EMI0CN,#2        ;чтение ЧИСЛА и запись в принтерную
        mov     R0,#rezult+1     ;строку с адреса 12

;        mov     ADRl,#DATE       из м/с часов и запись в принтерную
;        call    rdDS            
;        mov     A,DANl
        movx    A,@R0
        mov     R2,A            ;временное хранение
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+11         
        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,R2
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+12        
        mov     EMI0CN,#0
        movx    @R0,A

;        mov     ADRl,#MONTH     ;чтение МЕСЯЦА из м/с часов и запись в принтерную
;        call    rdDS            ;строку с адреса 15
;        mov     A,DANl
        mov     EMI0CN,#2        ;чтение МЕСЯЦА  и запись в принтерную
        mov     R0,#rezult+2     ;строку с адреса 15
        movx    A,@R0
        mov     R2,A             ;временное хранение
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+14         
        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,R2
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+15        
        mov     EMI0CN,#0
        movx    @R0,A




;        mov     ADRl,#HOURS     ;чтение ЧАСОВ из м/с часов и запись в принтерную
;        call    rdDS            ;строку с адреса 25
;        mov     A,DANl

        mov     EMI0CN,#2        ;чтение ЧАСОВ  и запись в принтерную
        mov     R0,#rezult+3     ;строку с адреса 25
        movx    A,@R0
        mov     R2,A            ;временное хранение
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+24         
        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,R2
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+25        
        mov     EMI0CN,#0
        movx    @R0,A

;        mov     ADRl,#MINUT     ;чтение МИНУТ из м/с часов и запись в принтерную
;        call    rdDS            ;строку с адреса 28
;        mov     A,DANl

        mov     EMI0CN,#2        ;чтение МИНУТ  и запись в принтерную
        mov     R0,#rezult+4     ;строку с адреса 28
        movx    A,@R0
        mov     R2,A            ;временное хранение
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+27         
        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,R2
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+28        
        mov     EMI0CN,#0
        movx    @R0,A

;        mov     ADRl,#SEK       ;чтение МИНУТ из м/с часов и запись в принтерную
;        call    rdDS            ;строку с адреса 31
;        mov     A,DANl
        mov     EMI0CN,#2        ;чтение СЕКУНД  и запись в принтерную
        mov     R0,#rezult+5     ;строку с адреса 31
        movx    A,@R0
        mov     R2,A            ;временное хранение
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     R0,#PrinAdr+30         
        mov     EMI0CN,#0
        movx    @R0,A
        mov     A,R2
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#PrinAdr+31        
        mov     EMI0CN,#0
        movx    @R0,A
        call    pechat
        ret

;*************************************************************************************
;Подпрограмма вывода на термопринтер четвертой строки, при считывании из памяти
;*************************************************************************************
pStr21:  
        mov     SFRPAGE,#0
        mov     DPTR,#pProbel
        call    pzagr

        mov     R0,#PrinAdr+1
        mov     A,codeH
;        dec     A
        mov     B,#10
        div     AB
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,B
        orl     A,#30h
        movx    @R0,A
        jmp     pStr4_0


;*************************************************************************************
;Подпрограмма вывода на термопринтер  строки, с ошибкой в номере программы
;*************************************************************************************
pStr22:  
        mov     SFRPAGE,#0
        mov     DPTR,#pProbel
        call    pzagr

        mov     R0,#PrinAdr+1
        mov     A,PrJ
        mov     B,#10
        div     AB
        orl     A,#30h
        movx    @R0,A
        inc     R0
        mov     A,B
        orl     A,#30h
        movx    @R0,A


;вывод концентрации (результата) из ячеек первого слагаемого
        mov     SFRPAGE,#0h
        mov     EMI0CN,#0        
        call    obch1
        mov     R0,#PrinAdr+26
        mov     A,#'C'
        movx    @R0,A
        inc     R0
        mov     A,#'='
        movx    @R0,A
        inc     R0
        mov     A,BIN0
        movx    @R0,A
        inc     R0
        mov     A,BIN1
        movx    @R0,A
        inc     R0
        mov     A,BIN2
        movx    @R0,A
        inc     R0
        mov     A,BIN3
        movx    @R0,A
        inc     R0
        mov     A,BIN4
        movx    @R0,A
        inc     R0
        mov     A,BIN5
        movx    @R0,A
        call    pechat
        ret

;***************************************************************************************************
;Подпрограмма записи в EEPROM результатов измерения. Под измерение отводится 16 байт.
;Из них используется только 10
;1 - номер программы; 2 - число; 3 - месяц; 4 - часы; 5 - минуты; 6 - секунды; 7..10 - результат;
;Алгоритм: в индикаторных ячейках формируется код для записи и потом записывается в EEPROM.
;***************************************************************************************************
zapRez:
;Сформируем в индикаторных ячейках образ записываемого результата        
        mov     R0,#ZN1         ;запись номера программы
        mov     A,NP
        mov     @R0,A

        mov     ADRl,#DATE      ;чтение дня из микросхемы часов в двоично десятичном коде
        call    rdDS            ;чтение инф. из м/с часов по адресу ADRl
        mov     R0,#ZN2
        mov     @R0,DANl

        mov     ADRl,#MONTH     ;чтение месяца из микросхемы часов в двоично десятичном коде
        call    rdDS            ;чтение инф. из м/с часов по адресу ADRl
        mov     R0,#ZN3
        mov     @R0,DANl

        mov     ADRl,#HOURS     ;чтение месяца из микросхемы часов в двоично десятичном коде
        call    rdDS            ;чтение инф. из м/с часов по адресу ADRl
        mov     R0,#ZN4
        mov     @R0,DANl
 
        mov     ADRl,#MINUT     ;чтение месяца из микросхемы часов в двоично десятичном коде
        call    rdDS            ;чтение инф. из м/с часов по адресу ADRl
        mov     R0,#ZN5
        mov     @R0,DANl

        mov     ADRl,#SEK       ;чтение месяца из микросхемы часов в двоично десятичном коде
        call    rdDS            ;чтение инф. из м/с часов по адресу ADRl
        mov     R0,#ZN6
        mov     @R0,DANl

        mov     R0,#ZN7         ;запись результата из ADR0..ADR3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3

        mov     DPTR,#NumSer    ;Cчитывание из EEPROM номера последней серии
        mov     ADRh,DPH
        mov     ADRl,DPL
        call    readFM
        mov     A,DANl
        inc     A               ;увеличить на единицу количество серий
        cjne    A,#100,zpRez_1  ;сравнить с цифрой 100
        mov     A,#0            ;если серия последняя то начать с нулевой серии
zpRez_1:
        mov     SFRPAGE,#0Fh
        mov     prJ,A           ;сохранить номер серии в промежуточной ячейке
        mov     DANl,A          ;и записать в ячейку NumSer
        call    wrFM            ;
        mov     DPTR,#BaseSer   ;вычисление адреса для записи
        mov     A,prJ
        mov     B,#16
        mul     AB
        add     A,DPL
        mov     ADRl,A
        mov     A,B
        addc    A,DPH
        mov     ADRh,A
        mov     R0,#ZN1
zpRez_2:
        mov     DANl,@R0        ;запись массива из 16 байт
        call    wrFM            ;

;        mov     DANl,#0
;        call    readFM
;        mov     A,DANl

        inc     R0
        inc     ADRl
        cjne    R0,#ZN16+1,zpRez_2
        ret 


;************************************************************************************
;Печать результатов
;в ячейку PrJ заносим максимальную записанную серию (включительно)
;начиная с нулевой программы считываем данные в ОЗУ при EMI0CN = 2 (16 байт)
;1 - номер программы; 2 - число; 3 - месяц; 4 - часы; 5 - минуты; 6 - секунды; 7..10 - результат;
;Из первой ячейки этих данных берем номер программы, при которой были записаны данные 
;и  заполняем ячейки программы.
;формируем принтерные строки и выводим на печать.
;************************************************************************************
pechRez:
        mov     DPTR,#NumSer    ;Cчитывание из EEPROM номера последней серии
        mov     ADRh,DPH
        mov     ADRl,DPL
        call    readFM
        mov     A,DANl          ;в DANl - номер последней записи
        jnz     peRez_0
        jmp     peRez_6         ;если результатов нет то выход
peRez_0:
        mov     PrJ,DANl        ;занести этот номер в PrJ (временное хранение)
        inc     PrJ
        mov     codeH,#1        ;временно используемая ячейка для организации цикла
peRez_1:
        mov     DPTR,#BaseSer   ;вычисление адреса для считывания
        mov     A,codeH
        mov     B,#16
        mul     AB
        add     A,DPL
        mov     ADRl,A
        mov     A,B
        addc    A,DPH
        mov     ADRh,A

        mov     codeL,#16       ;счетчик считываний
        mov     SFRPAGE,#0h
        mov     EMI0CN,#2
        mov     R1,#rezult
peRez_2:
;        mov     SFRPAGE,#0Fh
        call    readFM          ;заполнение памяти
        mov     A,DANl
        movx    @R1,A
;        inc     R0
        inc     R1
        inc     ADRl
        djnz    codeL,peRez_2                
;...................................................
        mov     SFRPAGE,#0h
        mov     EMI0CN,#2
        mov     R0,#rezult
        movx    A,@R0           ;заносим в ACC номер программы
        mov     NP,A
;.............................................................
;заполнение памяти режима
        mov     B,#32           ;считывание из ПЗУ
        mul     AB
        mov     ADRh,B
        mov     ADRl,A
        call    readFM
        mov     A,DANl
        anl     A,#7Fh
        cjne    A,#66h,peRez_5b
        mov     R1,#Test        ;запись в ячейки
peRez_3:
        mov     @R1,DANl
        inc     ADRl
        call    readFM
        inc     R1
        cjne    R1,#LL+1,peRez_3
        mov     R0,#Rej         ;заполнить подрежим
        mov     podRej,@R0      
        mov     SFRPAGE,#0h
        mov     EMI0CN,#2
        mov     R0,#rezult+6    ;занесение данных в первое слагаемое
        movx    A,@R0
        mov     ADR0,A
        inc     R0
        movx    A,@R0
        mov     ADR1,A
        inc     R0
        movx    A,@R0
        mov     ADR2,A
        inc     R0
        movx    A,@R0
        mov     ADR3,A
 

;ячейки режима заполнены
;....................................................
;Вывод на принтер информации для 
        clr     IE.5            ;запретить прерывание термостата
        call    RS9600
        call    pStr20
        call    pStr2
        call    pStr3
        call    pStr21
        mov     A,podRej
        jnb     ACC.1,peRez_4   ;если режим НЕ кинетика то на peRez_4 
        call    pStr5
peRez_4:
        mov     SFRPAGE,#0
        mov     R0,#5
peRez_5:
        mov     SFRPAGE,#0
        mov     SBUF0,#0Ah
        call    delay1
        mov     SFRPAGE,#0
        mov     SBUF0,#0Dh
        call    delay1
        djnz    R0,peRez_5
;...................................................................
        inc     codeH
        mov     A,codeH
        cjne    A,PrJ,peRez_5a



;        mov     SFRPAGE,#0Fh
peRez_5c:
        call    RS2400
        setb    IE.5            ;разрешить прерывание термостата
        mov     SFRPAGE,#0Fh
        ret
peRez_5a:
        jmp     peRez_1
peRez_5b:
        jmp     peRez_8
peRez_6:
        mov     DPTR,#iRezNet
        call    zagr
        call    out_str1
        mov     DPTR,#iNagPusk
        call    zagr
        call    out_str2
peRez_7:
        call    klav
        cjne    A,#KlEnter,peRez_7
        call    zvyk
        setb    konec
        ret
;        jmp     peRez_5c


peRez_8:
        clr     IE.5            ;запретить прерывание термостата
        call    pStr22
        jmp     peRez_4

iRezNet:
 db    20h,50h,65h,0B7h,79h,0BBh,0C4h,0BFh,61h,0BFh,6Fh,0B3h,20h,0BDh,65h,0BFh
;      .   P   e   з    у   л    ь    т    а   т    о   в    .   н    е   т    .   .
;      1   2   3    4   5   6    7    8    9   10   11  12   13  14   15  16

     

;********************************************************************************************
;--------------------------------------------------------------------------------

iVvKolN:
 db    20h,42h,0B3h,65h,0E3h,2Eh,0BAh,6Fh,0BBh,2Eh,20h,0BFh,6Fh,0C0h,65h,0BAh
;      .   В   в    е   д    ,   к    о   л    ,   .   т    о   ч    е   к   
;      1   2    3   4    5   6   7    8   9    10  11  12   13  14   15  16
iNRavno:
 db    20h,20h,20h,20h,20h,20h,4Eh,3Dh,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   .   .   .   N   =   .   .   .   .   .   .   .   .     
;      1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16

iVvedC:
 db    20h,42h,0B3h,65h,0E3h,2Eh,20h,0BAh,6Fh,0BDh,0E5h,65h,0BDh,0BFh,70h,2Eh
;      .   В   в    е   д    ,       к    о   н    ц    е   н    т    р   ,

iCi:
 db    20h,20h,20h,43h,20h,20h,3Dh,20h,20h,20h,20h,20h,20h,20h,20h,20h
;      .   .   .   C   .   .   =   .   .   .   .   .   .   .

;********************************************************************************
;Подпрограмма ввода графика в одноволновом режиме
;********************************************************************************
vvodG1:
        call    vvodN
        jnb     konec,vvG1_1
        ret
vvG1_1:
        mov     codeL,#1        ;счетчик циклов
vvodC:  mov     DPTR,#iVvedC    ;вывод ВВЕД. КОНЦЕНТР. 
        call    zagr
        call    out_str1
vvC_1:  mov     DPTR,#iCi       ;высветить Сi=
        call    zagr
        mov     R0,#ZN5
        mov     A,codeL
        cjne    A,#10,vvC_2
        mov     A,#31h
        mov     @R0,A
        inc     R0
        mov     A,#30h
        mov     @R0,A
        jmp     vvC_3
vvC_2:  orl     A,#30h
        mov     @R0,A
vvC_3:
        call    out_str2
vvC_4:  call    vvod4s          ;ввод четырехзначного числа     
        jnb     konec,vvC_5
        ret
vvC_5:  
        mov     A,BIN1          ;временное сохранение проб            
        swap    A
        orl     A,BIN2
        mov     R0,#CsH
        mov     @R0,A
        mov     A,BIN3
        swap    A
        orl     A,BIN4
        mov     R0,#CsL
        mov     @R0,A
        mov     R0,#ZnCs        ;сохранение знака и положения запятой
        mov     A,prJ
        anl     A,#0Fh
        mov     @R0,A
        call    CstoReal

        mov     SFRPAGE,#0      ;сохранение результатов в ОЗУ
        mov     EMI0CN,#4
        mov     A,codeL         ;вычисление адреса ОЗУ для записи по оси Y
        mov     B,#4
        mul     AB
;        mov     A,B
        add     A,#y0           ;прибавить смещение адреса
        mov     R0,A
        mov     A,ADR0
        movx    @R0,A
        inc     R0
        mov     A,ADR1
        movx    @R0,A
        inc     R0
        mov     A,ADR2
        movx    @R0,A
        inc     R0
        mov     A,ADR3
        movx    @R0,A
        mov     SFRPAGE,#0Fh    ;сохранение результатов в ОЗУ
;...........................................................................
;iProba:
; db    20h,20h,20h,20h,20h,20h,0A8h,70h,6Fh,0B2h,61h,20h,20h,20h,20h,20h
;;      .   .   .   .   .   .   П    p   o   б    a   .   .   .   .   .
	mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        mov     R0,#ZN12
        mov     A,codeL
        cjne    A,#10,vvC_6
        mov     A,#31h
        mov     @R0,A
        inc     R0
        mov     A,#30h
        mov     @R0,A
        jmp     vvC_7
vvC_6:  orl     A,#30h
        mov     @R0,A
vvC_7:  call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2
vvC_8:
        call    klav
        cjne    A,#KlEsc,vvC_9
        call    zvyk            ;нажата ESC
        setb    konec
        ret
vvC_9:	
        cjne    A,#KlStart,vvC_8
vvC_10:
        call    zvyk            ;нажата СТАРТ
vvC_11:
        call    izmer           ;измерить  (проба)
        call    D1
        mov     A,ERROR
        jz      vvC_12
        jmp     vvC_13
vvC_12:
        call    indD
        call    zdInd

        mov     SFRPAGE,#0      ;сохранение результатов в ОЗУ
        mov     EMI0CN,#4
        mov     A,codeL         ;вычисление адреса ОЗУ для записи по оси X
        mov     B,#4
        mul     AB
;        mov     A,B
        add     A,#x0           ;прибавить смещение адреса
        mov     R0,A
        mov     A,ADR0
        movx    @R0,A
        inc     R0
        mov     A,ADR1
        movx    @R0,A
        inc     R0
        mov     A,ADR2
        movx    @R0,A
        inc     R0
        mov     A,ADR3
        movx    @R0,A
        mov     SFRPAGE,#0Fh    ;сохранение результатов в ОЗУ
        inc     codeL
        mov     A,codeL
        dec     A
        cjne    A,codeH,vvC_14 
        ret
vvC_13:
        call    och             ;проиндицировать ошибку
;        setb    konec
        ret
vvC_14: jmp     vvodC
;*****************************************************************************************
;Подпрограмма ввода количества точек для построения графика и сохранение в codeH
vvodN:
        mov     DES2,#0         ;
        mov     DES3,#0
;..........................................................................
;Ввод количества точек графика
        mov     DPTR,#iVvKolN   ;Высветить "Введ. кол. точек"
        call    zagr
        call    out_str1
        mov     DPTR,#iNRavno   ;"      N=       "
        call    zagr
        call    out_str2


vvN_1:  call    vZN8            ;установить моргающий курсор в поз. ZN8

;        mov     A,#0C9h         ;установить моргающий курсор в поз. ZN9
;        call    out_ins
;        mov     A,#0Fh
;        call    out_ins
        jnb     enter,vvN_3

vvN_2:  call    zvyk
        call    zvyk
        call    zvyk
        jmp     vZN8
vvN_3:  
        jnb     konec,vvN_4
        call    zvyk
        ret
vvN_4:
        mov     A,BIN0
        cjne    A,#0,vvN_4a
        jmp     vvN_2
vvN_4a:
        cjne    A,#1,vvN_5
        jmp     vvN_2
vvN_5:  call	vZN8
	jnb	konec,vvN_6
	call	zvyk
	ret
vvN_6:	jnb	enter,vvN_7
	call	zvyk
	mov	A,BIN0
	jmp	vvN_8
vvN_7:	mov     A,BIN0		;проверка на 0
        cjne    A,#0,vvN_5
        jmp     vvN_1
vvN_8:	mov     codeH,A
        ret


;        mov     @R0,A



;cjne    A,#KlEsc,vvN_4  ;нажата ESC
;vvN_3a:
;        call    zvyk
;        setb    konec
;        mov     A,#0Ch          ;убрать моргание курсора
;        call    out_ins
;        ret
;vvN_4:  cjne    A,#10,vvN_5     ;ввод первой цифры в DES2
;vvN_5:  jc      vvN_6
;        jmp     vvN_1
;vvN_6:  push    ACC
;        call    zvyk
;        pop     ACC
;        mov     DES2,A          ;сохранить перв. цифру в DES2
;        orl     A,#30h          ;вывод первой цифры на индикатор
;        call    out_dan
;
;vvN_7:  call    klav
;        cjne    A,#KlEsc,vvN_8
;        jmp     vvN_3a
;vvN_8:  cjne    A,#KlEnter,vvN_9
;        call    zvyk
;;        mov     R0,#NToch       ;сохранить кол. точек
;;        mov     @R0,DES2
;       mov     codeH,DES2
;       mov     A,#0Ch          ;убрать моргание курсора 
;        call    out_ins
;        ret
;vvN_9:  cjne    A,#10,vvN_10
;vvN_10: jc      vvN_11
;        jmp     vvN_7
;vvN_11: push    ACC
;        call    zvyk
;        pop     ACC
;        mov     DES3,A          ;сохранить втор. цифру в DES3
;        orl     A,#30h          ;вывод второй цифры
;        call    out_dan
;
;vvN_12: call    klav
;        cjne    A,#KlEsc,vvN_13 ;третьей клавишей может быть либо ОТКАЗ либо ВВОД
;        jmp     vvN_3a
;vvN_13: cjne    A,#KlEnter,vvN_12
;        call    zvyk
;        mov     A,DES3
;        mov     B,#10
;        mul     AB
;        mov     A,B
;        add     A,DES2
;        cjne    A,#11,vvN_14
;vvN_14: jc      vvN_15
;        call    zvyk
;        call    zvyk
;        call    zvyk
;        call    zvyk
;        call    zvyk
;        jmp     vvodN
;vvN_15:        
;;        mov     R0,#NToch       ;сохранить кол. точек
;;        mov     @R0,A
;        mov     codeH,A
;        mov     A,#0Ch          ;убрать моргание курсора 
;        call    out_ins
;        ret
;......................................................................
;***********************************************************************************
;Подпрограмма индикации плотности находящейся в первом слагаемом и вывод ее во вторую строку

indD:   call    realIn
        call    btod
        call    okrygl3
        mov     DPTR,#iAR       ;вывод плотности на индикатор
        call    zagr
        mov     R0,#ZN7
        jnb     F0,indD_1
        mov     @R0,#2Dh
        jmp     indD_2
indD_1: mov     @R0,#20h
indD_2: mov     A,DES3
        orl     A,#30h
        mov     R0,#ZN8
        mov     @R0,A
        mov     A,DES4
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN10
        mov     @R0,A
        mov     A,DES4
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN11
        mov     @R0,A
        mov     A,DES5
        swap    A
        anl     A,#0Fh
        orl     A,#30h
        mov     R0,#ZN12
        mov     @R0,A
        call    out_str2
        ret

;**************************************************************************************************
iIzmG:
 db    20h,20h,20h,0A5h,0B7h,0BCh,65h,0BDh,0B8h,0BFh,0C4h,20h,47h,20h,20h,20h
;      .   .   .   И    з    м    е   н    и    т    ь    .   G   .   .   .   
;      1   2   3    4   5    6    7   8    9    10   11   12  13  14  15  16
;**************************************************************************************************

;-------------------------------------------------------------------------------------------
;Подпрограмма  Конечноточечных измерений с коррекцией по графику
;-------------------------------------------------------------------------------------------
KtG:
        mov     R0,#Test        ;анализ промерялся ли график вообще
        mov     A,@R0
        jnb     ACC.7,KtG_1a    ;если нет то на KtG_--
;стандарт был измерен - спросить о перемерении
        mov     DPTR,#iIzmG     ;Высветить "Изменить G"
        call    zagr
;        mov     R0,#ZnCs
;        mov     R1,#ZN7
;        call    indChislo
        call    out_str1
        mov     DPTR,#iDaNet    ;"1-Да   2-Нет"
        call    zagr
        call    out_str2
KtG_1:
        call    klav
        cjne    A,#Kl1,KtG_2    
        call    zvyk            ;"Да"
KtG_1a:
        call    vvodG1          ;вводим график в конечноточечном измерении
        jnb     konec,KtG_1b
        ret
KtG_1b:
        call    vichAB          ;вычислить коэффициенты a и b и сохранить их
        jmp     KtG_3
KtG_2:
        cjne    A,#Kl2,KtG_1
        call    zvyk            ;"Нет"
;        jmp     KtG_
KtG_3:
	mov     DPTR,#iProba    ;измерение пробы
        call    zagr
        call    out_str1
        mov     DPTR,#iNagStart
        call    zagr
        call    out_str2

KtG_4:                                                                ;8
        call    klav
        cjne    A,#KlEsc,KtG_5
        call    zvyk            ;нажата ESC
        setb    konec
        ret
KtG_5:	                                                        ;9
        cjne    A,#KlStart,KtG_4
KtG_6:                                                       ;10
        call    zvyk            ;нажата СТАРТ
KtG_7:                                                       ;11
        call    izmer           ;измерить OК (проба)
        call    D1
        mov     A,ERROR
        jz      KtG_8
        jmp     KtG_12
KtG_8:                                                       ;13
        mov     R0,#As0         ;переслать  (a) во второе слагаемое 
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0

        call    mul3

        mov     R0,#HH          ;переслать  (b) во второе слагаемое 
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0

        call    add3

;................................................................................       
;................................................................................
        mov     A,ERROR
        jz      KtG_9
        jmp     KtG_12
KtG_9:                                                      ;13b
        call    zapRez          ;запись результата в память
        call    vivC            ;вывод концентрации на индикатор
        jnb     konec,KtG_9a
        ret
KtG_9a:
        call    out_str2
KtG_10:                                                       ;14
        call    klav		;опрос клавиатуры
        cjne    A,#KlEsc,KtG_11	;ESC
        call    zvyk
        setb    konec
        ret
KtG_11:                                                       ;15
        cjne    A,#KlStart,KtG_13	;Start
	jmp	KtG_6
KtG_12:                                                       ;16
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret
KtG_13:                                                       ;17
        cjne    A,#KlPrint,KtG_10
        call    zvyk
        call    pInf1
        jmp     KtG_10



;*******************************************************************************************
; a=(N*Sxy-Sx*Sy)/(N*S[(x)**2]-(Sx)**2)
; b= {S[(x)**2]*Sy-[Sxy*Sx]/(N*S[(x)**2]-(Sx)**2)
;*******************************************************************************************
vichAB: nop
;..........................................................................................
;Вычисление Sx проссумировав все Хi
;..........................................................................................
Sx:
        mov     codeL,#1
                
        mov     ADR0,#40h      ;Обнуление ячеек для накопления суммы
        mov     ADR1,#0
        mov     ADR2,#0
        mov     ADR3,#0
Sx_1:
        mov     SFRPAGE,#0      ;чтение результатов из ОЗУ
        mov     EMI0CN,#4
        mov     A,codeL         ;вычисление адреса ОЗУ для записи по оси X
        mov     B,#4
        mul     AB
;        mov     A,B
        add     A,#x0           ;прибавить смещение адреса
        mov     R0,A
;в R0 адрес
        movx    A,@R0           ;число во второе слагаемое
        mov     ADR4,A
        inc     R0
        movx    A,@R0
        mov     ADR5,A
        inc     R0
        movx    A,@R0
        mov     ADR6,A
        inc     R0
        movx    A,@R0
        mov     ADR7,A
        mov     SFRPAGE,#0Fh    ;
        call    add3            ;суммирование
;................................................................
        inc     codeL
        mov     A,codeL
        dec     A
        cjne    A,codeH,Sx_1
;        call    mv12_0          ;сохранить сумму 
;        mov     BIN0,#0         ;в первое слагаемое занести количество измерений
;        mov     BIN1,#0
;        mov     BIN2,codeH
;        mov     BIN3,#0
;        mov     BIN4,#0
;        mov     BIN5,#0
;        call    inReal
;        call    mv4_0           ;во второе слагаемое занести количество измерений
;        call    mv0_12          ;возвратить сумму в первое слагаемое
;        call    div3            ;поделить
        mov     R0,#Abp0        ;сохранить Х на месте бланка пробы
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
;.................................................................................
;..........................................................................................
;Вычисление Sy проссумировав все Yi 
;..........................................................................................
Sy:
        mov     codeL,#1
                
        mov     ADR0,#40h      ;Обнуление ячеек для накопления суммы
        mov     ADR1,#0
        mov     ADR2,#0
        mov     ADR3,#0
Sy_1:

        clr     IE.5
        mov     SFRPAGE,#0      ;чтение результатов из ОЗУ
        mov     EMI0CN,#4
        mov     A,codeL         ;вычисление адреса ОЗУ для записи по оси X
        mov     B,#4
        mul     AB
;        mov     A,B
        add     A,#y0           ;прибавить смещение адреса
        mov     R0,A
;в R0 адрес
        movx    A,@R0           ;число во второе слагаемое
        mov     ADR4,A
        inc     R0
        movx    A,@R0
        mov     ADR5,A
        inc     R0
        movx    A,@R0
        mov     ADR6,A
        inc     R0
        movx    A,@R0
        mov     ADR7,A
        setb    IE.5
        mov     SFRPAGE,#0Fh    ;
        call    add3            ;суммирование
;................................................................
        inc     codeL
        mov     A,codeL
        dec     A
        cjne    A,codeH,Sy_1
;        call    mv12_0          ;сохранить сумму 
;        mov     BIN0,#0         ;в первое слагаемое занести количество измерений
;        mov     BIN1,#0
;        mov     BIN2,codeH
;        mov     BIN3,#0
;        mov     BIN4,#0
;        mov     BIN5,#0
;        call    inReal
;        call    mv4_0           ;во второе слагаемое занести количество измерений
;        call    mv0_12          ;возвратить сумму в первое слагаемое
;        call    div3            ;поделить
        mov     R0,#Abs0        ;сохранить Х на месте бланка стандарта
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
;.................................................................................

;..........................................................................................
;Вычисление Sxy проссумировав все Хi*Yi 
;..........................................................................................
Sxy:
        mov     codeL,#1
                
        mov     ADR12,#40h      ;Обнуление ячеек для накопления суммы
        mov     ADR13,#0
        mov     ADR14,#0
        mov     ADR15,#0
Sxy_1:
        clr     IE.5
        mov     SFRPAGE,#0      ;чтение результатов из ОЗУ
        mov     EMI0CN,#4
        mov     A,codeL         ;вычисление адреса ОЗУ для записи по оси X
        mov     B,#4
        mul     AB
;        mov     A,B
        add     A,#x0           ;прибавить смещение адреса
        mov     R0,A
;в R0 адрес
        movx    A,@R0           ;число во второе слагаемое
        mov     ADR4,A
        inc     R0
        movx    A,@R0
        mov     ADR5,A
        inc     R0
        movx    A,@R0
        mov     ADR6,A
        inc     R0
        movx    A,@R0
        mov     ADR7,A


        mov     A,codeL         ;вычисление адреса ОЗУ для записи по оси Y
        mov     B,#4
        mul     AB
;        mov     A,B
        add     A,#y0           ;прибавить смещение адреса
        mov     R0,A
;в R0 адрес
        movx    A,@R0           ;число в первое слагаемое
        mov     ADR0,A
        inc     R0
        movx    A,@R0
        mov     ADR1,A
        inc     R0
        movx    A,@R0
        mov     ADR2,A
        inc     R0
        movx    A,@R0
        mov     ADR3,A
        setb    IE.5
        mov     SFRPAGE,#0Fh    ;

        call    mul3            ;умножение X*Y
        call    mv4_12     
        call    add3            ;суммирование
        call    mv12_0
;................................................................
        inc     codeL
        mov     A,codeL
        dec     A
        cjne    A,codeH,Sxy_1
;        call    mv12_0          ;сохранить сумму 
;        mov     BIN0,#0         ;в первое слагаемое занести количество измерений
;        mov     BIN1,#0
;        mov     BIN2,codeH
;        mov     BIN3,#0
;        mov     BIN4,#0
;        mov     BIN5,#0
;        call    inReal
;        call    mv4_0           ;во второе слагаемое занести количество измерений
;        call    mv0_12          ;возвратить сумму в первое слагаемое
;        call    div3            ;поделить
        mov     R0,#Ap0        ;сохранить ХY на месте  пробы
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
;.................................................................................
;..........................................................................................
;Вычисление Sxx (квадрат) проссумировав все Хi*Xi 
;..........................................................................................
Sxx:
        mov     codeL,#1
                
        mov     ADR12,#40h      ;Обнуление ячеек для накопления суммы
        mov     ADR13,#0
        mov     ADR14,#0
        mov     ADR15,#0
Sxx_1:
        clr     IE.5
        mov     SFRPAGE,#0      ;чтение результатов из ОЗУ
        mov     EMI0CN,#4
        mov     A,codeL         ;вычисление адреса ОЗУ для записи по оси X
        mov     B,#4
        mul     AB
;        mov     A,B
        add     A,#x0           ;прибавить смещение адреса
        mov     R0,A
;в R0 адрес
        movx    A,@R0           ;число во второе слагаемое
        mov     ADR4,A
        inc     R0
        movx    A,@R0
        mov     ADR5,A
        inc     R0
        movx    A,@R0
        mov     ADR6,A
        inc     R0
        movx    A,@R0
        mov     ADR7,A
        call    mv0_4           ;это же число в первое слагаемое
        setb    IE.5
        mov     SFRPAGE,#0Fh    ;
        call    mul3            ;умножение X*Y
        call    mv4_12     
        call    add3            ;суммирование
        call    mv12_0
;................................................................
        inc     codeL
        mov     A,codeL
        dec     A
        cjne    A,codeH,Sxx_1
;        call    mv12_0          ;сохранить сумму 
;        mov     BIN0,#0         ;в первое слагаемое занести количество измерений
;        mov     BIN1,#0
;        mov     BIN2,codeH
;        mov     BIN3,#0
;        mov     BIN4,#0
;        mov     BIN5,#0
;        call    inReal
;        call    mv4_0           ;во второе слагаемое занести количество измерений
;        call    mv0_12          ;возвратить сумму в первое слагаемое
;        call    div3            ;поделить
        mov     R0,#vADR0       ;сохранить Х 
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
;-----------------------------------------------------------------------------------------

; a=(N*Sxy-Sx*Sy)/(N*S[(x)**2]-(Sx)**2)
;.................................................................................
;Вычисление квадрата X среднее {[S(Xi)]**2}   
; т.е. вычисляем квадрат суммы Хi
;.................................................................................
        mov     R0,#Abp0        ;сохранить S(Хi) в первом слагаемом
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        call    mv4_0
        call    mul3            ;квадрат X среднее в первом слагаемом
        call    mv12_0          ;занести в четвертое слагаемое
;.......................................................................................
;....................................................................................
        mov     BIN0,#0         ;в первое слагаемое занести количество измерений
        mov     BIN1,#0
        mov     BIN2,codeH
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal          ;перевести в плавающий формат
;...............................................................................
        mov     R0,#vADR0        ;занести Х*X во второe слагаемоe
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
;................................................................................
        call    mul3            ;вычислено N*S[(x)**2]
;................................................................................
        call    mv4_12
        call    subb3           ;вычислен знаменатель (N*S[(x)**2]-(Sx)**2)
        call    mv12_0          ;сохранить в четвертом слагаемом
;.................................................................................
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

        mov     R0,#Abp0        ;сохранить Sx в первом слагаемом
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
        mov     R0,#Abs0        ;сохранить Sy во втором слагаемом
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
        call    mul3            ;получение Sx*Sy
        call    mv8_0           ;сохранить в третьем слагаемом
;....................................................................
;....................................................................................

        mov     R0,#Ap0         ;сохранить Sxy во втором слагаемом
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0

        mov     BIN0,#0         ;в первое слагаемое занести количество измерений
        mov     BIN1,#0
        mov     BIN2,codeH
        mov     BIN3,#0
        mov     BIN4,#0
        mov     BIN5,#0
        call    inReal          ;перевести в плавающий формат
        call    mul3

        call    mv4_8  
        call    subb3           ;в первом слагаемом ЧИСЛИТЕЛЬ
;...............................................................................
        call    mv4_12          ;во второе знаменатель
        call    div3            ;в первом слагаемом получили (a)
;..............................................................................
        mov     A,ERROR
        jz      vichAB_1
        jmp     vichAB_3
vichAB_1:
        mov     R0,#As0         ;сохранить (a) в As0..As3
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
;....................................................................................
;.................................................................................
; b= {S[(x)**2]*Sy-[Sxy*Sx]/(N*S[(x)**2]-(Sx)**2)
        mov     R0,#Abp0        ;сохранить S(Хi) в первом слагаемом
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
;.......................................................................
        mov     R0,#Ap0         ;сохранить Sxy во втором слагаемом
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
;..........................................................................
        call    mul3
        call    mv8_0
;..........................................................................        

        mov     R0,#vADR0        ;сохранить S[(Хi)**2] в первом слагаемом
        mov     ADR0,@R0
        inc     R0
        mov     ADR1,@R0
        inc     R0
        mov     ADR2,@R0
        inc     R0
        mov     ADR3,@R0
;...........................................................................
        mov     R0,#Abs0         ;сохранить Sy во втором слагаемом
        mov     ADR4,@R0
        inc     R0
        mov     ADR5,@R0
        inc     R0
        mov     ADR6,@R0
        inc     R0
        mov     ADR7,@R0
;.............................................................................
        call    mul3
        call    mv4_8
        call    subb3
        call    mv4_12
        call    div3
        mov     A,ERROR
        jz      vichAB_2
        jmp     vichAB_3
vichAB_2:
        mov     R0,#HH         ;сохранить (b) в HH...
        mov     @R0,ADR0
        inc     R0
        mov     @R0,ADR1
        inc     R0
        mov     @R0,ADR2
        inc     R0
        mov     @R0,ADR3
;..................................................................
        call    wrBlok2         ;запись в EEPROM 
        ret

vichAB_3:
	call    och             ;проиндицировать ошибку
;        setb    konec
        ret


;***************************************************************************************





;*****************************************************************************************
;Подпрограмма анализа начала работы в кинетике предупреждающая о реальной температуре
;или выключенном термостате
;*****************************************************************************************

anKin:  clr     konec
        clr     enter
anKin_0:
        jb      prSmT,anKin_3   ;prSmT устанавливается в подпрограмме прерывания таймера T2
        jnb     prTrst,anKin_4  ;prTrst - бит признак включения термостата
anKin_1:
        call    stKey
        jz      anKin
        call    key
        cjne    A,#KlEsc,anKin_2
        call    zvyk
        setb     konec
        ret
anKin_2:
        cjne    A,#KlEnter,anKin_1
        call    zvyk
        setb    enter
        ret

;xx2:    jnb     IRP1,anKin      ;анализ интерфейса
;        jmp     komRS
anKin_3:   
        mov     DPTR,#iTempR
        call    zagr
        mov     A,ChSt
        cjne    A,#37,anKin3a
anKin3a:
        jc      anKin3b
        mov     A,#37
        mov     ChMl,#0
anKin3b:
        mov     b,#10
        div     ab
        mov     R0,#ZN6
        orl     A,#30h
        mov     @R0,A
        inc     R0
        orl     B,#30h
        mov     @R0,b
        inc     R0
        mov     @R0,#2Ch
        inc     R0
        
        mov     A,ChMl
        anl     A,#0F0h
        swap    A
        orl     A,#30h
        mov     @R0,A
        inc     R0
        mov     A,ChMl
        anl     A,#0Fh
        orl     A,#30h
        mov     @R0,A
        call    out_str1
        mov     DPTR,#iProdolj1  ;высветить
        call    zagr            ;ПРОДОЛЖИТЬ
        call    out_str2        ;
        clr     prSmT
        jmp     anKin_0

;-------------------------------------------------------------
anKin_4:
        mov     DPTR,#iTVikl    ;высветить
        call    zagr            ;Т-СТАТ ВЫКЛЮЧЕН
        call    out_str1        ;
        mov     DPTR,#iProdolj1  ;высветить
        call    zagr            ;ПРОДОЛЖИТЬ
        call    out_str2        ;
        jmp     anKin_1


iProdolj1:
 db    20h,20h,20h,0A8h,70h,6Fh,0E3h,6Fh,0BBh,0B6h,0B8h,0BFh,0C4h,20h,20h,20h
;      .   .   .   П    p   о   д    o   л    ж    и    т    ь    .   .   .





iTempR:    ;db     '  T=            '
 db    20h,20h,20h,74h,3Dh,20h,20h,20h,20h,20h,0DFh,43h,20h,20h,20h,20h
;      .   .   .   T   =   .   .   .   .   .    *    C  .   .   .   .







END













