📄 eg1920.asm
字号:
MOV RegC, #sTemp&X
SETB ACC.7
MOV @RegC, A ; 置串X有效
IF X = 1
JNB bReSend, GetCmdStrLen_2&X
ReSend
GetCmdStrLen_2&X:
ELSEIF X = 2
JB p485Rx, GetCmdStrLen_2&X
DEC A
MOV @RegC, A
DEC CmdStrLen2
GetCmdStrLen_2&X:
ENDIF
JNB bProErr&X, GetCmdStrLen_9&X
; if 刚才内置协议解析错误
CustPro X ; 尝试解析自定义协议
GetCmdStrLen_3&X:
LJMP GetCmdStrLen_9&X
GetCmdStrLen_4&X: ; else
MOV RegC, #sTemp3
SETB ACC.7
SETB ACC.6
MOV @RegC, A ; 置串3有效
GetCmdStrLen_9&X:
ENDM
;----------------------------------------------- 继电器驱动
RelayDrv MACRO
MOV A, DelaySwitch
JZ RelayDrv_1
MOV A, DelayCamera
JZ RelayDrv_1
MOV A, CmdRun
JB ACC.7, RelayDrv_2
RelayDrv_0:
LJMP RelayDrv_9
RelayDrv_1:
LJMP RelayDrv_8
RelayDrv_2:
JNB b485In, RelayDrv_4
; if 是485口收到了有效指令
; CLR bReSend ; 关闭转发
RelayDrv_4:
MOV A, CmdRun
ANL A, #01FH
MOV CmdRun, A
XRL A, CmdState
ANL A, #01FH
JNZ RelayDrv_7
MOV A, CmdRun
XRL A, #cFree
JZ RelayDrv_3
MOV A, VarDelaySw
CJNE A, #cDelaySw2, RelayDrv_3
MOV VarDelaySw, #cDelaySw0
MOV VarDelayCam, #cDelayCam0
SJMP RelayDrv_3
RelayDrv_7: ; if 状态有变化
MOV A, CmdRun
CJNE A, #cFree, RelayDrv_6
SJMP RelayDrv_3
RelayDrv_6:
MOV A, CmdRun
CJNE A, #cAdd1On, $+3
JNC RelayDrv_3
MOV A, CmdState
CJNE A, #cFree, RelayDrv_0
SETB pUp
SETB pDown
SETB pLeft
SETB pRight
SETB pAuto
SETB pZoom
SETB pFocus
SETB pIris
SETB pCamera
MOV DelaySwitch, #0FFH
MOV DelayCamera, #0FFH
RelayDrv_3:
MOV A, CmdRun
MOV CmdState, A
RL A
ADD A, CmdRun
MOV DPTR, #RelayDrv_5
JMP @A+DPTR
RelayDrv_5:
LJMP RelayDrv_00
LJMP RelayDrv_10
LJMP RelayDrv_20
LJMP RelayDrv_30
LJMP RelayDrv_40
LJMP RelayDrv_50
LJMP RelayDrv_60
LJMP RelayDrv_70
LJMP RelayDrv_80
LJMP RelayDrv_90
LJMP RelayDrv_A0
LJMP RelayDrv_B0
LJMP RelayDrv_C0
LJMP RelayDrv_D0
LJMP RelayDrv_E0
LJMP RelayDrv_F0
LJMP RelayDrv_G0
LJMP RelayDrv_H0
LJMP RelayDrv_J0
LJMP RelayDrv_K0
RelayDrv_00: ; 释放
LJMP RelayDrv_8
RelayDrv_10: ; 聚焦
SETB pCamera
CLR pFocus
MOV DelayCamera, VarDelayCam
LJMP RelayDrv_9
RelayDrv_20: ; 聚焦
CLR pCamera
CLR pFocus
MOV DelayCamera, VarDelayCam
LJMP RelayDrv_9
RelayDrv_30: ; 光圈大
SETB pCamera
CLR pIris
MOV DelayCamera, VarDelayCam
LJMP RelayDrv_9
RelayDrv_40: ; 光圈小
CLR pCamera
CLR pIris
MOV DelayCamera, VarDelayCam
LJMP RelayDrv_9
RelayDrv_50: ; 调焦宽
SETB pCamera
CLR pZoom
MOV DelayCamera, VarDelayCam
LJMP RelayDrv_9
RelayDrv_60: ; 调焦窄
CLR pCamera
CLR pZoom
MOV DelayCamera, VarDelayCam
LJMP RelayDrv_9
RelayDrv_70: ; 上
CLR pUp
MOV DelaySwitch, VarDelaySw
LJMP RelayDrv_9
RelayDrv_80: ; 下
CLR pDown
MOV DelaySwitch, VarDelaySw
LJMP RelayDrv_9
RelayDrv_90: ; 左
CLR pLeft
MOV DelaySwitch, VarDelaySw
LJMP RelayDrv_9
RelayDrv_A0: ; 右
CLR pRight
MOV DelaySwitch, VarDelaySw
LJMP RelayDrv_9
RelayDrv_B0: ; 辅助1开
CLR pAdd1
LJMP RelayDrv_9
RelayDrv_C0: ; 辅助1关
SETB pAdd1
LJMP RelayDrv_9
RelayDrv_D0: ; 辅助2开
CLR pAdd2
LJMP RelayDrv_9
RelayDrv_E0: ; 辅助2关
SETB pAdd2
LJMP RelayDrv_9
RelayDrv_F0: ; 左上
CLR pUp
CLR pLeft
MOV DelaySwitch, VarDelaySw
LJMP RelayDrv_9
RelayDrv_G0: ; 左下
CLR pDown
CLR pLeft
MOV DelaySwitch, VarDelaySw
LJMP RelayDrv_9
RelayDrv_H0: ; 右上
CLR pUp
CLR pRight
MOV DelaySwitch, VarDelaySw
LJMP RelayDrv_9
RelayDrv_J0: ; 右下
CLR pDown
CLR pRight
MOV DelaySwitch, VarDelaySw
LJMP RelayDrv_9
RelayDrv_K0: ; 自动
CLR pAuto
LJMP RelayDrv_9
RelayDrv_8:
SETB pUp
SETB pDown
SETB pLeft
SETB pRight
SETB pAuto
SETB pZoom
SETB pFocus
SETB pIris
SETB pCamera
MOV DelaySwitch, #0FFH
MOV DelayCamera, #0FFH
MOV CmdState, #cFree
RelayDrv_9:
ENDM
;----------------------------------------------- 拨动开关
SwOpt MACRO
MOV A, TestDelay
JNZ SwOpt_0
LJMP Init
SwOpt_0:
MOV A, SwState
JNB ACC.7, SwOpt_B
JNB pButton, SwOpt_A
; if button 松开
CLR ACC.7
MOV SwState, A
SwOpt_B:
LJMP SwOpt_7
SwOpt_1: ; 状态切换
MOV ButDelay, #0FFH
MOV VarDelaySw, #cDelaySw0
MOV VarDelayCam, #cDelayCam0
MOV A, P1
CPL A
JNZ SwOpt_2
; if 拨动开关全0
MOV SwState, #cSwManual+80H ; 进入测试状态
MOV DelayLed1, #00H
MOV DelayLed2, #00H
MOV LedCmd1, #cLedBreak
MOV LedCmd2, #cLedBreak ; 两指示灯同步闪烁
MOV TestDelay, #cTestManual
LJMP SwOpt_9
SwOpt_2: ; else if 拨动开关=11000011
CJNE A, #11000011B, SwOpt_3
MOV SwState, #cSwDefine+80H ; 进入学习状态
SETB bDefine
MOV StrCount1, #00H
MOV StrCount2, #00H
MOV CustomLen, #00H
MOV LedCmd2, #cLedOn
MOV TestDelay, #cTestDefine
LJMP SwOpt_9
SwOpt_3: ; else if 拨动开关=11001111
CJNE A, #11001111B, SwOpt_4
MOV SwState, #cSwAuto+80H ; 进入解码器自检状态
MOV TestPtr, #00H
MOV TestDelay, #cTestAuto
MOV DelayLed1, #00H
MOV DelayLed2, #00H
MOV LedCmd1, #cLedFlash
MOV LedCmd2, #cLedFlash ; 两指示灯同步闪烁
SwOpt_A:
LJMP SwOpt_9
SwOpt_4: ; else if 拨动开关=11001100
CJNE A, #11001100B, SwOpt_C
MOV SwState, #cSwInit+80H ; 恢复出厂状态
MOV RegC, #00000101B
MOV A, #eBitSet
MOV RegH, #01H
CLR bSame
CLR bXHi8
LCALL XrWrite
MOV RegC, #0FFH
MOV A, #00H
MOV RegH, #01H
CLR bSame
SETB bXHi8
LCALL XrWrite
LJMP SwOpt_S
SwOpt_C: ; else if 拨动开关=11110001
CJNE A, #11110001B, SwOpt_D
MOV SwState, #cSwInit+80H ; 恢复出厂状态(置 bReSend)
MOV RegC, BitSet
ORL R_C, #00000100B
MOV A, #eBitSet
MOV RegH, #01H
CLR bSame
CLR bXHi8
LCALL XrWrite
LJMP SwOpt_S
SwOpt_D: ; else if 拨动开关=11100001
CJNE A, #11100001B, SwOpt_E
MOV SwState, #cSwInit+80H ; 恢复出厂状态(清 bReSend)
MOV RegC, BitSet
ANL R_C, #11111011B
MOV A, #eBitSet
MOV RegH, #01H
CLR bSame
CLR bXHi8
LCALL XrWrite
LJMP SwOpt_S
SwOpt_E: ; else if 拨动开关=11110010
CJNE A, #11110010B, SwOpt_5
MOV SwState, #cSwInit+80H ; 恢复出厂状态(清协议)
MOV RegC, #0FFH
MOV A, #00H
MOV RegH, #01H
CLR bSame
SETB bXHi8
LCALL XrWrite
SwOpt_S:
MOV TestDelay, #cTestInit
MOV DelayLed1, #00H
MOV DelayLed2, #00H
MOV LedCmd1, #cLedBlink
MOV LedCmd2, #cLedBlink ; 两指示灯同步闪烁
LJMP SwOpt_9
SwOpt_5:
MOV SwState, #cSwNormal
LJMP SwOpt_9
SwOpt_7:
JNB pButton, SwOpt_6
MOV ButDelay, #0FFH
SwOpt_6:
MOV A, SwState
ANL A, #07H
RL A
ADD A, SwState
MOV DPTR, #SwOpt_8
JMP @A+DPTR
SwOpt_8:
LJMP SwOpt_10 ; 上电状态
LJMP SwOpt_20 ; 手动测试状态
LJMP SwOpt_30 ; 学习状态
LJMP SwOpt_40 ; 自动测试状态
LJMP SwOpt_50 ; 恢复出厂状态
LJMP SwOpt_60 ; 正常工作状态
LJMP SwOpt_70
LJMP SwOpt_80
SwOpt_10:
JNB pButton, SwOpt_12
MOV SwState, #cSwNormal
MOV ButDelay, #0FFH
SJMP SwOpt_19
SwOpt_12: ; if button 按下
MOV A, ButDelay
JNZ SwOpt_13
LJMP SwOpt_1
SwOpt_13:
MOV A, ButDelay
CPL A
JNZ SwOpt_19
MOV ButDelay, #cButDelay0
SwOpt_19:
LJMP SwOpt_9
SwOpt_20: ; 手动测试状态
JNB pButton, SwOpt_2B
MOV CmdRun, #cFree+80H
JB bLastButton, SwOpt_2A
CPL bButState
SwOpt_2A:
LJMP SwOpt_29
SwOpt_2B:
MOV A, P1
JB ACC.7, SwOpt_21
MOV CmdRun, #cUp+80H
JB bButState, SwOpt_28
MOV CmdRun, #cDown+80H
SJMP SwOpt_28
SwOpt_21:
JB ACC.6, SwOpt_22
MOV CmdRun, #cLeft+80H
JB bButState, SwOpt_28
MOV CmdRun, #cRight+80H
SJMP SwOpt_28
SwOpt_22:
JB ACC.3, SwOpt_23
MOV CmdRun, #cIrisOpen+80H
JB bButState, SwOpt_28
MOV CmdRun, #cIrisClose+80H
SJMP SwOpt_28
SwOpt_23:
JB ACC.4, SwOpt_24
MOV CmdRun, #cFocusNear+80H
JB bButState, SwOpt_28
MOV CmdRun, #cFocusFar+80H
SJMP SwOpt_28
SwOpt_24:
JB ACC.5, SwOpt_25
MOV CmdRun, #cZoomWide+80H
JB bButState, SwOpt_28
MOV CmdRun, #cZoomTele+80H
SJMP SwOpt_28
SwOpt_25:
JB ACC.2, SwOpt_26
MOV CmdRun, #cAdd1On+80H
JB bButState, SwOpt_28
MOV CmdRun, #cAdd1Off+80H
SJMP SwOpt_28
SwOpt_26:
JB ACC.1, SwOpt_27
MOV CmdRun, #cAdd2On+80H
JB bButState, SwOpt_28
MOV CmdRun, #cAdd2Off+80H
SJMP SwOpt_28
SwOpt_27:
JB ACC.0, SwOpt_29
MOV CmdRun, #cAuto+80H
; JB bButState, SwOpt_28
; MOV CmdRun, #cFree+80H
SwOpt_28:
MOV TestDelay, #cTestManual
SwOpt_29:
MOV C, pButton
MOV bLastButton, C
MOV A, P1
CPL A
JNZ SwOpt_2D
JB pButton, SwOpt_2D
MOV A, ButDelay
JNZ SwOpt_2C
LJMP Init
SwOpt_2C:
MOV A, ButDelay
CPL A
JNZ SwOpt_2D
MOV ButDelay, #cButDelay1
SwOpt_2D:
LJMP SwOpt_9
SwOpt_30:
ProDefine
JB pButton, SwOpt_39
MOV A, ButDelay
JNZ SwOpt_36
LJMP Init
SwOpt_36:
MOV A, ButDelay
CPL A
JNZ SwOpt_39
MOV ButDelay, #cButDelay1
SwOpt_39:
LJMP SwOpt_9
SwOpt_40: ; 自动
MOV A, DelayAuto
JNZ SwOpt_49
MOV A, TestPtr
JZ SwOpt_42
SwOpt_42:
MOV A, TestPtr
MOV DPTR, #DefTab
MOVC A, @A+DPTR
SwOpt_44:
SETB ACC.7
MOV CmdRun, A
MOV DelayAuto, #cDelayAuto
INC TestPtr
MOV A, TestPtr
CJNE A, #10H, SwOpt_45
MOV TestPtr, #00H
SwOpt_45:
JB pButton, SwOpt_49
MOV A, ButDelay
JNZ SwOpt_46
LJMP Init
SwOpt_46:
MOV A, ButDelay
CPL A
JNZ SwOpt_49
MOV ButDelay, #cButDelay1
SwOpt_49:
LJMP SwOpt_9
SwOpt_50:
LJMP SwOpt_9
SwOpt_60: ; 正常工作
MOV A, P1
CPL A
MOV Address, A
JB pButton, SwOpt_69
MOV A, ButDelay
JNZ SwOpt_62
LJMP SwOpt_1
SwOpt_62:
MOV A, ButDelay
CPL A
JNZ SwOpt_69
MOV ButDelay, #cButDelay1
SwOpt_69:
LJMP SwOpt_9
SwOpt_70:
SwOpt_80:
SwOpt_9:
ENDM
;----------------------------------------------- LED 驱动
; X = 指示灯编号
; 往 LedCmd 中输入 LED 指令:
; LedOff 灭
; LedOn 亮
; LedFlash 闪
; LedBlink 快闪
; LedBreak 闪断
; LedShot 单次
; ORL LedCmd, #80H 暂停
LedDrv MACRO X
MOV A, LedCmd&X
JB ACC.7, LedDrv_19&X ; if 暂停
; else
ANL A, #07H
MOV B, A
RL A
ADD A, B
MOV DPTR, #LedDrv_09&X
JMP @A+DPTR
LedDrv_09&X:
LJMP LedDrv_10&X
LJMP LedDrv_20&X
LJMP LedDrv_30&X
LJMP LedDrv_40&X
LJMP LedDrv_50&X
LJMP LedDrv_60&X
LJMP LedDrv_70&X
LJMP LedDrv_80&X
LedDrv_10&X: ; LedOff
MOV DelayLed&X, #0FFH
SETB pLed&X
LedDrv_19&X:
LJMP LedDrv_9&X
LedDrv_20&X: ; LedOn
CLR pLed&X
SJMP LedDrv_9&X
LedDrv_30&X: ; LedFlash
MOV A, DelayLed&X
JZ LedDrv_31&X
CPL A
JNZ LedDrv_39&X
NOP
LedDrv_31&X:
JB pLed&X, LedDrv_32&X
MOV DelayLed&X, #cLedFlashOff
SJMP LedDrv_34&X
LedDrv_32&X:
MOV DelayLed&X, #cLedFlashOn
LedDrv_34&X:
CPL pLed&X
LedDrv_39&X:
SJMP LedDrv_9&X
LedDrv_40&X: ; LedBlink
MOV A, DelayLed&X
JZ LedDrv_41&X
CPL A
JNZ LedDrv_49&X
LedDrv_41&X:
JB pLed&X, LedDrv_42&X
MOV DelayLed&X, #cLedBlinkOff
SJMP LedDrv_44&X
LedDrv_42&X:
MOV DelayLed&X, #cLedBlinkOn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -