📄 ir8604a.asm
字号:
MOV A,IIC_RD_DATA
JZ EEPROM23
CLR D_OFF_LEARNED
SJMP EEPROM24
EEPROM23: SETB D_OFF_LEARNED
EEPROM24: SETB PX0
SETB IT0
SETB EX0
JNB P3.2,$
JB P3.2,$
LCALL DELAY1
MOV THROLD,#6
CLR TX1
CLR TX2
CLR IE0
CLR IE1
SETB EA
MAIN1: SETB SW_A_ON
SETB SW_A_OFF
SETB SW_B_ON
SETB SW_B_OFF
SETB SW_C_ON
SETB SW_C_OFF
SETB SW_D_ON
SETB SW_D_OFF
MOV C,SW_A_ON
ANL C,SW_A_OFF
ANL C,SW_B_ON
ANL C,SW_B_OFF
ANL C,SW_C_ON
ANL C,SW_C_OFF
ANL C,SW_D_ON
ANL C,SW_D_OFF
JC MAIN2
CLR IT0
CLR EX0
CLR ET0
CLR TF0
CLR ET1
CLR TF1
CLR TF2
CLR ET2
CLR IE1
SETB IT1
SETB EX1
SETB F_FIRST_READ
MOV TMOD,#10010001B
LCALL LEARN
CLR IE1
CLR IE0
SJMP MAIN1
MAIN2:
SETB IT0
SETB EX0
SETB ET1
CLR IE1
CLR IT1
CLR EX1
clr f_stop
clr f_fill
clr f_exit
clr f_return
CLR F_LEARN_RUNNING
CLR TR0
SETB ET1
SETB TR1
mov tmod,#11H
SETB SW_A_SETUP
SETB SW_B_SETUP
SETB SW_C_SETUP
SETB SW_D_SETUP
MOV C,SW_A_SETUP
ANL C,SW_B_SETUP
ANL C,SW_C_SETUP
ANL C,SW_D_SETUP
JC MAIN3
LCALL SETUP_INFRA
LCALL READ_WRITE
CLR RECE_BORD_FLAG
LJMP MAIN1
MAIN3:
LCALL READ_WRITE
LCALL INFRA_ACK
LCALL LOCAL_CONTROL
LCALL BORD_DISPOSE
LCALL REMOTE
LJMP MAIN1
int0: clr tr2
MOV TH2,#0e5h
MOV TL2,#5Ch
setb tr2
setb et2
clr ie0
reti
;************************************************************************
; COMMUNICATION LAYER
;************************************************************************
TT2: push a
push psw
PUSH B
CLR TF2
CLR ET2
SETB F_10MS_READ
SETB F_10MS_LEARN
SETB F_10MS_WAIT
JNB P3.2,$
JNB F_SEND_RUNNING,RXN
LCALL SEND_FRE
SJMP TT2_QUIT
RXN: LCALL DELAY200US
LCALL FRE_SYN
TT2_QUIT: lcall read
MOV A,CHANNEL_IDLE_COUNT
CJNE A,#50,RX5
CLR RECE_BORD_FLAG
CLR F_REPEAT1
CLR F_REPEAT2
CLR F_ACK_WAIT
RX5: LCALL RESPONSE
LCALL OP_RESPONSE
JNB F_NECESSARY,REPEAT1
MOV A,COUNT_108MS
INC A
MOV COUNT_108MS,A
CLR C
SUBB A,#15
JC REPEAT1
MOV COUNT_108MS,#00H
CLR F_NECESSARY
MOV COUNT_108MS,#00H
REPEAT1: JNB F_INFRA_WAIT,REPEAT2
CLR C
MOV A,INFRA_LOW_WAIT
ADDC A,#01H
MOV INFRA_LOW_WAIT,A
MOV A,INFRA_HIGH_WAIT
ADDC A,#00H
MOV INFRA_HIGH_WAIT,A
CLR C
SUBB A,#05H
JC REPEAT2
MOV INFRA_LOW_WAIT,#00H
MOV INFRA_HIGH_WAIT,#00H
CLR F_INFRA_WAIT
CLR F_GROUP
CLR F_TYPE
CLR F_TEAM
CLR F_ROOM
REPEAT2: JNB F_ACK_WAIT,REPEAT3
MOV A,ACK_COUNT
INC A
MOV ACK_COUNT,A
CJNE A,#77,REPEAT3
JB F_DATA,REPEAT3
MOV ACK_COUNT,#00H
JNB F_REPEAT1,REPEAT2X1
JB F_SEND_RUNNING,REPEAT3
CLR F_REPEAT1
SJMP REPEAT2X3
REPEAT2X1:
JNB F_REPEAT2,REPEAT2X2
JB F_SEND_RUNNING,REPEAT3
CLR F_REPEAT2
SJMP REPEAT2X3
REPEAT2X2: CLR F_ACK_WAIT
SJMP REPEAT3
REPEAT2X3: MOV EMIT_COUNT,#00H
MOV EMIT_TIMES,#32
SETB F_SEND_ZERO1
SETB F_SEND_HIGH
MOV A,SEND_BUF1
MOV SEND_LOW1,A
MOV A,SEND_BUF2
MOV SEND_LOW2,A
MOV A,SEND_BUF3
MOV SEND_LOW3,A
MOV A,SEND_BUF4
MOV SEND_LOW4,A
SETB F_SEND_RUNNING
REPEAT3: POP B
pop psw
pop a
RETI
int1: push a
push psw
setb p3.3
jb p3.3,int1_quit
jb p3.3,int1_quit
jb p3.3,int1_quit
jb p3.3,int1_quit
jb p3.3,int1_quit
jb p3.3,int1_quit
jb p3.3,int1_quit
jb p3.3,int1_quit
jb p3.3,int1_quit
clr tr1
clr tr0
mov sample1_h,th1
mov sample1_l,tl1
mov sample0_h,th0
mov sample0_l,tl0
mov th1,#00h
mov tl1,#00h
mov th0,#00h
mov tl0,#00h
setb tr1
setb tr0
setb f_two_byte
int1_quit: clr ie1
pop psw
pop a
reti
tt0: push a
push psw
clr tr0
mov tl0,sample0_l
MOV A,SAMPLE0_L
mov th0,sample0_h
MOV A,SAMPLE0_H
mov c,plority
mov serial_out,c
setb tr0
setb f_necessary
tt0_end: pop psw
pop a
reti
level1: push a
push psw
jb f_convert,spp1
jb f_two_byte,level1_1
spp1: ajmp level1_end
level1_1: clr f_two_byte
jnb F_FIRST_READ,level1_2
clr F_FIRST_READ
ajmp level1_end
level1_2:
clr c
mov a,sample0_l
addc a,#40 ;period
mov sample0_l,a
mov a,sample0_h
addc a,#00h
mov sample0_h,a
clr c
mov a,sample0_l
subb a,sample1_l
mov level_l,a
mov a,sample0_h
subb a,sample1_h
clr c ;right shift one
mov level_h,a
rrc a
mov level_h,a
mov a, level_l
rrc a
mov level_l,a
clr c ;right shift two
mov a,level_h
rrc a
mov level_h,a
mov a, level_l
rrc a
mov level_l,a
clr c ;right shift three
mov a,level_h
rrc a
mov level_h,a
mov a, level_l
rrc a
mov level_l,a
clr c ;right shift four
mov a,level_h
rrc a
mov level_h,a
mov a, level_l
rrc a
mov level_l,a
jnc high3
clr c
addc a,#01h
mov level_l,a
mov a,level_h
addc a,#00h
mov level_h,a
high3: clr c
mov a,level_h
rlc a
mov level_h,a
mov a,level_l
jnb acc.7,high1
clr acc.7 ;plority
mov level_l,a
inc level_h
high1: clr c
mov a,sample1_l
subb a,#60
mov sample1_l,a
mov a,sample1_h
subb a,#00h
mov sample1_h,a
clr c ;right shift one
mov a,sample1_h
rrc a
mov sample1_h,a
mov a,sample1_l
rrc a
mov sample1_l,a
clr c ;right shift two
mov a,sample1_h
rrc a
mov sample1_h,a
mov a,sample1_l
rrc a
mov sample1_l,a
clr c ;right shift three
mov a,sample1_h
rrc a
mov sample1_h,a
mov a,sample1_l
rrc a
mov sample1_l,a
clr c ;right shift four
mov a,sample1_h
rrc a
mov sample1_h,a
mov a,sample1_l
rrc a
mov sample1_l,a
jnc high4
clr c
addc a,#01h
mov sample1_l,a
mov a,sample1_h
addc a,#00h
mov sample1_h,a
high4: clr c
mov a,sample1_h
rlc a
mov sample1_h,a
mov a,sample1_l
jnb acc.7,high2
inc sample1_h
high2: setb acc.7 ;plority
mov sample1_l,a
setb f_convert
clr f_math_level
clr f_math_sample
level1_end : pop psw
pop a
ret
query: push a
push psw
jnb f_frame,query8
ljmp query_end
query8: jb f_convert,query_loop ;0A0h___Bfh 32 bytes buffer
ajmp query6
query_loop: mov a,frame_count
add a,#0a0h
mov r0,a
mov a,level_l
clr acc.7
jz query2
clr f_math_level
clr c
subb a,#14
jc query1 ;<224 ?
mov a,level_l ;>224
clr acc.7
mov @r0,a
mov level_l,#00h
inc frame_count
ajmp query5
query1: mov a,level_l
clr acc.7
clr c
addc a,#14
clr acc.7
mov @r0,a
mov level_l,#00h
inc frame_count
setb f_math_level
ajmp query5
query2: mov a,level_h
jz query4
mov @r0,#01111111b
cjne a,#1,query3
jnb f_math_level,query3
clr f_math_level
mov @r0,#01110001b
query3: dec level_h
inc frame_count
ajmp query5
query4: mov a,sample1_l
clr acc.7
jz query4x2
clr f_math_sample
clr c
clr acc.7
subb a,#14 ;<224 ?
jc query4x1
mov a,sample1_l ;>224
setb acc.7
mov @r0,a
mov sample1_l,#00h
inc frame_count
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -