📄 shxj1.asm
字号:
LJMP RECIEVE
;-----------------------------------------------------------------------------------------------------------------------------
;MWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMW)控制命令扫描(MWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMW
;--------------------------------------------------------------------------------------------------------------------------------
;本段程序实现的功能是将存储位的控制命令与设定的控制命令逐字节进行比较,从而扫描控制命令以确定向串口1发射某一命令来控制
;摄像机动作,同时也扫描深度调整命令,根据所给命令来调用深度调整子程序
;深度调整控制命令为“#,D,A,CR,LF”
COMPARE1: ;@@@@@这里扫描变倍1的控制命令“#,Z,+,CR,LF”,采用逐位比较
CLR A
MOV A,CTRL1 ;控制命令存储区1存入累加器
CJNE A,#23H,NEXT0 ;扫描命令中的#,非#则跳出
CLR A
MOV A,CTRL2 ;控制命令存储区2存入累加器
CJNE A,#5AH,COMPARE2 ;扫描命令中的Z,非Z转移
CLR A
MOV A,CTRL3 ;控制命令存储区3存入累加器
CJNE A,#2BH,COMPARE3 ;扫描命令中的+,非+转移
CLR A
MOV A,CTRL4 ;控制命令存储区4存入累加器
CJNE A,#0DH,NEXT0 ;回车
CLR A
MOV A,CTRL5 ;控制命令存储区5存入累加器
CJNE A,#0AH,NEXT0 ;换行
LCALL ZOOM1 ;调用变倍1(拉近,放大)子程序
RET
COMPARE2: ;@@@@@扫描聚焦1的控制命令"#,F,+,CR,LF",同样为逐位比较,只需比较“F,+,CR,LF”位
CLR A
MOV A,CTRL2 ;若CTRL2不是Z,则比较是否为F
CJNE A,#46H,COMPARE5 ;扫描命令中的F,非F转移
CLR A
MOV A,CTRL3
CJNE A,#2BH,COMPARE4 ;扫描命令中的+,非+转移
CLR A
MOV A,CTRL4
CJNE A,#0DH,NEXT0 ;回车
CLR A
MOV A,CTRL5
CJNE A,#0AH,NEXT0 ;换行
LCALL FOCUS1 ;调用聚焦1(拉近)子程序
RET
COMPARE3: ;@@@@扫描变倍2的控制命令“#,Z,-,CR,LF”,只需比较“-,CR,LF”位
CLR A
MOV A,CTRL3
CJNE A,#2DH,NEXT0 ;扫描命令中的-,非-跳出
CLR A
MOV A,CTRL4
CJNE A,#0DH,NEXT0 ;回车
CLR A
MOV A,CTRL5
CJNE A,#0AH,NEXT0 ;换行
LCALL ZOOM2 ;调用变倍2(推远,缩小)子程序
RET
COMPARE4: ;@@@@扫描聚焦2的控制命令“#,F,-,CR,LF”,只需比较“-,CR,LF”位
CLR A
MOV A,CTRL3
CJNE A,#2DH,NEXT0 ;扫描命令中的-,非-跳出
CLR A
MOV A,CTRL4
CJNE A,#0DH,NEXT0 ;回车
CLR A
MOV A,CTRL5
CJNE A,#0AH,NEXT0 ;换行
LCALL FOCUS2
RET
COMPARE5: ;@@@@扫描深度调整命令“#,D,A,CR,LF”,只需比较“D,A,CR,LF”位
CLR A
MOV A,CTRL2
CJNE A,#44H,NEXT0 ;不是D跳出
CLR A ;是D继续扫描
MOV A,CTRL3
CJNE A,#41H,NEXT0 ;不是A跳出
CLR A ;是A继续扫描
MOV A,CTRL4
CJNE A,#0DH,NEXT0 ;不是CR跳出
CLR A
MOV A,CTRL5
CJNE A,#0AH,NEXT0 ;不是LF跳出
LCALL DEEP_ADJ ;调用深度调整子程序
NEXT0: RET
;CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC摄像机控制发送码段CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD
;本段程序实现的功能是,比扫描控制命令后得到要发送哪一个控制摄像机的命令并通过串口1发送
;;;""""""""""""""""""""""""""""""""""""""""""变倍1(拉近,放大),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
ZOOM1: MOV R0,#6 ;发送数据计数器置初值
MOV DPTR,#ZOOM_TAB1 ;DPTR指向要发出的数据表
SEND1: CLR A
MOVC A,@A+DPTR ;将第i个字节送入A
MOV SBUF1,A ;发送数据
CHECK1: CLR A
MOV A,SCON1
JNB ACC.1,CHECK1 ;查询等待
ANL SCON1,#0FDH
INC DPTR ;指向下一个数据
DJNZ R0,SEND1 ;不到6个数据则转移
MOV R3,#40
CYCLE11: LCALL DELAY ;调用延时,使摄像机动作一段时间(对深度数据采集有影响)
DJNZ R3,CYCLE11
MOV R2,#10
CYCLE12: LCALL STOP ;调用摄像机的动作停止控制命令
DJNZ R2,CYCLE12 ;重复调用以减少摄像机误动作
;CPL P1.6 ;动作指示灯亮(试验用)
ANL SCON1,#0FDH
RET
ZOOM_TAB1: DB 0C5H,5FH,02H,00H,00H,26H ;摄像机变倍1动作控制命令符
;;---------------------------------------变倍2(推远,缩小)----------------------------------------
ZOOM2: MOV R0,#6
MOV DPTR,#ZOOM_TAB2 ;DPTR指向要发出的数据表
SEND2: CLR A
MOVC A,@A+DPTR ;将第i个字节送入A
MOV SBUF1,A ;发送数据
CHECK2: CLR A
MOV A,SCON1
JNB ACC.1,CHECK2 ;查询等待
ANL SCON1,#0FDH
INC DPTR ;指向下一个数据
DJNZ R0,SEND2 ;不到6个数据则转移
MOV R3,#40
CYCLE21: LCALL DELAY ;调用延时子程序(R3自减对深度数据发送有影响,此时深度数据发送停止)
DJNZ R3,CYCLE21 ;(若用R2则无影响)
MOV R2,#10
CYCLE22: LCALL STOP ;调用停止动作
DJNZ R2,CYCLE22
;? CPL P1.6 ;动作指示灯亮(试验用)
ANL SCON1,#0FDH
RET
ZOOM_TAB2: DB 0C5H,5FH,04H,00H,00H,28H ;摄像机变倍2动作控制命令符
;;OoOooOoooOooooOoooooOooooooOoooooooO聚焦1(拉近)OoooooooOooooooOoooooOooooOoooOooOoO
FOCUS1: MOV R0,#6
MOV DPTR,#FOCUS_TAB1 ;DPTR指向要发出的数据表
SEND3: CLR A
MOVC A,@A+DPTR ;将第i个字节送入A
MOV SBUF1,A ;发送数据
CHECK3: CLR A
MOV A,SCON1
JNB ACC.1,CHECK3 ;查询等待
ANL SCON1,#0FDH
INC DPTR ;指向下一个数据
DJNZ R0,SEND3 ;不到6个数据则转移
MOV R3,#10
CYCLE3: LCALL STOP ;调用停止动作
DJNZ R3,CYCLE3
;? CPL P1.6 ;动作指示灯亮(试验用)
ANL SCON1,#0FDH
RET
FOCUS_TAB1: DB 0C5H,5FH,39H,00H,00H,5DH ;摄像机聚焦1动作控制命令符
;;12345678987654321234567898765432123456789聚焦2(推远)98765432123456789876543212345678987654321
FOCUS2: MOV R0,#6
MOV DPTR,#FOCUS_TAB2 ;DPTR指向要发出的数据表
SEND4: CLR A
MOVC A,@A+DPTR ;将第i个字节送入A
MOV SBUF1,A ;发送数据
CHECK4: CLR A
MOV A,SCON1
JNB ACC.1,CHECK4 ;查询等待
ANL SCON1,#0FDH
INC DPTR ;指向下一个数据
DJNZ R0,SEND4 ;不到6个数据则转移
MOV R3,#10
CYCLE4: LCALL STOP ;调用停止动作
DJNZ R3,CYCLE4
;? CPL P1.6 ;动作指示灯亮(试验用)
ANL SCON1,#0FDH
RET
FOCUS_TAB2: DB 0C5H,5FH,38H,00H,00H,5CH ;摄像机聚焦2动作控制命令符
;;----------------------------------动作停止命令符---------------------------------------------
STOP: MOV DPTR,#STOP_TAB ;DPTR指向要发出的数据表
MOV R0,#6
ST1: CLR A
MOVC A,@A+DPTR ;将第i个字节送入A
MOV SBUF1,A ;发送数据
CHECK5: CLR A
MOV A,SCON1
JNB ACC.1,CHECK5 ;查询等待
ANL SCON1,#0FDH
INC DPTR ;指向下一个数据
DJNZ R0,ST1 ;不到6个数据则转
ANL SCON1,#0FDH
RET
;;------------------------------------------------
STOP_TAB: DB 0C5H,5FH,0CH,00H,00H,30H ;摄像机动作停止控制命令符
;-----------------------------------------------------延时程序--------------------------------------------------------
DELAY: MOV R6,#255 ;延时8.88毫秒
S1: MOV R7,#255
DJNZ R7,$
DJNZ R6,S1
RET
DELAY1: MOV R6,#20 ;延时0.059毫秒
S11: MOV R7,#20
DJNZ R7,$
DJNZ R6,S11
RET
;###########I##T'##S#############N##O##T################T##H##E#################E##N##D########################
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -