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

📄 eg1920.asm

📁 这是几年前我写的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		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 + -