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

📄 yk.asm

📁 汇编写的遥控接收处理程序
💻 ASM
字号:
;;  yk.asm
;;;;;;;;;;;;;;;;;;;;;;
;;      YK.ASM      ;;
;;;;;;;;;;;;;;;;;;;;;;
PROC    YKINT,READYK,YK
YKINT:
        NOP
       	PUSH  PSW
	PUSH  ACC
        PUSH  B
	PUSH  01H
        CPL   LED_RUN
        CLR   TR0         ;读出脉宽,判是0 是1,还是开始
        MOV   A,TL0
        MOV   B,TH0      ;BA
        MOV   R1,TIMER_CAL1
        SETB  TR0
        PUSH  A
        PUSH  B
        CLR   C
        SUBB  A,YK_PWL
        XCH   A,B
        SUBB  A,YK_PWH   ;AB
        POP   YK_PWH
        POP   YK_PWL
        CLR   F0
        JNC   YKINT_1
        XCH   A,B
        CLR   C          ;BA
        SUBB  A,#TL0_SET
        XCH   A,B
        SUBB  A,#TH0_SET  ;AB
        SETB  F0
YKINT_1 :
        PUSH  A
        PUSH  B
        MOV   C,F0
        MOV   A,R1
        SUBB  A,YKTIMER       ;YK_PW=YK_TIMER*1599(1MS)+YK_PW()
        MOV   YKTIMER ,R1     ;YK_CAL*1583H
        CJNE  A,#00H,YKINT_1A
        MOV   R1,#00H
        MOV   B,#00H
        SJMP  YKINT_1D
YKINT_1A:
        CJNE  A,#01H,YKINT_1B  ;
        MOV   R1,#15H
        MOV   B,#83H
        SJMP  YKINT_1D
YKINT_1B:
        CJNE  A,#02H,YKINT_1C  ;1583H*2=2B06H
        MOV   R1,#2BH
        MOV   B,#06H
        SJMP  YKINT_1D
YKINT_1C:
        POP   A
        POP   A
        LJMP  YKINT_6
YKINT_1D:
        POP   A
        ADD   A,B
        MOV   B,A
        POP   A
        ADDC  A,R1
        MOV   R1,A

        CLR   C
	MOV   A,B          ;和0的下限比较
	SUBB  A,#D0IL
	MOV   A,R1
	SUBB  A,#D0IH
	JC    YKINT_2
	MOV   A,B          ;和0的上限比较
	SUBB  A,#D0AL
	MOV   A,R1
	SUBB  A,#D0AH
	JNC   YKINT_3
	CLR   C
	SJMP  YKINT_4
YKINT_2:
        SJMP  YKINT_6
YKINT_3:
        CLR   C
	MOV   A,B          ;和1的下限比较
	SUBB  A,#D1IL
	MOV   A,R1
	SUBB  A,#D1IH
	JC    YKINT_2
	MOV   A,B          ;和1的上限比较
	SUBB  A,#D1AL
	MOV   A,R1
	SUBB  A,#D1AH
	JNC   YKINT_2
	SETB  C
YKINT_4:
        MOV   A,YK_IN1      ;判是否有输入
	RLC   A
	MOV   YK_IN1,A
	MOV   A,YK_IN2
	RLC   A
	MOV   YK_IN2,A
        XRL   A,#0EEH       ;;#0EEH是系统码
        JNZ   YKINT_7
YKINT_5:
        MOV   YK_IN,YK_IN1  ;;功能码保存
        SETB  YK_RD         ;置读标志
        SETB  YK_RS
        MOV   YK_DELAY,#3CH
YKINT_6:
	MOV   YK_IN1,#00H   ;非0非1或开始清零
	MOV   YK_IN2,#00H
YKINT_7:
 	POP   01H
        POP   B
	POP   ACC
	POP   PSW
	RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

READYK:               ;  读遥控器值,转化为相应的标志
        NOP
        JB    YK_RS,READ_YK1
        MOV   YK_LAST,#00H
        MOV   YK_VALUE,#00H
        SJMP  READ_YK_END
READ_YK1:
        JBC   YK_RD,READ_YK11
        SJMP  READ_YK_END
READ_YK11:
        MOV   A,YK_IN
        XRL   A,YK_LAST
        MOV   YK_LAST,YK_IN
        JZ    READ_YK2
        SETB  YK_RD1
        SETB  YK_RD2
        LCALL YKTAB
        MOV   YKRD_CAL,#18H

        MOV   A,TIMER_CAL3
        ADD   A,#MAIN_20S
        MOV   MAIN_DELAY,A
        SJMP  READ_YK_END
