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

📄 shxj1.asm

📁 PC机与摄像机的串口通信
💻 ASM
📖 第 1 页 / 共 3 页
字号:
			        NOP                           ;等待延时
			        NOP
			        NOP
			        NOP
			        NOP
			        NOP
			        NOP
			        NOP
			        NOP
			        NOP
			        NOP
			        NOP
			        NOP
			        SETB  AD0EN                    ;使能ADC0,再采集
			        CLR   AD0INT                   ;清除转换中断
			        SETB  AD0BUSY			             ;Start ADC0
			        JNB   AD0INT,$                 ;此处硬件清除UART0中断使能
			        MOV   A,ADC0L
			        MOV   DEEP_BUF6,A			         ;low 8 bits of depth data save to DEEP_BUF6
			        MOV   A,ADC0H			
			        ANL   A,#0FH			             ;save high 4 bits only
			        MOV   DEEP_BUF7,A			         ;4 high bits save to DEEP_BUF7
			        CLR   AD0INT
			        CLR   AD0EN
			        RET
;----------------------------------------------------//所采集数据转换为BCD码\\----------------------------------------------------------
CONV:	        MOV   R1,#DEEP_BUF1		         ;change binary code into BCD code
			        MOV   R3,#16		
			        CLR   A
			        MOV   R2,#3

CONV1:	      MOV   @R1,A					           ;to clear
			        INC   R1
			        DJNZ  R2,CONV1

CONV2:	      MOV   R0,#DEEP_BUF6
			        MOV   R2,#2

CONV3:	      MOV   A,@R0
			        RLC   A										      ;circle shift to the left throug carry bit
			        MOV   @R0,A
			        INC   R0
  		        DJNZ  R2,CONV3
			        MOV   R1,#DEEP_BUF1
			        MOV   R2,#3

CONV4:	      MOV   A,@R1
			        ADDC  A,@R1
			        DA    A
			        MOV   @R1,A
			        INC   R1
			        DJNZ  R2,CONV4
			        DJNZ  R3,CONV2

;                                                     _______________
;-----------------------------------------------------|转换为ASCII码|-----------------------------------------------------------
;                                                     ^^^^^^^^^^^^^^^
CONV5:	      MOV   A,DEEP_BUF2				       ;Change BCD into ASCII
			        MOV   DEEP_BUF4,A					     ;DEEP_BUF1 ~ DEEP_BUF5 save the final depth data,xxx.x m
			        MOV   A,DEEP_BUF1
			        MOV   DEEP_BUF5,A
			        MOV   A,DEEP_BUF4
			        SWAP  A
			        ANL   A,#0FH
 			        ADD   A,#30H
			        MOV   DEEP_BUF1,A
			        MOV   A,DEEP_BUF4
			        ANL   A,#0FH
			        ADD   A,#30H
			        MOV   DEEP_BUF2,A
			        MOV   A,DEEP_BUF5
			        SWAP  A
			        ANL   A,#0FH
			        ADD   A,#30H
			        MOV   DEEP_BUF3,A
			        MOV   A,DEEP_BUF5
			        ANL   A,#0FH
			        ADD   A,#30H
			        MOV   DEEP_BUF5,A
			        MOV   DEEP_BUF4,#2EH
			        MOV   DEEP_BUF6,#0DH
			        MOV   DEEP_BUF7,#0AH			        RET
;----------------------------------------------------------------------------------------------------------------
DAR:          CLR	  EA						                 ;;-----------读深度校准数据
		          MOV		FLSCL,#01H				             ;允许软件写/擦除FLASH
		          MOV		PSCTL,#0101B			             ;禁止扇区擦除,写允许,指向128字节扇区
		          CLR	  A
		          MOV		DPTR,#0000H
	           	MOVC	A,@A+DPTR
		          MOV		DEEP_ADJ1,A
		          CLR		A
		          MOV		DPTR,#0001H
		          MOVC	A,@A+DPTR
		          MOV		DEEP_ADJ2,A
		          MOV		PSCTL,#00B
		          MOV		FLSCL,#00H
	            RET
;------------------------------------------------atmosphere air pressure DEEP ADJUST----------------------------------------
DEEP_ADJ:			MOV   R3,#10H		                     ;1US;---------------------A/D CONVERTION SUB_PROGRAM
              MOV   R5,#0H		                     ;1US
              MOV   R6,#0H		                     ;1US
			        MOV		DEEP_ADJ1,#00H
			        MOV		DEEP_ADJ2,#00H
			        CLR 	C 

AD1:	        SETB 	AD0EN
			        LCALL GETADS		                     ;2US	call one AD convertion	
			        MOV	  A,R5
	            ADD   A,DEEP_BUF6		                 ;1US
              MOV   R5,A		                       ;1US
              MOV   A,R6		                       ;1US
              ADDC  A,DEEP_BUF7		                 ;1US	overflow carry
              MOV   R6,A		                       ;1US
              DJNZ  R3,AD1                         ;sampling 16 times and sum(quite to shift to left 4 bits),2US
			        CLR 	AD0EN
              MOV   A,R5		                       ;1US,sum 25US	deal with low 8 bits
              ANL   A,#0F0H		                     ;1US		reserve the high half byte
              SWAP  A		                           ;1US		high half byte swap to low half byte
              MOV   R5,A		                       ;1US
              MOV   A,R6		                       ;1US		deal with high 8 bits
              ANL   A,#0FH		                     ;1US		
              SWAP  A		                           ;1US		
              ORL   A,R5		                       ;1US		combinate into low 8 bits
              MOV   R5,A		                       ;1US
              MOV   A,R6		                       ;1US
              SWAP  A		                           ;1US
              ANL   A,#0FH		                     ;1US
              MOV   R6,A                           ;calculate the average(quite to shift to right 4 bits),1US
			        MOV		DEEP_ADJ2,R5
			        MOV		DEEP_ADJ1,R6
			        LCALL	DAS
      	      RET

DAS:          CLR	  EA                              ;-----------------保存深度调整数据
		          MOV		FLSCL,#01H				             ;允许软件写/擦除FLASH
		          MOV		PSCTL,#0101B			             ;禁止扇区擦除,写允许,指向128字节扇区
		          CLR		A
		          MOV		DPTR,#0002H						         ;保存页地址
		          MOVC	A,@A+DPTR
		          MOV		PAGE_ADR1,A
		          INC		DPTR
		          CLR		A
		          MOVC	A,@A+DPTR
		          MOV		PAGE_ADR2,A
		          MOV		PSCTL,#0111B			             ;允许擦除FLASH
		          MOV		R0,#00H						             ;CLR FLASH		
		          MOV		A,#0FFH
		          MOVX	@R0,A
		          MOV		PSCTL,#0101B			             ;禁止扇区擦除
		          MOV		R0,#00H
		          MOV		A,DEEP_ADJ1				             ;保存DEEP_ADJ1,DEEP_ADJ2
		          MOVX	@R0,A
		          MOV		A,DEEP_ADJ2
		          INC		R0
		          MOVX	@R0,A
		          INC		R0
		          MOV		A,PAGE_ADR1				             ;保存PAGE_ADR1,PAGE_ADR2
		          MOVX	@R0,A
		          INC		R0
		          MOV		A,PAGE_ADR2
		          MOVX	@R0,A
		          MOV		PSCTL,#00B
		          MOV		FLSCL,#00H
			        RET 
						 
;                                             @ @ @ @ @ @ @ @ @ @@
;---------------------------------------------@发送与接收中断判断@@@@----@@------:)------------QQQQ....MWMWMWMWMWMWMWMWMWMWMWMWMW-------
;                                             @ @ @ @ @ @ @ @ @ @@
DETERMINE:    CLR   EA               ;关总中断
              PUSH  PSW
              PUSH  DPL
						  PUSH  DPH
						  PUSH  ACC
              ;JBC   TI,RETURN       ;判断是接收中断还是发送中断,若发送中断则结束中断继续发送深度数据,若接收中断
              JB    RI,RECIEVE       ;RI=1,跳转,开始接收数据

RETURN:       MOV   REC_COUNT,#1     ;RI=0,数据接收计数器复位
              MOV   R0,#CTRL1        ;存储地址缓存复位
              POP   ACC
              POP   DPH
							POP   DPL
							POP   PSW
							SETB  EA
							RETI                   ;退出中断
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX接收数据XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

RECIEVE:      JB    RI,REC001        ;RI=1,开始接收
							LCALL	DELAY1           ;调用延时子程序,等待RI置位
							JNB		RI,$             ;这里主要为后面的接收跳转提供一个查询等待时间,以保证接收数据不错位
							                       ;此处要求上位机发送数据的间隔大于500毫秒,否则无法跳出(情况出现在接收变倍1和2命令时)
REC001:				MOV   A,REC_COUNT      ;接收数据计数器存入累加器
						  CJNE  A,#1,T1          ;接收到的不是第一个数据
              MOV   A,SBUF0          ;接收到的是第一个数据
              CLR   RI
						  CJNE  A,#23H,T2        ;接收到的第一个数据不是#,返回判断

STORAGE:      MOV   R0,#CTRL1        ;接收到的第一个数据是#,存入控制命令存储区
              MOV   @R0,A 
							INC   R0               ;地址缓存加1
							INC   REC_COUNT        ;接收数据计数器加1
							LJMP  RECIEVE          ;跳回判断下一个接收数据
							
T1:           CJNE  A,#5,T3          ;接收到的数据不是第五个,跳转
              MOV   A,SBUF0          ;接收到的数据是第五个
							CLR   RI
							CJNE  A,#0AH,T2        ;第五个数据不是0A,跳转
							MOV   @R0,A            ;第五个数据是0A,存入控制命令存储区
							MOV   R0,#CTRL1        ;五个数据接收完毕,地址缓存复位
							MOV   REC_COUNT,#1     ;接收数据计数器复位
							LCALL COMPARE1         ;调用控制命令扫描子程序

T2:           LJMP  RETURN           ;调用返回
							
T3:           MOV   A,SBUF0          ;接收第2-4个数据
              CLR   RI
              MOV   @R0,A
							INC   R0
							INC   REC_COUNT

⌨️ 快捷键说明

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