⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.asm

📁 红外线学习控制及低压AC220V电力线载波组网通讯
💻 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 + -