READ_YK2:
        CLR   YK_RD1
        CLR   YK_RD2
        DEC   YKRD_CAL
        MOV   A,YKRD_CAL
        JNZ   READ_YK_END
        MOV   YKRD_CAL,#03H
        SETB  YK_RD2
        MOV   A,TIMER_CAL3
        ADD   A,#MAIN_20S
        MOV   MAIN_DELAY,A
READ_YK_END:
        RET
;;..................................;;
YKTAB:
        NOP              ;  遥控代码转化为号码
        MOV   R0,#00H
YKTAB_LP:
        MOV   A,R0
        MOV   DPTR,#YKCODE_TAB
        MOVC  A,@A+DPTR
        XRL   A,YK_IN
        JZ    YKTAB2
        INC   R0
        CJNE  R0,#08H,YKTAB1
YKTAB1:
        JC    YKTAB_LP
        MOV   YK_VALUE,#00H
        SJMP  YKTAB_END
YKTAB2:
        MOV   A,R0
        ANL   A,#07H
        ANL   YK_VALUE,#0F0H
        ORL   YK_VALUE,A
YKTAB_END:
        RET
YKCODE_TAB:
         DB    0E0H,0F0H, 40H, 50H, 0A0H, 60H, 20H, 00H, 00H
         ;     00    01    02    03   04   05   06
         ;    功能+ 功能- 参数+ 参数-电力 密码 确认
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
YK:
        NOP
        MOV   A,SYS_STATE
        CJNE  A,#0BH,YK_STATE_ERROR
YK_STATE_ERROR:
        JC    YK_STATE_RIGHT
        MOV   YK_VALUE,#00H
        MOV   SYS_STATE,#00H
        LJMP  YK_END
YK_STATE_RIGHT:
        MOV   B,#03H
        MUL   AB
        MOV   DPTR,#YK_MENU_TAB
        JMP   @A+DPTR
YK_MENU_TAB:
        LJMP  YK_MENU0    ;自动显示
        LJMP  YK_MENU1    ;手动显示
        LJMP  YK_MENU2    ;密码输入
        LJMP  YK_MENU3    ;设置显示
        LJMP  YK_MENU4    ;设置波特率
        LJMP  YK_MENU5    ;设置地址
        LJMP  YK_MENU6    ;设置电压
        LJMP  YK_MENU7    ;设置电流
        LJMP  YK_MENU8    ;复位
        LJMP  YK_MENU9    ;保存设置退出
        LJMP  YK_MENU10   ;不保存退出
        LJMP  YK_END
YK_END:
        CLR   YK_RD1
        CLR   YK_RD2
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;自动显示
YK_MENU0:
        NOP
        JNB   YK_RD1,YK_MENU0_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU0_1

        SJMP  YK_MENU0_END
YK_MENU0_1:
        CJNE  A,#01H,YK_MENU0_2

        SJMP  YK_MENU0_END
YK_MENU0_2:
        CJNE  A,#02H,YK_MENU0_3
        MOV   SHOWLP,#0FFH
        SETB  SHOW_F
        MOV   SYS_STATE,#01H
        SJMP  YK_MENU0_END
YK_MENU0_3:
        CJNE  A,#03H,YK_MENU0_4
        MOV   SHOWLP,#0FFH
        SETB  SHOW_F
        MOV   SYS_STATE,#01H
        SJMP  YK_MENU0_END
YK_MENU0_4:
        CJNE  A,#04H,YK_MENU0_END
        MOV   SYS_STATE,#02H
        MOV   R0,#SLAVE_TEMP
        MOV   @R0,#00H
        SJMP  YK_MENU0_END
YK_MENU0_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;手动显示
YK_MENU1:
        NOP
        JNB   YK_RD2, YK_MENU1_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU1_1
        MOV   SHOWLP,#0FFH
        SETB  SHOW_F
        MOV   SYS_STATE,#00H
        SJMP  YK_MENU1_END
YK_MENU1_1:
        CJNE  A,#01H,YK_MENU1_2
        MOV   SHOWLP,#0FFH
        SETB  SHOW_F
        MOV   SYS_STATE,#00H
        SJMP  YK_MENU1_END
YK_MENU1_2:
        CJNE  A,#02H,YK_MENU1_3
        JNB   YK_RD1,YK_MENU1_END
        INC   SHOWLP
        ANL   SHOWLP,#07H
        SETB  SHOW_F
        SJMP  YK_MENU1_END
