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

📄 shxj1.asm

📁 PC机与摄像机的串口通信
💻 ASM
📖 第 1 页 / 共 3 页
字号:
							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 + -