
                ; программа для ПДУ
	$mod2051
                ; Вход на P3.2 (int0)
	ajmp main
	org 0Bh
	acall term
	reti


	DB 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
	DB 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
	DB 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
	DB 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
	DB 0ffh, 0ffh

	org 30h	;   Знакогенератор
  DB 03fh, 006h, 05bh, 04fh, 066h, 06dh, 07dh, 007h  ; 00h-07h  01234567
  DB 07fh, 06fh, 077h, 07ch, 039h, 05Eh, 079h, 071h  ; 08h-0Fh  89AbCdEF
  DB 0bfh, 086h, 0dbh, 0cfh, 0e6h, 0edh, 0fdh, 087h  ; 10h-17h  01234567.
  DB 0ffh, 0efh, 0f7h, 0fch, 0b9h, 0dEh, 0f9h, 0f1h  ; 18h-1Fh  89AbCdEF.
  DB 000h, 080h, 037h, 040h, 03eh, 008h, 05ch, 074h  ; 20h-27h   .П-U_oh
  DB 038h, 076h, 031h, 00Fh, 018h, 050h, 049h, 000h  ; 28h-2Fh  LHГ]ъг


;	org 200h
main:
        mov r3,#80h
        mov r0,00h
        mov r4,#00h
        mov r5,#00h
        mov r6,#03h
        mov r7,#03h
        mov 81h,#08h
r_zero:
        mov @r0,#0
        inc r0
        djnz r3,r_zero
        mov p1,#0FFh
 	mov tmod,#11h
	mov tl0,#8
	mov th0,#248
	setb tcon.4
	setb ie.1
	setb ie.7
        mov r2,#01h
        mov r1,#7Bh
        mov 7Ah,#0

	mov 30h,#0      ;громкость=0


	mov r1,#31h
	mov 6Eh,#31h
	acall rd_ee
	mov 31h,6Fh    ;низкие
	mov 6Eh,#32h
	acall rd_ee
        mov 32h,6Fh     ;высокие
	mov 6Eh,#33h
	acall rd_ee
        mov 33h,6Fh     ;канал

	mov 6Eh,#34h
	acall rd_ee
        mov 34h,6Fh     ;левый канал
	mov 6Eh,#35h
	acall rd_ee
        mov 35h,6Fh     ;правый канал
	mov 6Eh,#36h
	acall rd_ee
        mov 51h,6Fh     ;уровень 1-го входа
	mov 6Eh,#37h
	acall rd_ee
        mov 52h,6Fh     ;уровень 2-го входа
	mov 6Eh,#38h
	acall rd_ee
        mov 53h,6Fh     ;уровень 3-го входа

        mov r1,#30h
        acall wr_reg
        mov r1,#31h
        acall wr_reg
        mov r1,#32h
        acall wr_reg
        mov r1,#33h
        acall wr_reg
        mov r1,#34h
        acall wr_reg
        mov r1,#35h
        acall wr_reg

        mov r2,33h
        cjne r2,#01h,z01
        mov a,51h
z01:    cjne r2,#02h,z02
        mov a,52h
z02:    cjne r2,#03h,z03
        mov a,53h
z03:    mov 36h,a
        mov r1,#36h
        acall wr_reg
        mov 30h,#0
        mov r1,#30h
        acall wr_reg


aaa:
        mov 7Ah, #2  ;яркость
	mov 25h, #63
        mov 71h, #24h
        mov 72h, #0
        mov 73h, #0
        mov 26h,#0 ;ограничение вниз
	clr 25h

Main2:
		mov r4,#100
d22:		mov r5,#255
d23:            jnb p3.3,aa2jmp
		djnz r5,d23
		djnz r4,d22
		setb 25h
		mov r3,#16	;16
d01:		mov r4,#255
d02:		mov r5,#255
d03:            jnb p3.3,aa2jmp
		djnz r5,d03
		djnz r4,d02
		djnz r3,d01
		mov 7Ah,#02h
		mov r3,#20	;20
d11:		mov r4,#255
d12:		mov r5,#255
d13:            jnb p3.3,aa2jmp
		djnz r5,d13
		djnz r4,d12
		djnz r3,d11

		                 ; запись состояния в ПЗУ
m301:
        	mov 6Eh,#31h
		acall rd_ee
		mov a,31h
		cjne a,6Fh,m303
		sjmp m304
aa2jmp:         ajmp aa2

m303:   	mov 6Eh,#31h
		mov 6Fh,31h
		acall wr_ee

m304:        	mov 6Eh,#32h
		acall rd_ee
		mov a,32h
		cjne a,6Fh,m305
		sjmp m306
m305:   	mov 6Eh,#32h
		mov 6Fh,32h
		acall wr_ee

m306:        	mov 6Eh,#33h
		acall rd_ee
		mov a,33h
		cjne a,6Fh,m307
		sjmp m308
m307:   	mov 6Eh,#33h
		mov 6Fh,33h
		acall wr_ee


m308:        	mov 6Eh,#34h
		acall rd_ee
		mov a,34h
		cjne a,6Fh,m309
		sjmp m310
m309:           mov 6Eh,#34h
		mov 6Fh,34h
		acall wr_ee

m310:        	mov 6Eh,#35h
		acall rd_ee
		mov a,35h
		cjne a,6Fh,m311
		sjmp m312
m311:           mov 6Eh,#35h
		mov 6Fh,35h
		acall wr_ee

m312:        	mov 6Eh,#36h
		acall rd_ee
		mov a,51h
		cjne a,6Fh,m313
		sjmp m314
m313:		mov 6Eh,#36h
		mov 6Fh,51h
		acall wr_ee

m314:        	mov 6Eh,#37h
		acall rd_ee
		mov a,52h
		cjne a,6Fh,m315
		sjmp m316
m315:		mov 6Eh,#37h
		mov 6Fh,52h
		acall wr_ee

m316:        	mov 6Eh,#38h
		acall rd_ee
		mov a,53h
		cjne a,6Fh,m317
		sjmp m302
m317:		mov 6Eh,#38h
		mov 6Fh,53h
		acall wr_ee

m302:
		mov r1,#30h	;;;;;;;
                mov 71h,#24h
		mov 25h,#63
		mov 26h,#0
                mov a,@r1
                mov b,#10
                div AB
                mov 72h,a
                mov 73h,b

main3:
                jnb p3.3,aa2
                sjmp main3
aa2:
               acall main1
               clr tcon.7                    ; █
               mov tl1,#1                    ; █
               mov th1,#1                    ; █
               setb tcon.6                   ; █
aa1:
                mov a,#49h             ;   +
                cjne A,20h,vol1
                mov a,22h
                cjne a,#4Ah,vol1
                mov 7Ah, #0  ;яркость
vinc:           mov a,@r1
                cjne a,25h,vol11
                sjmp vol1
vol11:          inc @r1
                acall wr_reg
                mov a,@r1
                mov b,#10
                div AB
                mov 72h,a
                mov 73h,b
                setb 27h
		setb 26h
		clr 25h
		sjmp vol1

m2:
		ajmp main2
m1:
                jnb tcon.7,m1             ; █
                mov a,#05
                cjne A,20h,m2
		jb 25h,m2
	        mov 20h,#0FEh
		jnb 26h,m2
	        jb 27h,vinc1
                jnb 27h,vdec1
vinc1:          ajmp vinc
vdec1:          ajmp vdec

vol1:
                mov a,#49h             ;   -
                cjne A,20h,m1
                mov a,22h
                cjne a,#4Eh,vol2
                mov 7Ah, #0  ;яркость
vdec:           mov a,@r1
                cjne a,26h,vol21
                sjmp vol2
vol21:          dec @r1
                acall wr_reg
                cjne r1,#30h,vol22
                dec @r1		; через 3 на громкость "-"
                dec @r1
                mov a,@r1
		jnb ACC.7,vol23
		mov 30h,#0
vol23:
vol22:
                mov a,@r1
                mov b,#10
                div AB
                mov 72h,a
                mov 73h,b
                clr 27h
		setb 26h
		clr 25h
vol2:
                mov a,#49h             ; кнопка "аудио"
                cjne A,20h,m1
                mov a,22h
                cjne a,#0Ah,m1
                mov 7Ah, #0           ;яркость
                cjne r1,#36h,vol31
                mov r1,#2Fh
vol31:          inc r1
                cjne r1,#30h,vol32
                mov 71h,#24h
		mov 25h,#63
		mov 26h,#0
vol32:          cjne r1,#31h,vol33
                mov 71h,#28h
		mov 25h,#16
		mov 26h,#1
vol33:          cjne r1,#32h,vol34
                mov 71h,#29h
		mov 25h,#16
		mov 26h,#1
vol34:          cjne r1,#33h,vol35
                mov 71h,#2Eh
		mov 25h,#3
		mov 26h,#1
vol35:          cjne r1,#34h,vol36
                mov 71h,#2Ch
		mov 25h,#32
		mov 26h,#1
vol36:          cjne r1,#35h,vol37
                mov 71h,#2Dh
		mov 25h,#32
		mov 26h,#1
vol37:          cjne r1,#36h,vol38
              ;  mov a,33h
              ;  orl a,#50h
              ;  mov r0,a
              ;  mov 36h,@r0
                mov 71h,#26h
		mov 25h,#4
		mov 26h,#1
vol38:          mov a,@r1
                mov b,#10
                div AB
                mov 72h,a
                mov 73h,b
		clr 25h
		clr 26h
vol3:           ajmp m1

wr_reg:
                cjne r1,#30h,wr_01	;громкость
                mov a,@r1
                cpl a
                anl a,#00111111b

wr_01:
                cjne r1,#31h,wr_02	;низкие
                mov a,@r1
		dec a
                jnb ACC.3,wr_011
		cpl a
                setb ACC.3
wr_011:         anl a,#01101111b
                orl a,#01100000b
wr_02:
                cjne r1,#32h,wr_03	;высокие
                mov a,@r1
		dec a
                jnb ACC.3,wr_021
                cpl a
                setb ACC.3
wr_021:         anl a,#01111111b
                orl a,#01110000b
wr_03:
                cjne r1,#33h,wr_04	;коммутатор

                mov r2,33h
                cjne r2,#01h,wr031
                mov a,51h
wr031:
                cjne r2,#02h,wr032
                mov a,52h
wr032:
                cjne r2,#03h,wr033
                mov a,53h
wr033:
                mov 36h,a
                dec a
                cpl a
                anl a,#00000011b
                rl a
                rl a
                rl a
                orl a,33h
		dec a
                anl a,#01011011b
                orl a,#01000000b
wr_04:
                cjne r1,#34h,wr_05	;левый канал
                mov a,@r1
		dec a
                cpl a
                anl a,#10011111b
                orl a,#10000000b
wr_05:
                cjne r1,#35h,wr_06	;правый канал
                mov a,@r1
		dec a
                cpl a
                anl a,#10111111b
                orl a,#10100000b
wr_06:
                cjne r1,#36h,wr_07	;уровень текущего входа
                mov a,36h
                mov r2,33h
                cjne r2,#01h,wr061
                mov 51h,36h
wr061:
                cjne r2,#02h,wr062
                mov 52h,36h
wr062:
                cjne r2,#03h,wr063
                mov 53h,36h
wr063:
                dec a
                cpl a
                anl a,#00000011b
                rl a
                rl a
                rl a
                orl a,33h
                dec a
                anl a,#01011011b
                orl a,#01000000b
wr_07:
                mov 6Dh,a
                acall wr_vol
                ret


                                        ; информация с ПДУ
main1:          ;jb p3.3,*		;возврат 20h,21h,22h,23h
	       	clr ie.7		;запрет прерываний
		mov p1,#0FFh
                mov r3,#88	;88	;20h=5 - повторы, 20h=6 - ложный сигнал
st90:
                jb p3.3,err
                acall delay_50
                djnz r3,st90
                mov r3,#4	;4
st901:          jb p3.3,st45
                acall delay_50
                djnz r3,st901
                sjmp main1

st45:           mov r3,#43	;43
st452:          jnb p3.3,repeat
		acall delay_50
                djnz r3,st452
                mov r3,#4	;4
st451:          jnb p3.3,bbb
		acall delay_50
                djnz r3,st451

bbb:                         ; прошел старт
                mov r0,#20h
                mov r5,#4
bbb5:		mov r4,#8
bbb4:           mov r3,#7
bbb2:           jb p3.3,bbb1
                acall delay_50
                djnz r3,bbb2    ; ждём 0  7мс
bbb1:           mov r3,#9
bbb3:           acall delay_50
                djnz r3,bbb3
                mov c,p3.3
                cpl c
                rlc A
                jnb p3.3,bbb6
                mov r3,#18
bbb7:           jb p3.3,bbb8
                acall delay_50
                djnz r3,bbb7     ; ждём 0  18мс
                mov r3,#7
bbb8:           jnb p3.3,bbb6
                acall delay_50
                djnz r3,bbb8     ; ждём 1  7мс
bbb6:
                djnz r4,bbb4
                mov @r0,a
                inc r0
                djnz r5,bbb5
         	setb ie.7
		ret
repeat:		mov 20h,#05
         	setb ie.7
		ret
err:		mov 20h,#06
         	setb ie.7
                ret


           ;█████████ Задержка 100 мкс ████████
Delay_50:                            ;        █
               clr tcon.7            ;        █
               mov tl1,#160          ;        █
               mov th1,#255          ;        █
               setb tcon.6           ;        █
      	       acall term            ;        █
               jnb tcon.7,$          ;        █
                ret                  ;█████████



wr_vol:                      ; ███████████ запись в регулятор ████████████
                            ; 6Dh - данные
       	clr ie.7		;запрет прерываний
vwrack:  setb p3.4
        jnb p3.4,$
        setb p3.5
        jnb p3.5,$
        acall eedel
        clr p3.5        ; start
        acall eedel
        clr p3.4
        acall eedel
        mov a,#10001000b
        mov r6,#8
vwree1:  rlc a
        mov p3.5,c
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        clr p3.4
        acall eedel
        djnz r6,vwree1
        setb p3.5
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        jb p3.5,$ ;vwrack
        ;mov r6,#2
        ;sjmp wree3
vwree2:  clr p3.4
        acall eedel
        mov a,6Dh                ; адрес
        mov r6,#8
vwree4:  rlc a
        mov p3.5,c
        acall eedel
        setb p3.4
        jnb p3.4,$
        clr p3.4
        acall eedel
        djnz r6,vwree4
        setb p3.5
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        jnb p3.5,vwree5
        sjmp $ ;vwree3
vwree5:  clr p3.4
        acall eedel


        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        setb p3.5
        jnb p3.5,$
       	setb ie.7
        ret                 ; ███████████ конец записи в регулятор█████████



wr_ee:                      ; ███████████ запись в ПЗУ ████████████
                            ; h'6E - адрес, h'6F - данные
       	clr ie.7		;запрет прерываний
wrack:  setb p3.4
        jnb p3.4,$
        setb p3.5
        jnb p3.5,$
        lcall eedel
        clr p3.5        ; start
        lcall eedel
        clr p3.4
        lcall eedel
        mov a,#10100000b
        mov r6,#8
wree1:  rlc a
        mov p3.5,c
        lcall eedel
        setb p3.4
        jnb p3.4,$
        lcall eedel
        clr p3.4
        lcall eedel
        djnz r6,wree1
        setb p3.5
        lcall eedel
        setb p3.4
        jnb p3.4,$
        lcall eedel
        jb p3.5,wrack
        ;mov r6,#2
        ;sjmp wree3
wree2:  clr p3.4
        lcall eedel
        mov a,6Eh                ; адрес
        mov r6,#8
wree4:  rlc a
        mov p3.5,c
        lcall eedel
        setb p3.4
        jnb p3.4,$
        clr p3.4
        lcall eedel
        djnz r6,wree4
        setb p3.5
        lcall eedel
        setb p3.4
        jnb p3.4,$
        lcall eedel
        jnb p3.5,wree5
        mov r6,#2
        sjmp $ ;wree3
wree5:  clr p3.4
        lcall eedel
        mov a,6Fh                        ; байт
        mov r6,#8
wree6:
        rlc a
        mov p3.5,c
        lcall eedel
        setb p3.4
        jnb p3.4,$
        lcall eedel
        clr p3.4
        djnz r6,wree6
        lcall eedel
        setb p3.5
        lcall eedel
        setb p3.4
        jnb p3.4,$
        lcall eedel
        jnb p3.5,wree7
        mov r6,#2
        sjmp $; wree3
wree7:  clr p3.5
        lcall eedel
        clr p3.4
        mov r6,#1
wree3:
        lcall eedel
        setb p3.4
        jnb p3.4,$
        lcall eedel
        setb p3.5
        jnb p3.5,$
       	setb ie.7
        ret                 ; ███████████ конец записи в ПЗУ ████████████


eedel:  nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        ret

rd_ee:                      ; ███████████ чтение из ПЗУ ████████████
       	clr ie.7		;запрет прерываний
rdack:  setb p3.4
        jnb p3.4,$
        acall eedel
        setb p3.5
        jnb p3.5,$
        acall eedel
        clr p3.5        ; start
        acall eedel
        clr p3.4
        acall eedel
        mov a,#10100000b       ;
        mov r6,#8
rdee1:  rlc a
        mov p3.5,c
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        clr p3.4
        acall eedel
        djnz r6,rdee1
        setb p3.5
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
 ;       jb p3.5,rdack
        ;mov r6,#2
        ;sjmp rdee3
rdee2:  clr p3.4
        acall eedel
        mov a,6Eh        ; запись адреса
        mov r6,#8
rdee4:  rlc a
        mov p3.5,c
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        clr p3.4
        acall eedel
        djnz r6,rdee4
        setb p3.5
        acall eedel
        setb p3.4
        jnb p3.4,$
        jnb p3.5,rdee5
        acall eedel
        mov r6,#2
 ;       sjmp $ ;rdee3
rdee5:
        acall eedel
        clr p3.4
        acall eedel
        setb p3.5
        jnb p3.5,$
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        clr p3.5        ; start
        acall eedel
        clr p3.4
        acall eedel
        mov a,#10100001b       ;
        mov r6,#8
rdee8:  rlc a
        mov p3.5,c
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        clr p3.4
        acall eedel
        djnz r6,rdee8
        setb p3.5
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        jnb p3.5,rdee9
        mov r6,#2
 ;       sjmp $ ; rdee3
rdee9:  clr p3.4
        acall eedel
        mov r6,#8
        clr a
        clr c
rdee6:
        setb p3.5
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        mov c,p3.5
        rlc a
        acall eedel
        clr p3.4
        acall eedel
        djnz r6,rdee6
        mov 6Fh,a
        setb p3.5
        jnb p3.5,$
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        clr p3.4
        acall eedel
        clr p3.5
        mov r6,#1
rdee3:
        acall eedel
        setb p3.4
        jnb p3.4,$
        acall eedel
        setb p3.5
        jnb p3.5,$
       	setb ie.7
        ret                 ; ███████████ конец чтения из ПЗУ ████████████



; ███████████████████████████████████████████████████████████████████████████
; █▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
; █▒▒▒▒▒▒▒ обработка прерывания Т0,  вектор 0Bh (клавиатура, дисплей) ▒▒▒▒▒▒█
; █▒▒▒ видеоRAM-70h...7Fh, R3(bank3) адр. 1Вh-код клавиши, FFh-нет нажатия▒▒█
; █▒▒▒▒▒▒▒▒▒bank3-r7-Nшага,   Знакогенератор по адресу 400h(ROM)▒▒▒▒▒▒▒▒▒▒▒▒█
; █▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█
; ███████████████████████████████████████████████████████████████████████████

term:
	push acc
	push psw
	push dpl
	push dph
	setb psw.3
	setb psw.4   ; Bank 3
	mov th0,#253 ; следующее прерывание через 610мкс(FFFF-FE00)
        setb tcon.4
                                ;начало
        mov p1,#0FFh
        mov a,p3
        anl a,#11111000b
        orl a,r7
        mov p3,a

        cjne r6,#0,t_02
        cjne r7,#11111110b,t_01
t_03:
        mov a,7Ah
        anl a,#00000011b
        mov r6,a
        sjmp t_01
t_02:
        mov p1,#0FFh
        cjne r7,#11111110b,t_00
        dec r6
        sjmp t_00
t_01:
        mov a, @r0
        mov dptr, #0030h
        movc a, @a+dptr
        cpl a
        mov p1,a
t_00:
        mov a,r7
        rl a
        mov r7,a
        jb acc.3,term_5
        mov r7,#11111110b       ; Nшага(r7)=0 > переустановка
	mov r0,#70h
        mov 1Bh, r5
        mov r5, #0
                                ;конец
term_5:	inc r0
        mov a,7Ah
        jnb acc.2,t_04
        mov p1,#0FFh
t_04:   pop dph
	pop dpl
	pop psw
	pop acc
        ret
	nop
	nop
	nop
	nop
	nop

eee:	
	end