YK_MENU1_3:
        CJNE  A,#03H,YK_MENU1_END
        JNB   YK_RD1,YK_MENU1_END
        DEC   SHOWLP
        ANL   SHOWLP,#07H
        SETB  SHOW_F
        ;SJMP  YK_MENU1_END
YK_MENU1_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;密码输入
YK_MENU2:
        NOP
        JNB   YK_RD2, YK_MENU2_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#05H,YK_MENU2_1
        MOV   R0,#SLAVE_TEMP
        LCALL INCSLAVE
        SJMP  YK_MENU2_END
YK_MENU2_1:
        CJNE  A,#06H,YK_MENU2_1_1
        MOV   R0,#SLAVE_TEMP
        MOV   A,@R0
        XRL   A,SLAVE
        JNZ   YK_MENU2_1_1
        MOV   R0,#SHOWMD_TEMP
        MOV   R5,#SHOWMDH_AD
        MOV   R4,#SHOWMDL_AD
        MOV   R2,#08H
        LCALL AREAD
        MOV   SYS_STATE,#03H
        SJMP  YK_MENU2_END
YK_MENU2_1_1:
        MOV   SYS_STATE,#00H
        ;SJMP  YK_MENU2_END
YK_MENU2_END:
        LJMP  YK_END

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置显示
YK_MENU3:
        NOP
        JNB   YK_RD2, YK_MENU3_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU3_1
        JNB   YK_RD1,YK_MENU3_END
        MOV   SYS_STATE,#04H
        SJMP  YK_MENU1_END
YK_MENU3_1:
        CJNE  A,#01H,YK_MENU3_2
        JNB   YK_RD1,YK_MENU3_END
        MOV   SYS_STATE,#0AH
        SJMP  YK_MENU3_END
YK_MENU3_2:
        CJNE  A,#02H,YK_MENU3_3
        MOV   R0,#SHOWMD_TEMP
        LCALL INCSHOWMD
        SJMP  YK_MENU3_END
YK_MENU3_3:
        CJNE  A,#03H,YK_MENU3_END
        MOV   R0,#SHOWMD_TEMP
        LCALL DECSHOWMD
        ;SJMP  YK_MENU3_END
YK_MENU3_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置波特率
YK_MENU4:
        NOP
        JNB   YK_RD2,YK_MENU4_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU4_1
        JNB   YK_RD1,YK_MENU4_END
        MOV   SYS_STATE,#05H
        SJMP  YK_MENU4_END
YK_MENU4_1:
        CJNE  A,#01H,YK_MENU4_2
        JNB   YK_RD1,YK_MENU4_END
        MOV   SYS_STATE,#03H
        SJMP  YK_MENU4_END
YK_MENU4_2:
        CJNE  A,#02H,YK_MENU4_3
        MOV   R0,#BRATE_TEMP
        LCALL INCBRATE
        SJMP  YK_MENU4_END
YK_MENU4_3:
        CJNE  A,#03H,YK_MENU4_END
        MOV   R0,#BRATE_TEMP
        LCALL DECBRATE
        ;SJMP  YK_MENU4_END
YK_MENU4_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置地址
YK_MENU5:
        NOP
        JNB   YK_RD2,YK_MENU5_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU5_1
        JNB   YK_RD1,YK_MENU5_END
        MOV   SYS_STATE,#06H
        SJMP  YK_MENU5_END
YK_MENU5_1:
        CJNE  A,#01H,YK_MENU5_2
        JNB   YK_RD1,YK_MENU5_END
        MOV   SYS_STATE,#04H
        SJMP  YK_MENU5_END
YK_MENU5_2:
        CJNE  A,#02H,YK_MENU5_3
        MOV   R0,#SLAVE_TEMP
        LCALL INCSLAVE
        SJMP  YK_MENU5_END
YK_MENU5_3:
        CJNE  A,#03H,YK_MENU5_END
        MOV   R0,#SLAVE_TEMP
        LCALL DECSLAVE
        ;SJMP  YK_MENU5_END
YK_MENU5_END:
        LJMP  YK_END

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置电压
YK_MENU6:
        NOP
        JNB   YK_RD2,YK_MENU6_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU6_1
        JNB   YK_RD1,YK_MENU6_END
        MOV   SYS_STATE,#07H
        SJMP  YK_MENU6_END
YK_MENU6_1:
        CJNE  A,#01H,YK_MENU6_2
        JNB   YK_RD1,YK_MENU6_END
        MOV   SYS_STATE,#05H
        SJMP  YK_MENU6_END
YK_MENU6_2:
        CJNE  A,#02H,YK_MENU6_3
        MOV   A,#01H
        JB    YK_RD1,YK_MENU6_2_1
        MOV   A,#0AH
YK_MENU6_2_1:
        MOV   R0,#KU1L_TEMP
        LCALL INCKU
        SJMP  YK_MENU6_END
YK_MENU6_3:
        CJNE  A,#03H,YK_MENU6_END
        MOV   A,#01H
        JB    YK_RD1,YK_MENU6_3_1
        MOV   A,#0AH
YK_MENU6_3_1:
        MOV   R0,#KU1L_TEMP
        LCALL DECKU
        ;SJMP  YK_MENU6_END
YK_MENU6_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置电流
YK_MENU7:
        NOP
        JNB   YK_RD2,YK_MENU7_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU7_1
        JNB   YK_RD1,YK_MENU7_END
        MOV   SYS_STATE,#08H
        SJMP  YK_MENU6_END
YK_MENU7_1:
        CJNE  A,#01H,YK_MENU7_2
        JNB   YK_RD1,YK_MENU7_END
        MOV   SYS_STATE,#06H
        SJMP  YK_MENU7_END
YK_MENU7_2:
        CJNE  A,#02H,YK_MENU7_3
        MOV   A,#01H
        JB    YK_RD1,YK_MENU7_2_1
        MOV   A,#0AH
YK_MENU7_2_1:
        MOV   R0,#KI1L_TEMP
        LCALL INCKI
        SJMP  YK_MENU7_END
YK_MENU7_3:
        CJNE  A,#03H,YK_MENU7_END
        MOV   A,#01H
        JB    YK_RD1,YK_MENU7_3_1
        MOV   A,#0AH
YK_MENU7_3_1:
        MOV   R0,#KI1L_TEMP
        LCALL DECKI
        ;SJMP  YK_MENU7_END
YK_MENU7_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;复位
YK_MENU8:
        NOP
        JNB   YK_RD2,YK_MENU8_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU8_1
        JNB   YK_RD1,YK_MENU8_END
        MOV   SYS_STATE,#09H
        SJMP  YK_MENU8_END
YK_MENU8_1:
        CJNE  A,#01H,YK_MENU8_2
        JNB   YK_RD1,YK_MENU8_END
        MOV   SYS_STATE,#07H

        SJMP  YK_MENU8_END
YK_MENU8_2:
        CJNE  A,#02H,YK_MENU8_3
        CLR   EA
        SJMP  $
        SJMP  YK_MENU8_END
YK_MENU8_3:
        CJNE  A,#03H,YK_MENU8_END
        ;SJMP  YK_MENU8_END
YK_MENU8_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;保存设置
YK_MENU9:
        NOP
        JNB   YK_RD1,YK_MENU9_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU9_1
        MOV   SYS_STATE,#0AH
        SJMP  YK_MENU9_END
YK_MENU9_1:
        CJNE  A,#01H,YK_MENU9_2
        MOV   SYS_STATE,#08H
        SJMP  YK_MENU9_END
YK_MENU9_2:
        CJNE  A,#02H,YK_MENU9_3
        MOV   R0,#SHOWMD_TEMP
        MOV   R5,#SHOWMDH_AD
        MOV   R4,#SHOWMDL_AD
        MOV   R2,#08H
        LCALL AWRITE
        NOP
        LCALL READ_EE
        MOV   SYS_STATE,#00H
        SJMP  YK_MENU9_END
YK_MENU9_3:
        CJNE  A,#03H,YK_MENU9_END

        ;SJMP  YK_MENU9_END
YK_MENU9_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;退出菜单
YK_MENU10:
        NOP
        JNB   YK_RD1,YK_MENU10_END
        MOV   A,YK_VALUE
        ANL   A,#07H
        CJNE  A,#00H,YK_MENU10_1
        MOV   SYS_STATE,#03H
        SJMP  YK_MENU10_END
YK_MENU10_1:
        CJNE  A,#01H,YK_MENU10_2
        MOV   SYS_STATE,#09H

        SJMP  YK_MENU10_END
YK_MENU10_2:
        CJNE  A,#02H,YK_MENU10_3
        MOV   SYS_STATE,#00H
        SJMP  YK_MENU9_END
YK_MENU10_3:
        CJNE  A,#03H,YK_MENU10_END

        ;SJMP  YK_MENU9_END
YK_MENU10_END:
        LJMP  YK_END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -