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

📄 gps.asm

📁 串行接收、提取GPS报文信息
💻 ASM
📖 第 1 页 / 共 2 页
字号:
Gpsrec:
    mov 65h,dph
		mov 66h,dpl               ;保护地址
		mov 7ah,#30h
		 mov 7bh,#30h
		 mov 7ch,#30h
		 mov 7dh,#30h
		 mov 7eh,#30h
		 mov 7fh,#30h 
		clr 2dh.5
    mov a,60h
		cjne a,#24h,gpsreca       ;判断是否为$
		mov dptr,#0f0h
		movx @dptr,a              
		inc dptr
		setb 20h.0
		mov 70h,dph
		mov 71h,dpl
	  mov dph,65h
		mov dpl,66h               ;出栈
		ret
	 
gpsreca:
    jnb 20h.0,gpsrecret     
	  mov dph,70h
		mov dpl,71h
    cjne a,#0ah,gpsrecb       ;判断是否为最后一个字节
		movx @dptr,a
		clr 20h.0
		ljmp gpscheck
gpsrecb:                     ;数据存放
    movx @dptr,a
		inc dptr 
		mov 70h,dph
		mov 71h,dpl
gpsrecret:
   
	  mov dph,65h
		mov dpl,66h               ;出栈
		ret 
;=======================================================================================================
     

;=====================================================================================================
                                 ;校验子程序 
																 ;占用资源75H 作为异或中间存储,76h 77h作为异或和校验中间存储
																 ;76h存储低字节 77h存储高字节
gpscheck:
    mov dptr,#0f1h               ;首地址 
		mov 75h,#00h
gpschea:
    movx a,@dptr     
		inc dptr
		cjne a,#2ah,gpscheb          ;判断是否为*
	
		ljmp gpschec                 ;全部异或结束,跳转处理程序
gpscheb:                       
    xrl a,75h                    ;异或 
    mov 75h,a
		ljmp gpschea
gpschec:
    mov 76h,75h
		mov 77h,75h
		anl 76h,#0fh                 ;取出低字节放在76H
		anl 77h,#0f0h                
    mov a,77h
		swap a
		mov 77h,a                     ;高字节放在77H
		orl 76h,#30h
    orl 77h,#30h                  ;变成ASC码格式
		
		movx a,@dptr
		cjne a,77h,gpscheret
    inc dptr
		movx a,@dptr
		cjne a,76h,gpscheret          ;校验成功 应该改为直接跳转道rmc数据接收程序 
		ljmp gpsdata                              ;*****现在还没有进行改动******
		;setb 20h.1
gpscheret:
		mov dph,65h
		mov dpl,66h
		ret
;=====================================================================================================
                                  ;GPSRMC数据接收程序
																	;采用对逗号和小数点进行计数的方法,将需要的数据存放在一个连续的空间
																	;对待不同符号后的数据接收采用不同的方法
																	;数据校验成功即跳转到本程序
																	;78h 逗号个数存储器
gpsdata:
    mov dptr,#00f3h
		mov 78h,#0
		movx a,@dptr
		inc dptr
		cjne a,#52h,gpsggaj  ;若f3空间是r 进入提取rmc数据空间。否则转去判断是否为gga数据
;===========================================================================================
                            ;判断接受数据是否有效,只有在接收数据为rmc时 才进入此流程
gpsav:
    mov dptr,#0f0h
		mov 78h,#0
gpsava:
		movx a,@dptr
		inc dptr
		cjne a,#2ch,gpsava
		inc 78h
		mov a,78h
		cjne a,#2,gpsava
    movx a,@dptr
		cjne a,#41h,gpsavret
		mov dptr,#7d5h          ;如gps数据有效 ,报警信息第三位置为1
		movx a,@dptr
		xor a,#08h
		movx @dptr,a
		mov 78h,#0

		ljmp gpsavv
gpsavret:
    mov dptr,#7d5h          ;无效 ,第三位置为0
		movx a,@dptr
		anl a,#0f7h
		movx @dptr,a
    mov 78h,#0
    mov dph,65h
		mov dpl,66h
		ret
;=============================================================================================	
gpsavv:
   mov dptr,#0f4h			            
gpsrmc:
    movx a,@dptr
		inc dptr
		cjne a,#2ch,gpsrmc
		inc 78h
rmcdhao:
    mov a,78h
		cjne a,#1,rmcdhaoa     ;判断逗号个数为1 进入接收时间信息流程
		mov r2,#07h
		mov r3,#0f3h             ;时 分 秒 数据 放在7f3h开头的空间内
		mov r4,#7ah
		lcall drmcdata
rmcdhaol:
		movx a,@dptr
		inc dptr
		cjne a,#2ch,rmcdhaol
		inc 78h
		ljmp rmcdhao
gpsggaj:
	
		ljmp gpsgga
rmcdhaoa:
    cjne a,#2,rmcdhaob    ;判断逗号个数为2 进入接受"A""V"的过程
		                               ;由于是单个数据的处理 直接读取  直接判断
rmcdatab:
		movx a,@dptr
    inc dptr                       ;数据接收  	
		cjne a,#2ch,rmcdataba          ;判断是否为逗号
		inc 78h                        ;是逗号则说明接受完毕
		ljmp rmcdhao                   ;跳转去判断逗号个数
rmcdataba:
   
    cjne a,#41h,rmcjump1            ;若此数据不为"A"则数据无效 跳转回主程序/////////////////////
    
    ljmp rmcdatab                  ;若是"a" 则继续接收下个数据
rmcjump1:
    ljmp gerroll
rmcdhaob:
    cjne a,#3,rmcdhaoc    ;判断逗号个数为3 进入接收纬度信息流程
		mov r2,#07h
		mov r3,#0dfh                     ;小数点前纬度数据存放在#7dfh-7e0h
		mov r4,#7ch                     ;数据提取从7ch开始
    lcall drmcdata
   mov r2,#07h
	 mov r3,#0e1h                      ;小数点后数据存放在#7e1h-7e2h 
   mov r4,#7dh
	  lcall srmcdata
	 inc 78h
		ljmp rmcdhao

rmcdhaoc:
    cjne a,#4,rmcdhaod   ;判断逗号个数为4 进入接收纬度方向信息流程
		                               ;这段也是接受单字符程序 直接读取 直接存放 
rmcdatac:
	  movx a,@dptr
		inc dptr
		cjne a,#2ch,rmcdataca
		inc 78h
		ljmp rmcdhao
rmcdataca:
    cjne a,#4eh,rmcdatacb            ;判断时候为"n" 否去判断是否为"s"
    mov 75h,dph
		mov 76h,dpl
		mov dptr,#07e3h                  ;存放在 xram  7e3h内
		movx @dptr,a
		mov dph,75h
		mov dpl,76h
		ljmp rmcdatac
rmcdatacb:
    cjne a,#53h,rmcjump2              ;判断是"s",则可以存储,否,重新接收
		mov 75h,dph
		mov 76h,dpl
		mov dptr,#07e3h
		movx @dptr,a
		mov dph,75h
		mov dpl,76h
		ljmp rmcdatac
rmcjump2:
    ljmp gerroll

rmcdhaod:
    cjne a,#5,rmcdhaoe    ;5c内个数为5是 进入提取经度信息流程
		mov r2,#07h
		mov r3,#0e4h            ;小数点经度信息放在7e4 7e5 7e6内
		mov r4,#7ah
		lcall drmcdata                  
    mov r2,#07h
		mov r3,#0e7h            ;小数点后经度信息放在7e7 7e8内
		mov r4,#7dh
		lcall srmcdata
		inc 78h
    ljmp rmcdhao

rmcdhaoe:
    cjne a,#6,rmcdhaof   ;5c内个数为6是 进入提取经度方向信息流程
rmcdatad:
	  movx a,@dptr
		inc dptr
		cjne a,#2ch,rmcdatada
		inc 78h
		ljmp rmcdhao
rmcdatada:
    cjne a,#45h,rmcdatadb            ;判断时候为"e" 否去判断是否为"w"
    mov 75h,dph
		mov 76h,dpl
		mov dptr,#07e9h                  ;存放在 xram  7e9h内
		movx @dptr,a
		mov dph,75h
		mov dpl,76h
		ljmp rmcdatad
rmcdatadb:
    cjne a,#57h,gerroll              ;判断是"w",则可以存储,否,重新接收
		mov 75h,dph
		mov 76h,dpl
		mov dptr,#07e9h
		movx @dptr,a
		mov dph,75h
		mov dpl,76h
		ljmp rmcdatad
rmcdhaof:
    cjne a,#7,rmcdhaog   ;5c内个数为7是 进入提取速度信息流程
   mov r2,#07h
	 mov r3,#0d9h               ;小数点前数据放在7d9 7da内
	 mov r4,#7ch
	 lcall drmcdata
	 mov r2,#07h
	 mov r3,#0dbh               ;小数点后数据放在7db内
	 mov r4,#7bh
	 lcall srmcdata
	 inc 78h
	 ljmp rmcdhao
rmcdhaog:
   cjne a,#8,rmcdhaoh   ;5c内个数为8是 进入提取方向信息流程
	  mov r2,#07h
	 mov r3,#0dch              ;方向信息小数点前方在7dc 7dd内
	 mov r4,#7ch
	 lcall drmcdata
	 mov r2,#07h
	 mov r3,#0deh             ;方向信息小数点后 放在7de内           
	 mov r4,#7bh
	 lcall srmcdata
	 inc 78h
	 ljmp rmcdhao
rmcdhaoh:
   cjne a,#9,gerroll   ;5c内个数为9是 进入提取日期信息流程
   mov r2,#07h
	 mov r3,#0f0h               ;日期信息放在7f0 7f1 7f2内
	 lcall rirmcdata
	  				
gerroll:
    mov dph,65h
		mov dpl,66h
    ret		                         ;直接返回主程序即可,重新接收

⌨️ 快捷键说明

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