📄 common.asm
字号:
FRE_SYN: MOV COUNT_ZERO,#00H
MOV R7,#200
SETB POWER_LINE_RX
SAMPLE_LOOP: JB POWER_LINE_RX,FRE1 ;2
INC COUNT_ZERO ;3
SJMP FRE2 ;5
FRE1: NOP ;6
NOP ;7
NOP ;8
FRE2: NOP
NOP
DJNZ R7,SAMPLE_LOOP ;10
JNB F_STOP_LINE,FRE3
LJMP FRE8
;//////////////////////////////////////////////
; DETECT SIGNAL START
;//////////////////////////////////////////////
FRE3: JB F_SAMPLE_ONE,FRE4
MOV A,COUNT_ZERO
MOV OLD_ZERO,A
SETB F_SAMPLE_ONE
LJMP THROLD_STOP
FRE4: MOV A,COUNT_ZERO
JZ FRE4X3
MOV A,OLD_ZERO
JNZ FRE4X2
FRE4X3: CLR A
MOV C,CD4051_A
MOV ACC.0,C
MOV C,CD4051_B
MOV ACC.1,C
MOV C,CD4051_C
MOV ACC.2,C
MOV SKIP_THROLD,A
SJMP FRE4X5
FRE4X2:
CLR A
MOV C,CD4051_A
MOV ACC.0,C
MOV C,CD4051_B
MOV ACC.1,C
MOV C,CD4051_C
MOV ACC.2,C
CLR C
SUBB A,SKIP_THROLD
JNC FRE4X4
SJMP FRE4X5
FRE4X4: CLR A
MOV C,CD4051_A
MOV ACC.0,C
MOV C,CD4051_B
MOV ACC.1,C
MOV C,CD4051_C
MOV ACC.2,C
MOV SKIP_THROLD,A
FRE4X5: SETB F_SAMPLE_TWO
MOV A,COUNT_ZERO
CLR C
SUBB A,#130
JC FRE4X
MOV A,OLD_ZERO
CLR C
SUBB A,#130
JC FRE4X
SETB F_RISE
LJMP FRE7
FRE4X: MOV A,COUNT_ZERO
CLR C
SUBB A,#15
JNC FRE4X1
MOV A,OLD_ZERO
CLR C
SUBB A,#15
JNC FRE4X1
SETB F_FALL
LJMP FRE7
FRE4X1:
MOV A,COUNT_ZERO
CLR C
SUBB A,OLD_ZERO
JC FRE5
JZ FRE7
MOV A,COUNT_ZERO ;SIGNAL>NOISE
CLR C
SUBB A,#140
JC FRE7
MOV NOISE,OLD_ZERO ;SIGNAL>140
MOV TEST_HEAD,#00000010B
MOV A,COUNT_ZERO
CLR C
SUBB A,OLD_ZERO
SJMP FRE6
FRE5: CPL A
MOV NOISE,COUNT_ZERO
MOV TEST_HEAD,#00000001B
MOV A,OLD_ZERO
CLR C
SUBB A,#140
JC FRE7
MOV A,OLD_ZERO
CLR C
SUBB A,COUNT_ZERO
FRE6: CLR C
SUBB A,#80
JC FRE7
; JNB F_HEAD,FRE6X
SETB F_STOP_LINE
CLR F_HEAD
MOV RECE_TIME,#00H
CLR F_DATA
CLR F_SAMPLE_ONE
CLR F_SAMPLE_TWO
MOV CHANNEL_IDLE_COUNT,#00H
LJMP THROLD_STOP
FRE6X: CLR F_SAMPLE_ONE
CLR F_SAMPLE_TWO
MOV A,SKIP_THROLD
MOV C,ACC.0
MOV CD4051_A,C
MOV C,ACC.1
MOV CD4051_B,C
MOV C,ACC.2
MOV CD4051_C,C
SETB F_HEAD
MOV CHANNEL_IDLE_COUNT,#00H
LJMP THROLD_STOP
FRE7: LJMP THROLD_VARY
;/////////////////////////////////////////////
; DETECT 001 OR 0001
;/////////////////////////////////////////////
FRE8: JNB F_DATA,FRE9
LJMP FRE15
FRE9: CLR C
MOV A,COUNT_ZERO
SUBB A,NOISE
JNC FRE10
CLR C
MOV A,NOISE
ADDC A,COUNT_ZERO
RRC A
MOV NOISE,A
SETB C
MOV A,TEST_HEAD ;SIGNAL<NOISE
RLC A
MOV TEST_HEAD,A
SJMP FRE12
FRE10: CLR C
SUBB A,#60
JC FRE11
CLR C ;SIGNAL>=NOISE+30
MOV A,TEST_HEAD
RLC A
MOV TEST_HEAD,A
SJMP FRE12
FRE11: CLR C
MOV A, NOISE
ADDC A,COUNT_ZERO
RRC A
MOV NOISE,A
SETB C
MOV A,TEST_HEAD ; NOISE< SIGNAL<NOISE+30
RLC A
MOV TEST_HEAD,A
FRE12: INC RECE_TIME
MOV A,TEST_HEAD
CJNE A,#00001100B,FRE12X1
SJMP FRE13X6
FRE12X1: CJNE A,#00101100B,FRE12X2
SJMP FRE12X3
FRE12X2: CJNE A,#10101100B,FRE13
FRE12X3: SETB F_DATA
MOV RECE_TIME,#01H
MOV RECE_LOW1,#00H
MOV RECE_LOW2,#00H
MOV RECE_LOW3,#00H
MOV RECE_LOW4,#00H
MOV CHANNEL_IDLE_COUNT,#00H
LJMP THROLD_STOP
FRE13: MOV A,TEST_HEAD
ANL A,#00000111B
CJNE A,#00H,FRE13X1
SJMP FRE13X6
FRE13X1: CJNE A,#01H,FRE13X2
SJMP FRE13X6
FRE13X2: CJNE A,#02H,FRE13X3
SJMP FRE13X
FRE13X3: CJNE A,#03H,FRE13X4
SJMP FRE13X
FRE13X4: CJNE A,#04H,FRE13X5
SJMP FRE13X6
FRE13X5: CJNE A,#07H,FRE13X
FRE13X6: CLR F_STOP_LINE
CLR F_DATA
CLR F_SAMPLE_ONE
CLR F_SAMPLE_TWO
MOV RECE_TIME,#00H
LJMP THROLD_VARY
FRE13X:
MOV A,RECE_TIME
XRL A,#16
JNZ FRE14
CLR F_STOP_LINE
CLR F_DATA
CLR F_SAMPLE_ONE
CLR F_SAMPLE_TWO
MOV RECE_TIME,#00H
LJMP THROLD_VARY
FRE14: MOV CHANNEL_IDLE_COUNT,#00H
LJMP THROLD_STOP
;////////////////////////////////////////////////////////////
; RECEIVE DATA
;////////////////////////////////////////////////////////////
FRE15: MOV CHANNEL_IDLE_COUNT,#00H
CLR C
MOV A,COUNT_ZERO
SUBB A,NOISE
JNC FRE16
CLR C
MOV A, NOISE
ADDC A,COUNT_ZERO
RRC A
MOV NOISE,A
SETB C ;SIGNAL<NOISE
SJMP FRE18
FRE16: CLR C
SUBB A,#60
JC FRE17
CLR C ;SIGNAL>=NOISE+30
SJMP FRE18
FRE17: CLR C
MOV A, NOISE
ADDC A,COUNT_ZERO
RRC A
MOV NOISE,A
SETB C ; NOISE< SIGNAL<NOISE+30
FRE18: MOV A,RECE_LOW4
RLC A
MOV RECE_LOW4,A
MOV A,RECE_LOW3
RLC A
MOV RECE_LOW3,A
MOV A,RECE_LOW2
RLC A
MOV RECE_LOW2,A
MOV A,RECE_LOW1
RLC A
MOV RECE_LOW1,A
MOV A,RECE_TIME
INC A
MOV RECE_TIME,A
XRL A,#32
JZ FRE19
LJMP THROLD_STOP
FRE19: CLR F_DATA
CLR F_STOP_LINE
; CLR F_SAMPLE_ONE
; CLR F_SAMPLE_TWO
MOV RECE_TIME,#00H
MOV A,RECE_LOW1
CPL A
MOV RECE_LOW1,A
MOV A,RECE_LOW2
CPL A
MOV RECE_LOW2,A
MOV A,RECE_LOW3
CPL A
MOV RECE_LOW3,A
MOV A,RECE_LOW4
CPL A
MOV RECE_LOW4,A
MOV A,RECE_LOW1
XRL A,RECE_LOW2
XRL A,RECE_LOW3
XRL A,RECE_LOW4
ANL A,#01100000B
JNZ THROLD_VARY
MOV A,RECE_LOW1
JNB ACC.7,THROLD_VARY
MOV A,RECE_LOW3
ANL A,#0FH
XRL A,ID_HIGH
JNZ THROLD_VARY
MOV A,RECE_LOW4
XRL A,ID_LOW
JNZ THROLD_VARY
SETB RECE_BORD_FLAG
THROLD_VARY: MOV C,F_SAMPLE_ONE
ANL C,F_SAMPLE_TWO
JC VARY0
LJMP VARY5
VARY0: CLR F_SAMPLE_ONE
CLR F_SAMPLE_TWO
JNB F_RISE,VARY1
CLR F_RISE
SETB CD4051_A
SETB CD4051_B
SETB CD4051_C
MOV THROLD,#07H
CLR F_HEAD
LJMP VARY5
VARY1: JNB F_FALL,VARY2
CLR F_FALL
MOV A,THROLD
CLR C
SUBB A,#03H
JC VARY2
MOV A,THROLD
DEC A
DEC A
MOV THROLD,A
MOV A,THROLD
MOV C,ACC.0
MOV CD4051_A,C
MOV C,ACC.1
MOV CD4051_B,C
MOV C,ACC.2
MOV CD4051_C,C
LJMP VARY5
VARY2: MOV A,THROLD
DEC A
MOV THROLD,A
JZ VARY3
LJMP VARY4
VARY3: MOV THROLD,#08H
CLR CD4051_A
CLR CD4051_B
CLR CD4051_C
CLR F_HEAD
LJMP VARY5
VARY4: MOV A,THROLD
MOV C,ACC.0
MOV CD4051_A,C
MOV C,ACC.1
MOV CD4051_B,C
MOV C,ACC.2
MOV CD4051_C,C
VARY5: MOV A,CHANNEL_IDLE_COUNT
INC A
MOV CHANNEL_IDLE_COUNT,A
CLR C
SUBB A,#10
JC FRE_QUIT
CLR F_CHANNEL_OCCUPY
THROLD_STOP: NOP
FRE_QUIT: NOP
RET
SEND_FRE: MOV CHANNEL_IDLE_COUNT,#00H
MOV A,EMIT_COUNT
CLR C
SUBB A,#12
JNC SEND1
MOV A,EMIT_COUNT
INC A
MOV EMIT_COUNT,A
JB ACC.0,SEND0
ACALL DELAY1
ACALL DELAY1
ACALL DELAY1
ACALL DELAY1
LJMP DELAY
SEND0: ACALL SENDBIT1
LJMP DELAY
SEND1: JNB F_SEND_ZERO1,SEND2
ACALL DELAY1
ACALL DELAY1
ACALL DELAY1
ACALL DELAY1
CLR F_SEND_ZERO1
LJMP DELAY
SEND2: JNB F_SEND_HIGH,SEND_DATA
ACALL SENDBIT1
CLR F_SEND_HIGH
LJMP DELAY
SEND_DATA: MOV A,SEND_LOW4
RLC A
MOV SEND_LOW4,A
MOV A,SEND_LOW3
RLC A
MOV SEND_LOW3,A
MOV A,SEND_LOW2
RLC A
MOV SEND_LOW2,A
MOV A,SEND_LOW1
RLC A
MOV SEND_LOW1,A
JC SEND3
ACALL DELAY1
ACALL DELAY1
ACALL DELAY1
ACALL DELAY1
SJMP SEND4
SEND3: ACALL SENDBIT1
SEND4: DJNZ EMIT_TIMES,DELAY
CLR F_SEND_RUNNING
DELAY:
ACALL DELAY1
ACALL DELAY1
RET
DELAY1: MOV R7,#0FFH
DEL1: DJNZ R7,DEL1
RET
DELAY200US: MOV R7,#90
DEL2: DJNZ R7,DEL2
RET
;SENDBIT1: MOV R7,#210
;SENDBIT92: MOV P1,#01000000B
; NOP
; NOP
; NOP
; MOV P1,#10000000B
; NOP
; DJNZ R7,SENDBIT92
; MOV P1,#00H
; RET
SENDBIT1: MOV R7,#210
SENDBIT92: MOV P0,#00010000B
NOP
NOP
NOP
MOV P0,#00100000B
NOP
DJNZ R7,SENDBIT92
MOV P0,#00H
RET
EVENT_JUDGE: MOV C,F_SEND_RUNNING
ORL C,F_CHANNEL_OCCUPY
ORL C,F_STOP_LINE
ORL C,F_DATA
JC EVENT_QUIT
MOV A,CHANNEL_IDLE_COUNT
ANL A,#00111111B
XRL A,MAC
JNZ EVENT_QUIT
SETB F_SEND_ENABLE
EVENT_QUIT: RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -