
ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 1





       MCS-51 Family Macro Assembler   A S E M - 5 1   V 1.3
       =====================================================



	Source File:	h:\Projects\radio\Indicator\src\indicator.a51
	Object File:	h:\Projects\radio\Indicator\src\indicator.hex
	List File:	h:\Projects\radio\Indicator\src\indicator.lst



 Line  I  Addr  Code            Source

    1:				$include (8051.mcu)
    2: 1			;   8051 processor definition file
    3: 1			;   ==============================
    4: 1
    5: 1	N      0090	P1_0   EQU 090h       ; bit P1.0
    6: 1	N      0091	P1_1   EQU 091h       ; bit P1.1
    7: 1	N      0092	P1_2   EQU 092h       ; bit P1.2
    8: 1	N      0093	P1_3   EQU 093h       ; bit P1.3
    9: 1	N      0094	P1_4   EQU 094h       ; bit P1.4
   10: 1	N      0095	P1_5   EQU 095h       ; bit P1.5
   11: 1	N      0096	P1_6   EQU 096h       ; bit P1.6
   12: 1	N      0097	P1_7   EQU 097h       ; bit P1.7
   13: 1
   14: 1	N      00B0	P3_0   EQU 0B0h      ; bit P3.0 (RXD)
   15: 1	N      00B1	P3_1   EQU 0B1h      ; bit P3.1 (TXD)
   16: 1	N      00B2	P3_2   EQU 0B2h      ; bit P3.2 (INT0)
   17: 1	N      00B3	P3_3   EQU 0B3h      ; bit P3.3 (INT1)
   18: 1	N      00B4	P3_4   EQU 0B4h      ; bit P3.4 (T0)
   19: 1	N      00B5	P3_5   EQU 0B5h      ; bit P3.5 (T1)
   20: 1	N      00B6	P3_6   EQU 0B6h      ; bit P3.6 (WR)
   21: 1	N      00B7	P3_7   EQU 0B7h      ; bit P3.7 (RD)
   22: 1
   23: 1
   24: 1
   25: 1
   26: 1			;P0	DATA	080H
   27: 1			;SP	DATA	081H
   28: 1			;DPL	DATA	082H
   29: 1			;DPH	DATA	083H
   30: 1			;PCON	DATA	087H
   31: 1			;TCON	DATA	088H
   32: 1			;TMOD	DATA	089H
   33: 1			;TL0	DATA	08AH
   34: 1			;TL1	DATA	08BH
   35: 1			;TH0	DATA	08CH
   36: 1			;TH1	DATA	08DH
   37: 1			;P1	DATA	090H
   38: 1			;SCON	DATA	098H
   39: 1			;SBUF	DATA	099H
   40: 1			;P2	DATA	0A0H
   41: 1			;IE	DATA	0A8H
   42: 1			;P3	DATA	0B0H
   43: 1			;IP	DATA	0B8H

ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 2



 Line  I  Addr  Code            Source

   44: 1			;PSW	DATA	0D0H
   45: 1			;ACC	DATA	0E0H
   46: 1			;B	DATA	0F0H
   47: 1
   48: 1			;IT0	BIT	088H
   49: 1			;IE0	BIT	089H
   50: 1			;IT1	BIT	08AH
   51: 1			;IE1	BIT	08BH
   52: 1			;TR0	BIT	08CH
   53: 1			;TF0	BIT	08DH
   54: 1			;TR1	BIT	08EH
   55: 1			;TF1	BIT	08FH
   56: 1			;RI	BIT	098H
   57: 1			;TI	BIT	099H
   58: 1			;RB8	BIT	09AH
   59: 1			;TB8	BIT	09BH
   60: 1			;REN	BIT	09CH
   61: 1			;SM2	BIT	09DH
   62: 1			;SM1	BIT	09EH
   63: 1			;SM0	BIT	09FH
   64: 1			;EX0	BIT	0A8H
   65: 1			;ET0	BIT	0A9H
   66: 1			;EX1	BIT	0AAH
   67: 1			;ET1	BIT	0ABH
   68: 1			;ES	BIT	0ACH
   69: 1			;EA	BIT	0AFH
   70: 1			;RXD	BIT	0B0H
   71: 1			;TXD	BIT	0B1H
   72: 1			;INT0	BIT	0B2H
   73: 1			;INT1	BIT	0B3H
   74: 1			;T0	BIT	0B4H
   75: 1			;T1	BIT	0B5H
   76: 1			;WR	BIT	0B6H
   77: 1			;RD	BIT	0B7H
   78: 1			;PX0	BIT	0B8H
   79: 1			;PT0	BIT	0B9H
   80: 1			;PX1	BIT	0BAH
   81: 1			;PT1	BIT	0BBH
   82: 1			;PS	BIT	0BCH
   83: 1			;P	BIT	0D0H
   84: 1			;OV	BIT	0D2H
   85: 1			;RS0	BIT	0D3H
   86: 1			;RS1	BIT	0D4H
   87: 1			;F0	BIT	0D5H
   88: 1			;AC	BIT	0D6H
   89: 1			;CY	BIT	0D7H
   90: 1
   91: 1			;RESET	CODE	000H
   92: 1			;EXTI0	CODE	003H
   93: 1			;TIMER0	CODE	00BH
   94: 1			;EXTI1	CODE	013H
   95: 1			;TIMER1	CODE	01BH
   96: 1			;SINT	CODE	023H
   97:				$include (macroses.mcu)
   98: 1			; инкремент 2х байтной переменной (переменная располагается в порядке lo, hi, передается lo)
   99: 1			; следит, чтобы результат не превышал 0xFFFF

ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 3



 Line  I  Addr  Code            Source

  100: 1			INCW MACRO ARG
  101: 1			local inc_hi
  102: 1			local inc_lo
  103: 1			local done
  104: 1			   mov     A, ARG
  105: 1			   inc     A
  106: 1			   jnz     inc_lo
  107: 1			   mov     A, (ARG+1)
  108: 1			   inc     A
  109: 1			   jnz     inc_hi
  110: 1			   jmp     done
  111: 1			inc_hi:
  112: 1			   inc     (ARG+1)
  113: 1			inc_lo:
  114: 1			   inc     ARG
  115: 1			done:
  116: 1			ENDM
  117: 1
  118: 1
  119: 1
  120: 1			; декремент 2х байтной переменной
  121: 1			; следит, чтобы результат был больше 0
  122: 1			DECW MACRO ARG
  123: 1			local dec_hi
  124: 1			local dec_lo
  125: 1			local done
  126: 1			   mov     A, ARG
  127: 1			   jnz     dec_lo
  128: 1			   mov     A, (ARG+1)
  129: 1			   jnz     dec_hi
  130: 1			   jmp     done
  131: 1			dec_hi:
  132: 1			   dec     (ARG+1)
  133: 1			dec_lo:
  134: 1			   dec     ARG
  135: 1			done:
  136: 1			ENDM
  137: 1
  138: 1
  139: 1
  140: 1			; прибавление константы к 2х байтной переменной
  141: 1			ADDW MACRO ARG, CONST
  142: 1			local not_greater_max
  143: 1			   mov     A, ARG
  144: 1			   add     A, #LOW(CONST)
  145: 1			   mov     ARG, A
  146: 1			   mov     A, (ARG+1)
  147: 1			   addc    A, #HIGH(CONST)
  148: 1			;   jnc     not_greater_max
  149: 1			   ; если был заем в старшем байте, то достигнут максимум
  150: 1			not_greater_max:
  151: 1			   mov     (ARG+1), A
  152: 1			ENDM
  153: 1
  154: 1
  155: 1

ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 4



 Line  I  Addr  Code            Source

  156: 1			; вычитание константы из 2х байтной переменной
  157: 1			SUBW MACRO ARG, CONST
  158: 1			local above_zerro
  159: 1			   clr     C
  160: 1			   mov     A, ARG
  161: 1			   subb    A, #LOW(CONST)
  162: 1			   mov     ARG, A
  163: 1			   mov     A, (ARG+1)
  164: 1			   subb    A, #HIGH(CONST)
  165: 1			   jnc     above_zerro
  166: 1			   ; если был заем в старшем байте, то вычитаемое больше величины
  167: 1			   mov     A, #0
  168: 1			   mov     ARG, #0
  169: 1			above_zerro:
  170: 1			   mov     (ARG+1), A
  171: 1			ENDM
  172: 1
  173: 1
  174: 1			; сравнивает 2х байтную переменную с константой и выполянет переход, если переменная меньше
  175: 1			CMPJBW MACRO ARG, CONST, LABEL
  176: 1			local done
  177: 1			local hi_no_equal
  178: 1			local c2
  179: 1			local jump
  180: 1			   mov     A, (ARG+1)
  181: 1			   cjne    A, #HIGH(CONST), hi_no_equal
  182: 1			   mov     A, ARG
  183: 1			   cjne    A, #LOW(CONST), c2
  184: 1			c2:
  185: 1			   jc      jump
  186: 1			   jmp     done
  187: 1			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       1			ользуемой ячейки
  188: 1			; или используемого регистра, в противном случае флаг устанавливается в "1".
  189: 1			hi_no_equal:
  190: 1			   jnc      done
  191: 1			jump:
  192: 1			   jmp      LABEL
  193: 1			done:
  194: 1			ENDM
  195: 1
  196: 1
  197: 1
  198: 1			; вычисляет величину уровня по таблице
  199: 1			CALCLEV MACRO VAL, COUNT, X1, X2, X3, X4, X5, X6, X7, X8
  200: 1			local done
  201: 1			   mov     VAL, #0
  202: 1			   CMPJBW  COUNT, X1, done
  203: 1			   inc     VAL
  204: 1			   CMPJBW  COUNT, X2, done
  205: 1			   inc     VAL
  206: 1			   CMPJBW  COUNT, X3, done
  207: 1			   inc     VAL
  208: 1			   CMPJBW  COUNT, X4, done
  209: 1			   inc     VAL
  210: 1			   CMPJBW  COUNT, X5, done

ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 5



 Line  I  Addr  Code            Source

  211: 1			   inc     VAL
  212: 1			   CMPJBW  COUNT, X6, done
  213: 1			   inc     VAL
  214: 1			   CMPJBW  COUNT, X7, done
  215: 1			   inc     VAL
  216: 1			   CMPJBW  COUNT, X8, done
  217: 1			   inc     VAL
  218: 1			done:
  219: 1			ENDM
  220:
  221:				; ВЫВОДЫ
  222:		N      00B4	COL_HDD           EQU  P3_4     ; выводы анодов светодиодов
  223:		N      00B7	COL_NET           EQU  P3_7
  224:		N      00B5	COL_RESERVE       EQU  P3_5
  225:
  226:		N      00B0	IN_HDD            EQU  P3_0     ; источники сигналов активности
  227:		N      00B2	IN_NET            EQU  P3_2
  228:		N      00B1	IN_RESERVE        EQU  P3_1
  229:		N      00B3	OUT_NET_START     EQU  P3_3     ; при запуске надо секунду удерживать тут высокий уровень
  230:
  231:				; КОНСТАНТЫ
  232:		N      0056	STACK             EQU  056h               ; местоположение стека
  233:		N      00FC	TIMER_HI          EQU  HIGH(NOT(1000-1))  ; константы иннициализации таймера опроса состояния датчик
				ов
  234:		N      0018	TIMER_LO          EQU  LOW(NOT(1000-1))
  235:
  236:				; ПЕРЕМЕННЫЕ
  237:		N      000A	VAL_HDD           EQU  10       ; показания индикаторов (0..8)
  238:		N      000B	VAL_NET           EQU  11
  239:		N      000C	VAL_RESERVE       EQU  12
  240:
  241:		N      000E	COUNT_HDD         EQU  14       ; счетчики обращений (сначала младший байт, затем - старший)
  242:		N      000F	COUNT_HDD_HI      EQU  15
  243:		N      0010	COUNT_NET         EQU  16
  244:		N      0011	COUNT_NET_HI      EQU  17
  245:		N      0012	COUNT_RESERVE     EQU  18
  246:		N      0013	COUNT_RESERVE_HI  EQU  19
  247:
  248:		N      0014	STATE_HDD         EQU  20       ; текущее состояние (FF-активен, 0-пассивен)
  249:		N      0015	STATE_NET         EQU  21
  250:		N      0016	STATE_RESERVE     EQU  22
  251:
  252:		N      0017	STATE_COUNT_HDD       EQU  23       ; счетчик нахождения в текущем состоянии
  253:		N      0018	STATE_COUNT_HDD_HI    EQU  24
  254:		N      0019	STATE_COUNT_NET       EQU  25
  255:		N      001A	STATE_COUNT_RESERVE   EQU  26
  256:
  257:
  258:
  259:
  260:
  261:
  262:		N      0000	CSEG AT 0
  263:
  264:				; ТОЧКА ВХОДА В ПРОГРАММУ
  265:	  0000	02 00 30		ljmp start

ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 6



 Line  I  Addr  Code            Source

  266:
  267:		N      000B	ORG    0Bh
  268:				; ВЕКТОР ПРЕРЫВАНИЯ ТАЙМЕРА T/C0
  269:	  000B	02 02 63	    ljmp    interrupt_handler_tc0
  270:
  271:				; НАЧАЛО ПРОГРАММЫ
  272:		N      0030	ORG    30h
  273:
  274:
  275:
  276:				; код первичной иннициализации
  277:	  0030			start:
  278:
  279:	  0030	75 81 56	   mov     SP, #STACK
  280:	  0033	90 03 00	   mov     DPTR, #d_levels
  281:
  282:				   ; обнуляем переменные
  283:	  0036	75 0A 00	   mov     VAL_HDD, #0
  284:	  0039	75 0B 00	   mov     VAL_NET, #0
  285:	  003C	75 0C 00	   mov     VAL_RESERVE, #0
  286:
  287:	  003F	75 0E 00	   mov     COUNT_HDD, #0
  288:	  0042	75 0F 00	   mov     COUNT_HDD_HI, #0
  289:	  0045	75 10 00	   mov     COUNT_NET, #0
  290:	  0048	75 11 00	   mov     COUNT_NET_HI, #0
  291:	  004B	75 12 00	   mov     COUNT_RESERVE, #0
  292:	  004E	75 13 00	   mov     COUNT_RESERVE_HI, #0
  293:
  294:	  0051	75 14 00	   mov     STATE_HDD, #0
  295:	  0054	75 15 00	   mov     STATE_NET, #0
  296:	  0057	75 16 00	   mov     STATE_RESERVE, #0
  297:
  298:	  005A	75 17 00	   mov     STATE_COUNT_HDD, #0
  299:	  005D	75 18 00	   mov     STATE_COUNT_HDD_HI, #0
  300:	  0060	75 19 00	   mov     STATE_COUNT_NET, #0
  301:	  0063	75 1A 00	   mov     STATE_COUNT_RESERVE, #0
  302:
  303:				   ; для корректной работы сетевой карты надо в течении секунды-двух удерживать высокий уровень
  304:				   ; на выоводе OUT_NET_START. затем для наблюдения за сетевой активностью этот вывод надо сбросить
				в 0
  305:	  0066	75 F0 07	   mov B, #7
  306:	  0069			L0:
  307:	  0069	C0 F0		   push B
  308:	  006B	75 F0 FF	   mov    B, #0FFh
  309:	  006E			l1:
  310:	  006E	C0 F0		   push b
  311:	  0070	75 F0 FF	   mov  B, #0FFh
  312:	  0073			l2:
  313:	  0073	D5 F0 FD	   djnz  B, L2
  314:	  0076	D0 F0		   pop  b
  315:	  0078	D5 F0 F3	   djnz   B, l1
  316:	  007B	D0 F0		   pop B
  317:	  007D	D5 F0 E9	   djnz B, L0
  318:
  319:	  0080	C2 B3		   clr OUT_NET_START
  320:

ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 7



 Line  I  Addr  Code            Source

  321:				   ; иннициализируем таймер
  322:	  0082	75 8A 18	   mov     TL0, #TIMER_LO
  323:	  0085	75 8C FC	   mov     TH0, #TIMER_HI
  324:	  0088	D2 AF		   setb    EA                          ; глобально разрешаем прерывания
  325:	  008A	D2 A9		   setb    ET0                         ; разрешение прерывания от Т/С0
  326:	  008C	D2 8C		   setb    TR0                         ; старт Т/С0
  327:
  328:
  329:
  330:				; главный цикл программы
  331:	  008E			main:
  332:				   ; индикация загрузки HDD
  333:	  008E	E5 0A		   mov     A, VAL_HDD
  334:	  0090	93		   movc    A, @A + DPTR
  335:	  0091	F5 90		   mov     P1, A
  336:	  0093	C2 B4		   clr     COL_HDD
  337:	  0095	12 00 A8	   call   calc_hdd_level
  338:	  0098	D2 B4		   setb    COL_HDD
  339:
  340:				   ; индикация загрузки NET
  341:	  009A	E5 0B		   mov     A, VAL_NET
  342:	  009C	93		   movc    A, @A + DPTR
  343:	  009D	F5 90		   mov     P1, A
  344:	  009F	C2 B7		   clr     COL_NET
  345:	  00A1	12 01 92	   call    calc_net_level
  346:	  00A4	D2 B7		   setb    COL_NET
  347:
  348:				IFDEF ENABLE_RESERVE
  349:				   ; индикация загрузки RESERVE
  350:				   mov     A, VAL_RESERVE
  351:				   movc    A, @A + DPTR
  352:				   mov     P1, A
  353:				   clr     COL_RESERVE
  354:				   call    calc_reserve_level
  355:				   setb    COL_RESERVE
  356:				ENDIF
  357:	  00A6	80 E6		   jmp     main
  358:
  359:
  360:
  361:				; -------------------------------------------------------------------------------------------------
  362:				; подпрограмма вычисления уровня загрузки HDD
  363:	  00A8			calc_hdd_level:
  364:				   ; если HDD долго непрерывно активен (горит светодиод при старте ПК), то устанавливаем
  365:				   ; уровень в 0 и сбрасываем счетчик
  366:	  00A8	E5 14		   mov     A, STATE_HDD
  367:	  00AA	60 1B		   jz      calc_hdd_level_go
  368:				   CMPJBW  STATE_COUNT_HDD, 800, calc_hdd_level_go
  369+ 1  00AC	E5 18		   mov     A, (STATE_COUNT_HDD+1)
  370+ 1  00AE	B4 03 0A	   cjne    A, #HIGH(800), ??0001
  371+ 1  00B1	E5 17		   mov     A, STATE_COUNT_HDD
  372+ 1  00B3	B4 20 00	   cjne    A, #LOW(800), ??0002
  373+ 1  00B6			??0002:
  374+ 1  00B6	40 05		   jc      ??0003
  375+ 1  00B8	02 00 C0	   jmp     ??0000
  376+ 1			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп

ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 8



 Line  I  Addr  Code            Source

       1			ользуемой ячейки
  377+ 1			; или используемого регистра, в противном случае флаг устанавливается в "1".
  378+ 1  00BB			??0001:
  379+ 1  00BB	50 03		   jnc      ??0000
  380+ 1  00BD			??0003:
  381+ 1  00BD	02 00 C7	   jmp      calc_hdd_level_go
  382+ 1  00C0			??0000:
  383:				   ; светодиод HDD горит непрерывно, значит, дело не в активности
  384:	  00C0	75 0A 00	   mov     VAL_HDD, #0
  385:	  00C3	75 0E 00	   mov     COUNT_HDD, #0
  386:	  00C6	22		   ret
  387:
  388:	  00C7			calc_hdd_level_go:
  389:	  00C7	E5 14		   mov     A, STATE_HDD
  390:	  00C9	70 13		   jnz     calc_hdd_level_go_go
  391:				   ; если диск долго пассивен, вручную уменьшаем его счетчик
  392:	  00CB	E5 18		   mov     A, STATE_COUNT_HDD_HI
  393:	  00CD	60 0F		   jz      calc_hdd_level_go_go
  394:				   ; диск достаточно долго пассивен
  395:				   DECW    COUNT_HDD
  396+ 1  00CF	E5 0E		   mov     A, COUNT_HDD
  397+ 1  00D1	70 09		   jnz     ??0005
  398+ 1  00D3	E5 0F		   mov     A, (COUNT_HDD+1)
  399+ 1  00D5	70 03		   jnz     ??0004
  400+ 1  00D7	02 00 DE	   jmp     ??0006
  401+ 1  00DA			??0004:
  402+ 1  00DA	15 0F		   dec     (COUNT_HDD+1)
  403+ 1  00DC			??0005:
  404+ 1  00DC	15 0E		   dec     COUNT_HDD
  405+ 1  00DE			??0006:
  406:
  407:	  00DE			calc_hdd_level_go_go:
  408:				   CALCLEV VAL_HDD, COUNT_HDD,   5, 25, 50, 100, 500, 1000, 2000, 5000
  409+ 1  00DE	75 0A 00	   mov     VAL_HDD, #0
  410+ 1			   CMPJBW  COUNT_HDD, 5, ??0007
  411+ 2  00E1	E5 0F		   mov     A, (COUNT_HDD+1)
  412+ 2  00E3	B4 00 0A	   cjne    A, #HIGH(5), ??0009
  413+ 2  00E6	E5 0E		   mov     A, COUNT_HDD
  414+ 2  00E8	B4 05 00	   cjne    A, #LOW(5), ??0010
  415+ 2  00EB			??0010:
  416+ 2  00EB	40 05		   jc      ??0011
  417+ 2  00ED	02 00 F5	   jmp     ??0008
  418+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  419+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  420+ 2  00F0			??0009:
  421+ 2  00F0	50 03		   jnc      ??0008
  422+ 2  00F2			??0011:
  423+ 2  00F2	02 01 91	   jmp      ??0007
  424+ 2  00F5			??0008:
  425+ 1  00F5	05 0A		   inc     VAL_HDD
  426+ 1			   CMPJBW  COUNT_HDD, 25, ??0007
  427+ 2  00F7	E5 0F		   mov     A, (COUNT_HDD+1)
  428+ 2  00F9	B4 00 0A	   cjne    A, #HIGH(25), ??0013
  429+ 2  00FC	E5 0E		   mov     A, COUNT_HDD
  430+ 2  00FE	B4 19 00	   cjne    A, #LOW(25), ??0014

ASEM-51 V1.3                                         Copyright (c) 2002 by W.W. Heinz                                         PAGE 9



 Line  I  Addr  Code            Source

  431+ 2  0101			??0014:
  432+ 2  0101	40 05		   jc      ??0015
  433+ 2  0103	02 01 0B	   jmp     ??0012
  434+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  435+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  436+ 2  0106			??0013:
  437+ 2  0106	50 03		   jnc      ??0012
  438+ 2  0108			??0015:
  439+ 2  0108	02 01 91	   jmp      ??0007
  440+ 2  010B			??0012:
  441+ 1  010B	05 0A		   inc     VAL_HDD
  442+ 1			   CMPJBW  COUNT_HDD, 50, ??0007
  443+ 2  010D	E5 0F		   mov     A, (COUNT_HDD+1)
  444+ 2  010F	B4 00 0A	   cjne    A, #HIGH(50), ??0017
  445+ 2  0112	E5 0E		   mov     A, COUNT_HDD
  446+ 2  0114	B4 32 00	   cjne    A, #LOW(50), ??0018
  447+ 2  0117			??0018:
  448+ 2  0117	40 05		   jc      ??0019
  449+ 2  0119	02 01 21	   jmp     ??0016
  450+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  451+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  452+ 2  011C			??0017:
  453+ 2  011C	50 03		   jnc      ??0016
  454+ 2  011E			??0019:
  455+ 2  011E	02 01 91	   jmp      ??0007
  456+ 2  0121			??0016:
  457+ 1  0121	05 0A		   inc     VAL_HDD
  458+ 1			   CMPJBW  COUNT_HDD, 100, ??0007
  459+ 2  0123	E5 0F		   mov     A, (COUNT_HDD+1)
  460+ 2  0125	B4 00 0A	   cjne    A, #HIGH(100), ??0021
  461+ 2  0128	E5 0E		   mov     A, COUNT_HDD
  462+ 2  012A	B4 64 00	   cjne    A, #LOW(100), ??0022
  463+ 2  012D			??0022:
  464+ 2  012D	40 05		   jc      ??0023
  465+ 2  012F	02 01 37	   jmp     ??0020
  466+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  467+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  468+ 2  0132			??0021:
  469+ 2  0132	50 03		   jnc      ??0020
  470+ 2  0134			??0023:
  471+ 2  0134	02 01 91	   jmp      ??0007
  472+ 2  0137			??0020:
  473+ 1  0137	05 0A		   inc     VAL_HDD
  474+ 1			   CMPJBW  COUNT_HDD, 500, ??0007
  475+ 2  0139	E5 0F		   mov     A, (COUNT_HDD+1)
  476+ 2  013B	B4 01 0A	   cjne    A, #HIGH(500), ??0025
  477+ 2  013E	E5 0E		   mov     A, COUNT_HDD
  478+ 2  0140	B4 F4 00	   cjne    A, #LOW(500), ??0026
  479+ 2  0143			??0026:
  480+ 2  0143	40 05		   jc      ??0027
  481+ 2  0145	02 01 4D	   jmp     ??0024
  482+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 10



 Line  I  Addr  Code            Source

  483+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  484+ 2  0148			??0025:
  485+ 2  0148	50 03		   jnc      ??0024
  486+ 2  014A			??0027:
  487+ 2  014A	02 01 91	   jmp      ??0007
  488+ 2  014D			??0024:
  489+ 1  014D	05 0A		   inc     VAL_HDD
  490+ 1			   CMPJBW  COUNT_HDD, 1000, ??0007
  491+ 2  014F	E5 0F		   mov     A, (COUNT_HDD+1)
  492+ 2  0151	B4 03 0A	   cjne    A, #HIGH(1000), ??0029
  493+ 2  0154	E5 0E		   mov     A, COUNT_HDD
  494+ 2  0156	B4 E8 00	   cjne    A, #LOW(1000), ??0030
  495+ 2  0159			??0030:
  496+ 2  0159	40 05		   jc      ??0031
  497+ 2  015B	02 01 63	   jmp     ??0028
  498+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  499+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  500+ 2  015E			??0029:
  501+ 2  015E	50 03		   jnc      ??0028
  502+ 2  0160			??0031:
  503+ 2  0160	02 01 91	   jmp      ??0007
  504+ 2  0163			??0028:
  505+ 1  0163	05 0A		   inc     VAL_HDD
  506+ 1			   CMPJBW  COUNT_HDD, 2000, ??0007
  507+ 2  0165	E5 0F		   mov     A, (COUNT_HDD+1)
  508+ 2  0167	B4 07 0A	   cjne    A, #HIGH(2000), ??0033
  509+ 2  016A	E5 0E		   mov     A, COUNT_HDD
  510+ 2  016C	B4 D0 00	   cjne    A, #LOW(2000), ??0034
  511+ 2  016F			??0034:
  512+ 2  016F	40 05		   jc      ??0035
  513+ 2  0171	02 01 79	   jmp     ??0032
  514+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  515+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  516+ 2  0174			??0033:
  517+ 2  0174	50 03		   jnc      ??0032
  518+ 2  0176			??0035:
  519+ 2  0176	02 01 91	   jmp      ??0007
  520+ 2  0179			??0032:
  521+ 1  0179	05 0A		   inc     VAL_HDD
  522+ 1			   CMPJBW  COUNT_HDD, 5000, ??0007
  523+ 2  017B	E5 0F		   mov     A, (COUNT_HDD+1)
  524+ 2  017D	B4 13 0A	   cjne    A, #HIGH(5000), ??0037
  525+ 2  0180	E5 0E		   mov     A, COUNT_HDD
  526+ 2  0182	B4 88 00	   cjne    A, #LOW(5000), ??0038
  527+ 2  0185			??0038:
  528+ 2  0185	40 05		   jc      ??0039
  529+ 2  0187	02 01 8F	   jmp     ??0036
  530+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  531+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  532+ 2  018A			??0037:
  533+ 2  018A	50 03		   jnc      ??0036
  534+ 2  018C			??0039:
  535+ 2  018C	02 01 91	   jmp      ??0007

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 11



 Line  I  Addr  Code            Source

  536+ 2  018F			??0036:
  537+ 1  018F	05 0A		   inc     VAL_HDD
  538+ 1  0191			??0007:
  539:	  0191	22		   ret
  540:
  541:
  542:
  543:				; -------------------------------------------------------------------------------------------------
  544:				; подпрограмма вычисления уровня загрузки NET
  545:	  0192			calc_net_level:
  546:				   ; если долгое время нет сетевой активности, то вручную уменьшаем счетчик NET
  547:	  0192	E5 15		   mov     A, STATE_NET
  548:	  0194	70 19		   jnz     calc_net_level_go
  549:				   ; сеть сейчас пассивна
  550:	  0196	E5 19		   mov     A, STATE_COUNT_NET
  551:	  0198	04		   inc     A
  552:	  0199	70 14		   jnz     calc_net_level_go
  553:				   ; сеть пассивна и счетчик пассивности на максимуме
  554:				   SUBW    COUNT_NET, 10
  555+ 1  019B	C3		   clr     C
  556+ 1  019C	E5 10		   mov     A, COUNT_NET
  557+ 1  019E	94 0A		   subb    A, #LOW(10)
  558+ 1  01A0	F5 10		   mov     COUNT_NET, A
  559+ 1  01A2	E5 11		   mov     A, (COUNT_NET+1)
  560+ 1  01A4	94 00		   subb    A, #HIGH(10)
  561+ 1  01A6	50 05		   jnc     ??0040
  562+ 1			   ; если был заем в старшем байте, то вычитаемое больше величины
  563+ 1  01A8	74 00		   mov     A, #0
  564+ 1  01AA	75 10 00	   mov     COUNT_NET, #0
  565+ 1  01AD			??0040:
  566+ 1  01AD	F5 11		   mov     (COUNT_NET+1), A
  567:
  568:	  01AF			calc_net_level_go:
  569:				   CALCLEV VAL_NET, COUNT_NET,   50, 100, 200, 400, 800, 2000, 3000, 4000
  570+ 1  01AF	75 0B 00	   mov     VAL_NET, #0
  571+ 1			   CMPJBW  COUNT_NET, 50, ??0041
  572+ 2  01B2	E5 11		   mov     A, (COUNT_NET+1)
  573+ 2  01B4	B4 00 0A	   cjne    A, #HIGH(50), ??0043
  574+ 2  01B7	E5 10		   mov     A, COUNT_NET
  575+ 2  01B9	B4 32 00	   cjne    A, #LOW(50), ??0044
  576+ 2  01BC			??0044:
  577+ 2  01BC	40 05		   jc      ??0045
  578+ 2  01BE	02 01 C6	   jmp     ??0042
  579+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  580+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  581+ 2  01C1			??0043:
  582+ 2  01C1	50 03		   jnc      ??0042
  583+ 2  01C3			??0045:
  584+ 2  01C3	02 02 62	   jmp      ??0041
  585+ 2  01C6			??0042:
  586+ 1  01C6	05 0B		   inc     VAL_NET
  587+ 1			   CMPJBW  COUNT_NET, 100, ??0041
  588+ 2  01C8	E5 11		   mov     A, (COUNT_NET+1)
  589+ 2  01CA	B4 00 0A	   cjne    A, #HIGH(100), ??0047
  590+ 2  01CD	E5 10		   mov     A, COUNT_NET

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 12



 Line  I  Addr  Code            Source

  591+ 2  01CF	B4 64 00	   cjne    A, #LOW(100), ??0048
  592+ 2  01D2			??0048:
  593+ 2  01D2	40 05		   jc      ??0049
  594+ 2  01D4	02 01 DC	   jmp     ??0046
  595+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  596+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  597+ 2  01D7			??0047:
  598+ 2  01D7	50 03		   jnc      ??0046
  599+ 2  01D9			??0049:
  600+ 2  01D9	02 02 62	   jmp      ??0041
  601+ 2  01DC			??0046:
  602+ 1  01DC	05 0B		   inc     VAL_NET
  603+ 1			   CMPJBW  COUNT_NET, 200, ??0041
  604+ 2  01DE	E5 11		   mov     A, (COUNT_NET+1)
  605+ 2  01E0	B4 00 0A	   cjne    A, #HIGH(200), ??0051
  606+ 2  01E3	E5 10		   mov     A, COUNT_NET
  607+ 2  01E5	B4 C8 00	   cjne    A, #LOW(200), ??0052
  608+ 2  01E8			??0052:
  609+ 2  01E8	40 05		   jc      ??0053
  610+ 2  01EA	02 01 F2	   jmp     ??0050
  611+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  612+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  613+ 2  01ED			??0051:
  614+ 2  01ED	50 03		   jnc      ??0050
  615+ 2  01EF			??0053:
  616+ 2  01EF	02 02 62	   jmp      ??0041
  617+ 2  01F2			??0050:
  618+ 1  01F2	05 0B		   inc     VAL_NET
  619+ 1			   CMPJBW  COUNT_NET, 400, ??0041
  620+ 2  01F4	E5 11		   mov     A, (COUNT_NET+1)
  621+ 2  01F6	B4 01 0A	   cjne    A, #HIGH(400), ??0055
  622+ 2  01F9	E5 10		   mov     A, COUNT_NET
  623+ 2  01FB	B4 90 00	   cjne    A, #LOW(400), ??0056
  624+ 2  01FE			??0056:
  625+ 2  01FE	40 05		   jc      ??0057
  626+ 2  0200	02 02 08	   jmp     ??0054
  627+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  628+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  629+ 2  0203			??0055:
  630+ 2  0203	50 03		   jnc      ??0054
  631+ 2  0205			??0057:
  632+ 2  0205	02 02 62	   jmp      ??0041
  633+ 2  0208			??0054:
  634+ 1  0208	05 0B		   inc     VAL_NET
  635+ 1			   CMPJBW  COUNT_NET, 800, ??0041
  636+ 2  020A	E5 11		   mov     A, (COUNT_NET+1)
  637+ 2  020C	B4 03 0A	   cjne    A, #HIGH(800), ??0059
  638+ 2  020F	E5 10		   mov     A, COUNT_NET
  639+ 2  0211	B4 20 00	   cjne    A, #LOW(800), ??0060
  640+ 2  0214			??0060:
  641+ 2  0214	40 05		   jc      ??0061
  642+ 2  0216	02 02 1E	   jmp     ??0058
  643+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 13



 Line  I  Addr  Code            Source

       2			ользуемой ячейки
  644+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  645+ 2  0219			??0059:
  646+ 2  0219	50 03		   jnc      ??0058
  647+ 2  021B			??0061:
  648+ 2  021B	02 02 62	   jmp      ??0041
  649+ 2  021E			??0058:
  650+ 1  021E	05 0B		   inc     VAL_NET
  651+ 1			   CMPJBW  COUNT_NET, 2000, ??0041
  652+ 2  0220	E5 11		   mov     A, (COUNT_NET+1)
  653+ 2  0222	B4 07 0A	   cjne    A, #HIGH(2000), ??0063
  654+ 2  0225	E5 10		   mov     A, COUNT_NET
  655+ 2  0227	B4 D0 00	   cjne    A, #LOW(2000), ??0064
  656+ 2  022A			??0064:
  657+ 2  022A	40 05		   jc      ??0065
  658+ 2  022C	02 02 34	   jmp     ??0062
  659+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  660+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  661+ 2  022F			??0063:
  662+ 2  022F	50 03		   jnc      ??0062
  663+ 2  0231			??0065:
  664+ 2  0231	02 02 62	   jmp      ??0041
  665+ 2  0234			??0062:
  666+ 1  0234	05 0B		   inc     VAL_NET
  667+ 1			   CMPJBW  COUNT_NET, 3000, ??0041
  668+ 2  0236	E5 11		   mov     A, (COUNT_NET+1)
  669+ 2  0238	B4 0B 0A	   cjne    A, #HIGH(3000), ??0067
  670+ 2  023B	E5 10		   mov     A, COUNT_NET
  671+ 2  023D	B4 B8 00	   cjne    A, #LOW(3000), ??0068
  672+ 2  0240			??0068:
  673+ 2  0240	40 05		   jc      ??0069
  674+ 2  0242	02 02 4A	   jmp     ??0066
  675+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  676+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  677+ 2  0245			??0067:
  678+ 2  0245	50 03		   jnc      ??0066
  679+ 2  0247			??0069:
  680+ 2  0247	02 02 62	   jmp      ??0041
  681+ 2  024A			??0066:
  682+ 1  024A	05 0B		   inc     VAL_NET
  683+ 1			   CMPJBW  COUNT_NET, 4000, ??0041
  684+ 2  024C	E5 11		   mov     A, (COUNT_NET+1)
  685+ 2  024E	B4 0F 0A	   cjne    A, #HIGH(4000), ??0071
  686+ 2  0251	E5 10		   mov     A, COUNT_NET
  687+ 2  0253	B4 A0 00	   cjne    A, #LOW(4000), ??0072
  688+ 2  0256			??0072:
  689+ 2  0256	40 05		   jc      ??0073
  690+ 2  0258	02 02 60	   jmp     ??0070
  691+ 2			; Флаг переноса C сбрасывается в "0", если содержимое A больше (равно) содержимого (содержимому) исп
       2			ользуемой ячейки
  692+ 2			; или используемого регистра, в противном случае флаг устанавливается в "1".
  693+ 2  025B			??0071:
  694+ 2  025B	50 03		   jnc      ??0070
  695+ 2  025D			??0073:

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 14



 Line  I  Addr  Code            Source

  696+ 2  025D	02 02 62	   jmp      ??0041
  697+ 2  0260			??0070:
  698+ 1  0260	05 0B		   inc     VAL_NET
  699+ 1  0262			??0041:
  700:	  0262	22		   ret
  701:
  702:
  703:				; -------------------------------------------------------------------------------------------------
  704:				; подпрограмма вычисления уровня загрузки RESERVE
  705:				IFDEF ENABLE_RESERVE
  706:				calc_reserve_level:
  707:				   CALCLEV VAL_RESERVE, COUNT_RESERVE,   5, 25, 50, 100, 200, 400, 800, 2000
  708:				   ret
  709:				ENDIF
  710:
  711:
  712:
  713:				; -------------------------------------------------------------------------------------------------
  714:				; ОБРАБОТЧИК ПРЕРЫВАНИЯ ТАЙМЕРА
  715:	  0263			interrupt_handler_tc0:
  716:
  717:				   ; сохраняем все используемые регистры
  718:	  0263	C0 F0		   push    B
  719:	  0265	F5 F0		   mov     B, A
  720:
  721:
  722:				   ; опрашиваем датчики
  723:				   ;  HDD
  724:	  0267	A9 14		   mov     R1, STATE_HDD            ; сохраняем предыдущее состояние
  725:	  0269	20 B0 15	   jb      IN_HDD, int_inc_hdd
  726:				   DECW    COUNT_HDD                ; --
  727+ 1  026C	E5 0E		   mov     A, COUNT_HDD
  728+ 1  026E	70 09		   jnz     ??0075
  729+ 1  0270	E5 0F		   mov     A, (COUNT_HDD+1)
  730+ 1  0272	70 03		   jnz     ??0074
  731+ 1  0274	02 02 7B	   jmp     ??0076
  732+ 1  0277			??0074:
  733+ 1  0277	15 0F		   dec     (COUNT_HDD+1)
  734+ 1  0279			??0075:
  735+ 1  0279	15 0E		   dec     COUNT_HDD
  736+ 1  027B			??0076:
  737:	  027B	75 14 00	   mov     STATE_HDD, #0
  738:	  027E	02 02 95	   jmp     int_state_hdd
  739:	  0281			int_inc_hdd:
  740:				   INCW    COUNT_HDD                ; ++
  741+ 1  0281	E5 0E		   mov     A, COUNT_HDD
  742+ 1  0283	04		   inc     A
  743+ 1  0284	70 0A		   jnz     ??0078
  744+ 1  0286	E5 0F		   mov     A, (COUNT_HDD+1)
  745+ 1  0288	04		   inc     A
  746+ 1  0289	70 03		   jnz     ??0077
  747+ 1  028B	02 02 92	   jmp     ??0079
  748+ 1  028E			??0077:
  749+ 1  028E	05 0F		   inc     (COUNT_HDD+1)
  750+ 1  0290			??0078:
  751+ 1  0290	05 0E		   inc     COUNT_HDD

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 15



 Line  I  Addr  Code            Source

  752+ 1  0292			??0079:
  753:	  0292	75 14 FF	   mov     STATE_HDD, #0FFh
  754:
  755:				   ; вычисляем счетчик текущего состояния
  756:	  0295			int_state_hdd:
  757:	  0295	E9		   mov     A, R1
  758:	  0296	65 14		   xrl     A, STATE_HDD             ; если состояние не изменилось, в A будет 0
  759:	  0298	70 14		   jnz     int_hdd_changed
  760:				   ; увеличиваем счетчик удержания состояния
  761:				   INCW    STATE_COUNT_HDD
  762+ 1  029A	E5 17		   mov     A, STATE_COUNT_HDD
  763+ 1  029C	04		   inc     A
  764+ 1  029D	70 0A		   jnz     ??0081
  765+ 1  029F	E5 18		   mov     A, (STATE_COUNT_HDD+1)
  766+ 1  02A1	04		   inc     A
  767+ 1  02A2	70 03		   jnz     ??0080
  768+ 1  02A4	02 02 AB	   jmp     ??0082
  769+ 1  02A7			??0080:
  770+ 1  02A7	05 18		   inc     (STATE_COUNT_HDD+1)
  771+ 1  02A9			??0081:
  772+ 1  02A9	05 17		   inc     STATE_COUNT_HDD
  773+ 1  02AB			??0082:
  774:	  02AB	02 02 B4	   jmp     int_verify_hdd_done
  775:	  02AE			int_hdd_changed:
  776:	  02AE	75 17 00	   mov     STATE_COUNT_HDD, #0
  777:	  02B1	75 18 00	   mov     STATE_COUNT_HDD_HI, #0
  778:	  02B4			int_verify_hdd_done:
  779:
  780:
  781:
  782:
  783:				   ;  NET
  784:	  02B4	A9 15		   mov     R1, STATE_NET
  785:	  02B6	20 B2 15	   jb      IN_NET, int_inc_net
  786:				   DECW    COUNT_NET                ; --
  787+ 1  02B9	E5 10		   mov     A, COUNT_NET
  788+ 1  02BB	70 09		   jnz     ??0084
  789+ 1  02BD	E5 11		   mov     A, (COUNT_NET+1)
  790+ 1  02BF	70 03		   jnz     ??0083
  791+ 1  02C1	02 02 C8	   jmp     ??0085
  792+ 1  02C4			??0083:
  793+ 1  02C4	15 11		   dec     (COUNT_NET+1)
  794+ 1  02C6			??0084:
  795+ 1  02C6	15 10		   dec     COUNT_NET
  796+ 1  02C8			??0085:
  797:	  02C8	75 15 00	   mov     STATE_NET, #0
  798:	  02CB	02 02 E2	   jmp     int_state_net
  799:	  02CE			int_inc_net:
  800:				   INCW    COUNT_NET                ; ++
  801+ 1  02CE	E5 10		   mov     A, COUNT_NET
  802+ 1  02D0	04		   inc     A
  803+ 1  02D1	70 0A		   jnz     ??0087
  804+ 1  02D3	E5 11		   mov     A, (COUNT_NET+1)
  805+ 1  02D5	04		   inc     A
  806+ 1  02D6	70 03		   jnz     ??0086
  807+ 1  02D8	02 02 DF	   jmp     ??0088

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 16



 Line  I  Addr  Code            Source

  808+ 1  02DB			??0086:
  809+ 1  02DB	05 11		   inc     (COUNT_NET+1)
  810+ 1  02DD			??0087:
  811+ 1  02DD	05 10		   inc     COUNT_NET
  812+ 1  02DF			??0088:
  813:	  02DF	75 15 FF	   mov     STATE_NET, #0FFh
  814:
  815:				   ; вычисляем счетчик текущего состояния
  816:	  02E2			int_state_net:
  817:	  02E2	E9		   mov     A, R1
  818:	  02E3	65 15		   xrl     A, STATE_NET             ; если состояние не изменилось, в A будет 0
  819:	  02E5	70 0B		   jnz     int_net_changed
  820:				   ; увеличиваем счетчик удержания состояния
  821:	  02E7	05 19		   inc     STATE_COUNT_NET
  822:	  02E9	E5 19		   mov     A, STATE_COUNT_NET
  823:	  02EB	70 08		   jnz     int_verify_net_done
  824:	  02ED	15 19		   dec     STATE_COUNT_NET
  825:	  02EF	02 02 F5	   jmp     int_verify_net_done
  826:	  02F2			int_net_changed:
  827:	  02F2	75 19 00	   mov     STATE_COUNT_NET, #0
  828:	  02F5			int_verify_net_done:
  829:
  830:
  831:	  02F5			int_verify_reserve:
  832:				IFDEF ENABLE_RESERVE
  833:				   ;  RESERVE
  834:				   jb      IN_RESERVE, int_inc_reserve
  835:				   DECW    COUNT_RESERVE            ; --
  836:				   jmp     int_reinit_timer
  837:				int_inc_reserveЖ
  838:				   INCW    COUNT_RESERVE            ; ++
  839:				ENDIF
  840:
  841:
  842:				   ; перезагружаем таймер и возвращаемся
  843:	  02F5			int_reinit_timer:
  844:	  02F5	75 8A 18	   mov     TL0, #TIMER_LO
  845:	  02F8	75 8C FC	   mov     TH0, #TIMER_HI
  846:
  847:				   ; восстанавливаем сохраненные регистры
  848:	  02FB	E5 F0		   mov     A, B
  849:	  02FD	D0 F0		   pop     B
  850:
  851:	  02FF	32		   reti
  852:
  853:
  854:				; -------------------------------------------------------------------------------------------------
  855:				; ОБЛАСТЬ ДАННЫХ
  856:				; уровни индикатора
  857:	  0300			d_levels:
  858:	  0300	FF		   db     11111111B          ; 0
  859:	  0301	7F		   db     01111111B          ; 1
  860:	  0302	3F		   db     00111111B          ; 2
  861:	  0303	1F		   db     00011111B          ; 3
  862:	  0304	0F		   db     00001111B          ; 4
  863:	  0305	07		   db     00000111B          ; 5

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 17



 Line  I  Addr  Code            Source

  864:	  0306	03		   db     00000011B          ; 6
  865:	  0307	01		   db     00000001B          ; 7
  866:	  0308	00		   db     00000000B          ; 8
  867:
  868:
  869:				END ; КОНЕЦ ПРОГРАММЫ
  870:
  871:





                     register banks used:  ---

                     no errors




ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 18





	       L I S T   O F   S Y M B O L S
	       =============================


SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
??0000				  CODE	    00C0	 382
??0001				  CODE	    00BB	 378
??0002				  CODE	    00B6	 373
??0003				  CODE	    00BD	 380
??0004				  CODE	    00DA	 401
??0005				  CODE	    00DC	 403
??0006				  CODE	    00DE	 405
??0007				  CODE	    0191	 538
??0008				  CODE	    00F5	 424
??0009				  CODE	    00F0	 420
??0010				  CODE	    00EB	 415
??0011				  CODE	    00F2	 422
??0012				  CODE	    010B	 440
??0013				  CODE	    0106	 436
??0014				  CODE	    0101	 431
??0015				  CODE	    0108	 438
??0016				  CODE	    0121	 456
??0017				  CODE	    011C	 452
??0018				  CODE	    0117	 447
??0019				  CODE	    011E	 454
??0020				  CODE	    0137	 472
??0021				  CODE	    0132	 468
??0022				  CODE	    012D	 463
??0023				  CODE	    0134	 470
??0024				  CODE	    014D	 488
??0025				  CODE	    0148	 484
??0026				  CODE	    0143	 479
??0027				  CODE	    014A	 486
??0028				  CODE	    0163	 504
??0029				  CODE	    015E	 500
??0030				  CODE	    0159	 495
??0031				  CODE	    0160	 502
??0032				  CODE	    0179	 520
??0033				  CODE	    0174	 516
??0034				  CODE	    016F	 511
??0035				  CODE	    0176	 518
??0036				  CODE	    018F	 536
??0037				  CODE	    018A	 532
??0038				  CODE	    0185	 527
??0039				  CODE	    018C	 534
??0040				  CODE	    01AD	 565
??0041				  CODE	    0262	 699
??0042				  CODE	    01C6	 585
??0043				  CODE	    01C1	 581
??0044				  CODE	    01BC	 576
??0045				  CODE	    01C3	 583
??0046				  CODE	    01DC	 601
??0047				  CODE	    01D7	 597
??0048				  CODE	    01D2	 592
??0049				  CODE	    01D9	 599

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 19



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
??0050				  CODE	    01F2	 617
??0051				  CODE	    01ED	 613
??0052				  CODE	    01E8	 608
??0053				  CODE	    01EF	 615
??0054				  CODE	    0208	 633
??0055				  CODE	    0203	 629
??0056				  CODE	    01FE	 624
??0057				  CODE	    0205	 631
??0058				  CODE	    021E	 649
??0059				  CODE	    0219	 645
??0060				  CODE	    0214	 640
??0061				  CODE	    021B	 647
??0062				  CODE	    0234	 665
??0063				  CODE	    022F	 661
??0064				  CODE	    022A	 656
??0065				  CODE	    0231	 663
??0066				  CODE	    024A	 681
??0067				  CODE	    0245	 677
??0068				  CODE	    0240	 672
??0069				  CODE	    0247	 679
??0070				  CODE	    0260	 697
??0071				  CODE	    025B	 693
??0072				  CODE	    0256	 688
??0073				  CODE	    025D	 695
??0074				  CODE	    0277	 732
??0075				  CODE	    0279	 734
??0076				  CODE	    027B	 736
??0077				  CODE	    028E	 748
??0078				  CODE	    0290	 750
??0079				  CODE	    0292	 752
??0080				  CODE	    02A7	 769
??0081				  CODE	    02A9	 771
??0082				  CODE	    02AB	 773
??0083				  CODE	    02C4	 792
??0084				  CODE	    02C6	 794
??0085				  CODE	    02C8	 796
??0086				  CODE	    02DB	 808
??0087				  CODE	    02DD	 810
??0088				  CODE	    02DF	 812
??ASEM_51			  NUMBER    8051
??VERSION			  NUMBER    0130
AC				  BIT	      D6
ACC				  DATA	      E0
ADDW				  MACRO	        	 141
B				  DATA	      F0
CALCLEV				  MACRO	        	 199
CALC_HDD_LEVEL			  CODE	    00A8	 363
CALC_HDD_LEVEL_GO		  CODE	    00C7	 388
CALC_HDD_LEVEL_GO_GO		  CODE	    00DE	 407
CALC_NET_LEVEL			  CODE	    0192	 545
CALC_NET_LEVEL_GO		  CODE	    01AF	 568
CMPJBW				  MACRO	        	 175
COL_HDD				  NUMBER    00B4	 222
COL_NET				  NUMBER    00B7	 223
COL_RESERVE			  NUMBER    00B5	 224
COUNT_HDD			  NUMBER    000E	 241

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 20



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
COUNT_HDD_HI			  NUMBER    000F	 242
COUNT_NET			  NUMBER    0010	 243
COUNT_NET_HI			  NUMBER    0011	 244
COUNT_RESERVE			  NUMBER    0012	 245
COUNT_RESERVE_HI		  NUMBER    0013	 246
CY				  BIT	      D7
DECW				  MACRO	        	 122
DPH				  DATA	      83
DPL				  DATA	      82
D_LEVELS			  CODE	    0300	 857
EA				  BIT	      AF
ES				  BIT	      AC
ET0				  BIT	      A9
ET1				  BIT	      AB
EX0				  BIT	      A8
EX1				  BIT	      AA
EXTI0				  CODE	    0003
EXTI1				  CODE	    0013
F0				  BIT	      D5
IE				  DATA	      A8
IE0				  BIT	      89
IE1				  BIT	      8B
INCW				  MACRO	        	 100
INT0				  BIT	      B2
INT1				  BIT	      B3
INTERRUPT_HANDLER_TC0		  CODE	    0263	 715
INT_HDD_CHANGED			  CODE	    02AE	 775
INT_INC_HDD			  CODE	    0281	 739
INT_INC_NET			  CODE	    02CE	 799
INT_NET_CHANGED			  CODE	    02F2	 826
INT_REINIT_TIMER		  CODE	    02F5	 843
INT_STATE_HDD			  CODE	    0295	 756
INT_STATE_NET			  CODE	    02E2	 816
INT_VERIFY_HDD_DONE		  CODE	    02B4	 778
INT_VERIFY_NET_DONE		  CODE	    02F5	 828
INT_VERIFY_RESERVE		  CODE	    02F5	 831
IN_HDD				  NUMBER    00B0	 226
IN_NET				  NUMBER    00B2	 227
IN_RESERVE			  NUMBER    00B1	 228
IP				  DATA	      B8
IT0				  BIT	      88
IT1				  BIT	      8A
L0				  CODE	    0069	 306
L1				  CODE	    006E	 309
L2				  CODE	    0073	 312
MAIN				  CODE	    008E	 331
OUT_NET_START			  NUMBER    00B3	 229
OV				  BIT	      D2
P				  BIT	      D0
P0				  DATA	      80
P1				  DATA	      90
P1_0				  NUMBER    0090	   5
P1_1				  NUMBER    0091	   6
P1_2				  NUMBER    0092	   7
P1_3				  NUMBER    0093	   8
P1_4				  NUMBER    0094	   9

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 21



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
P1_5				  NUMBER    0095	  10
P1_6				  NUMBER    0096	  11
P1_7				  NUMBER    0097	  12
P2				  DATA	      A0
P3				  DATA	      B0
P3_0				  NUMBER    00B0	  14
P3_1				  NUMBER    00B1	  15
P3_2				  NUMBER    00B2	  16
P3_3				  NUMBER    00B3	  17
P3_4				  NUMBER    00B4	  18
P3_5				  NUMBER    00B5	  19
P3_6				  NUMBER    00B6	  20
P3_7				  NUMBER    00B7	  21
PCON				  DATA	      87
PS				  BIT	      BC
PSW				  DATA	      D0
PT0				  BIT	      B9
PT1				  BIT	      BB
PX0				  BIT	      B8
PX1				  BIT	      BA
RB8				  BIT	      9A
RD				  BIT	      B7
REN				  BIT	      9C
RESET				  CODE	    0000
RI				  BIT	      98
RS0				  BIT	      D3
RS1				  BIT	      D4
RXD				  BIT	      B0
SBUF				  DATA	      99
SCON				  DATA	      98
SINT				  CODE	    0023
SM0				  BIT	      9F
SM1				  BIT	      9E
SM2				  BIT	      9D
SP				  DATA	      81
STACK				  NUMBER    0056	 232
START				  CODE	    0030	 277
STATE_COUNT_HDD			  NUMBER    0017	 252
STATE_COUNT_HDD_HI		  NUMBER    0018	 253
STATE_COUNT_NET			  NUMBER    0019	 254
STATE_COUNT_RESERVE		  NUMBER    001A	 255
STATE_HDD			  NUMBER    0014	 248
STATE_NET			  NUMBER    0015	 249
STATE_RESERVE			  NUMBER    0016	 250
SUBW				  MACRO	        	 157
T0				  BIT	      B4
T1				  BIT	      B5
TB8				  BIT	      9B
TCON				  DATA	      88
TF0				  BIT	      8D
TF1				  BIT	      8F
TH0				  DATA	      8C
TH1				  DATA	      8D
TI				  BIT	      99
TIMER0				  CODE	    000B
TIMER1				  CODE	    001B

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 22



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
TIMER_HI			  NUMBER    00FC	 233
TIMER_LO			  NUMBER    0018	 234
TL0				  DATA	      8A
TL1				  DATA	      8B
TMOD				  DATA	      89
TR0				  BIT	      8C
TR1				  BIT	      8E
TXD				  BIT	      B1
VAL_HDD				  NUMBER    000A	 237
VAL_NET				  NUMBER    000B	 238
VAL_RESERVE			  NUMBER    000C	 239
WR				  BIT	      B6
