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

📄 gps.asm

📁 ASM汇编语言的GPS接收程序只读取GPRMC数据。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*******************************************************
;                         *
;*******************************************************
;特殊寄存器定义区
S1CON		EQU 	0D8H
CR2		BIT     S1CON.7
ENS1    	BIT     S1CON.6
STA     	BIT     S1CON.5
STO		BIT	S1CON.4
SI		BIT 	S1CON.3
AA		BIT 	S1CON.2
CR1		BIT	S1CON.1
CR0		BIT 	S1CON.0
S1DAT		EQU     0DAH	;接收和发送数据
S1IST		EQU	0DCH	;用于硬件I2C总线的硬件设定、使能、启动,结束
S1ADR		EQU	0DBH	;I2C用于存放本机从地址
S1STA		EQU	0D9H	;指示I2C总线的操作状态码,高五位有效
S0CON		EQU   	98H;
FE     		BIT   	S0CON.7;
CCON    	EQU   	0C0H;
CF     		BIT   	CCON.7;
CR     		BIT   	CCON.6;
CCF4   		BIT   	CCON.4;
CCF3   		BIT   	CCON.3;
CCF2   		BIT   	CCON.2;
CCF1   		BIT   	CCON.1;
CCF0   		BIT   	CCON.0;
CMOD    	EQU   	0C1H;
CCAPM0  	EQU   	0C2H;
CCAPM1  	EQU   	0C3H;
CCAPM2  	EQU   	0C4H;
CCAPM3  	EQU   	0C5H;
CCAPM4  	EQU   	0C6H;
CL      	EQU   	0E9H;
CCAP0L  	EQU   	0EAH;
CCAP1L  	EQU   	0EBH;
CCAP2L  	EQU   	0ECH;
CCAP3L  	EQU   	0EDH;
CCAP4L  	EQU   	0EEH;
CH      	EQU   	0F9H;
CCAP0H  	EQU   	0FAH;
CCAP1H  	EQU   	0FBH;
CCAP2H  	EQU   	0FCH;
CCAP3H  	EQU   	0FDH;
CCAP4H  	EQU   	0FEH;
AUXR		EQU 	8EH
AUXR1		EQU 	0A2H;
WDTRST 		EQU     0A6H;
T2CON           EQU     0C8H;
T2MOD           EQU     0C9H
TCLK            BIT     T2CON.4;
RCLK   		BIT     T2CON.5;
IPH             EQU     0B7H
;--------------------------------------------------
BASTL0          EQU   	099H          ;TL0= 99H
BASTH0          EQU   	0F1H          ;TH0=0F1H  11.059M  晶振 CT2 2MS 定时
;-------------------------------------------------
RXBITG		BIT	40H	;开始接收GPS数据
RXGPSOKBIT	BIT	42H	;接收到一幀GPS数据
TXGPSOKBIT      BIT     43H     ;打包结束标志
;---------------------------------------------------------
;0000H-0400H
GPSLON		EQU	00A0H	;经度(8个字节ASC)
GPSLAT		EQU	00A8H	;纬度(8个字节ASC)
GPSSPD		EQU	00B0H	;速度(4个字节ASC)
GPSDEG		EQU	00B4H	;方向(4个字节ASC)
GPSHGH		EQU	00B8H	;高度(8个字节ASC)
GPSTIME		EQU 	00C0H	;时间(12个字节ASC)
GPSTIMED 	EQU	00D0H	;时间(12个字节ASC) 北京时间
Port1_RxBUFF   	EQU     0200H  	;GPS接收缓冲区的起始地址(共256个字节)绝对地址
TXGPSBUFF       EQU     0300H   ;经过打包过后的有效GPS数据发送首地址
;---------------------------------------------------------
GPS_START	EQU     32H	;GPS起始地址相对地址
Port1_Rx_PN	EQU     41H	;GPS接收缓冲区的指针
RXBUF           EQU     54H     ;接收缓冲区
TXBUF		EQU     6CH     ;串口数据发送缓冲区
C10MS           EQU     55H     ;用于10MS定时
C20MS           EQU     56H     ;用于10MS定时
C100MS          EQU     57H     ;用于100MS 定时
C500MS          EQU     58H     ;用于500MS定时
C1000MS         EQU     59H     ;用于1000MS,1S 定时

DPL1            EQU     60H     ;
DPH1            EQU     61H
;---------------------------------------------------------
;*************************************************************************
          ORG     0000h
          LJMP    MAINFUN    	;R0..R7 <--> 00H..07H , 10H..17H
          ORG     000BH  	;内部时钟中断0
          LJMP    CT0ST   	;R0..R7 <--> 08H..0FH
          ORG     0023H
          LJMP    TXRX
;===================串口中断服务程序模块========================
;****************************************************************
;程 序 名  :  TXRX                              	        *
;功      能:  串口中断服务程序                   		*
;占用寄存器:  ACC, B, DPTR                                      *
;工作寄存器:  RXBUF, Port0_Rx_PN, Port1_Rx_PN,Port1_Rx_PN       *
;位标志变量:  RXBITG,RXBITF,RXGPSOKBIT,RXFC201OKBIT             *
;缓 冲 区  :  Port0_RxBuff,Port1_RxBuff,Port2_RxBuff            *
;子程序编号:                                                    *
;****************************************************************
;----------------------串口中断子程序----------------------------
TXRX:
        JB   	RI,UARTREVDATA   ;接收中断,JMP
        CLR  	TI               ;发送中断,返回
        CLR     F0
        RETI
;******************
;串口接收程序     *
;******************
UARTREVDATA:
        PUSH 	PSW
        PUSH	ACC
        PUSH    B
        PUSH	DPH
        PUSH 	DPL

	CLR     RI
	LCALL   WDOG
	MOV     RXBUF,SBUF
	JB      RXGPSOKBIT,RXEXIT
	LCALL   WDOG
	MOV     A,RXBUF
	JB      RXBITG,RXGPS1
	XRL     A,#'$'
	JNZ     RXGPSE
	SETB    RXBITG
	MOV     Port1_Rx_PN,#00H            ;复位GPS缓冲区的指针
	MOV     DPTR,#Port1_RxBuff
	MOV     A,#'$'
	MOVX    @DPTR,A
	INC     Port1_Rx_PN
RXGPSE:
	LJMP    RXEXIT
RXGPS1: MOV     DPTR,#Port1_RxBuff
        CLR     C
        MOV     A,DPL
        ADD     A,Port1_Rx_PN
        MOV     DPL,A
        MOV     A,#0
        ADDC    A,DPH
        MOV     DPH,A
        MOV     A,RXBUF
        MOVX    @DPTR,A
        INC     Port1_Rx_PN
        MOV     A,Port1_Rx_PN
        CJNE    A,#200,RXGPS2   ;a>=200:c=0;<200;c=1
RXGPS2: JNC     RXGPS3          ;C=0转
        LJMP    RXEXIT
RXGPS3: MOV     A,RXBUF
        XRL     A,#0AH
        JZ      RXGPSEND
        LJMP    RXEXIT
RXGPSEND:
        SETB    RXGPSOKBIT
        CLR     RXBITG
        LJMP    RXEXIT
RXEXIT:
        POP    DPL
        POP    DPH
        POP    B
        POP    ACC
        POP    PSW
        RETI
;================定时中断服务程序模块区==========================
;****************************************************************
;程 序 名  :  CT0ST                              	        *
;功      能:  定时中断服务程序                   		*
;占用寄存器:  ACC, B, DPTR                                      *
;工作寄存器:  RXBUF, Port0_Rx_PN, Port1_Rx_PN,Port2_Rx_PN       *
;位标志变量:  RXBITG,RXBITF,RXGPSOKBIT,RXFC201OKBIT             *
;缓 冲 区  :  Port0_RxBuff,Port1_RxBuff,Port2_RxBuff            *
;子程序编号:                                                    *
;****************************************************************
;-------------定时中断主程序----------------------
DONE_DONE:LJMP   DONE
CT0ST:
          PUSH  ACC
          PUSH  B
          PUSH  DPH
          PUSH  DPL
          PUSH  PSW
          CLR   TR0                         ;2MS

;------------用于10MS定时---------
CT0ST1:   DJNZ  C10MS,DONE_DONE
          MOV   C10MS,#5
          JNB   RXGPSOKBIT,CT0ST2
	  LCALL UNPAKGPS                   ;对接收到的GPS数据进行解析
	  LCALL PAGGPSDATA
	  CLR   RXGPSOKBIT                 ;清除标志位,准备接收下一幀GPS数据
CT0ST2:
	  DJNZ  C20MS,DONE_DONE
          MOV   C20MS,#2
          JNB   TXGPSOKBIT,DONE
          LCALL TXGPSDATA
DONE:
          MOV   TL0, #BASTL0
          MOV   TH0, #BASTH0               ;CT0 2MS

	  SETB  TR0
          POP   PSW
          POP   DPL
          POP   DPH
          POP   B
          POP   ACC
          RETI
;*****************************************************
;功能说明:解析GPS数据                               *
;函数名  :UNPAKGPS  				     *
;所用的寄存器:R0,R1,R2,R3,R4 			     *
;入口参数:PORT1_RXBUFF,GPS_START		     *
;出口参数:GPSLAT,GPSLON,GPSSPD,GPSHGH,GPSDEG,GPSTIME*
;子程序编号:                                         *
;*****************************************************
UNPAKGPSEX:LJMP UNPAKGPSE
UNPAKGPS:
        MOV     GPS_START,#00H
	MOV     DPTR,#PORT1_RXBUFF
UNPAKGPS1:                        ;判断帧头
        CLR     C
        MOV     A,GPS_START
        SUBB    A,#180
        JNC     UNPAKGPSEX
	MOVX    A,@DPTR
	XRL     A,#'$'            ;判断$
	INC     DPTR
	INC     GPS_START
	JNZ     UNPAKGPS1
	MOVX    A,@DPTR
	XRL     A,#'G'            ;判断G
	INC     DPTR
	INC     GPS_START
	JNZ     UNPAKGPS1
	MOVX    A,@DPTR
	XRL     A,#'P'            ;判断P
	INC     DPTR
	INC     GPS_START
	JNZ     UNPAKGPS1
	MOVX     A,@DPTR
	XRL     A,#'R'            ;判断R
	INC     DPTR
	INC     GPS_START
	JNZ     UNPAKGPS1
	MOVX    A,@DPTR
	XRL     A,#'M'            ;判断M
	INC     DPTR
	INC     GPS_START
	JNZ     UNPAKGPS1
	MOVX    A,@DPTR
	XRL     A,#'C'            ;判断C
	INC     DPTR
	INC     GPS_START
	JNZ     UNPAKGPS1
	INC     DPTR
	INC     GPS_START
UNPAKGPS2:;-----------------------取数据
;$GPRMC[5],010622[12],V,2307.5097[24],N,11322.0545[37],E,000.0[45],000.0[51],101002[58],
                                 ;解析出时间数据[HHMMSS]
 	MOV     R4,#6
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(GPSTIME+6)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM
;---------------------------------取出日期  DDMMYY
	MOV 	R4,#6
	MOV     A,GPS_START
	CLR     C
	ADD     A,#58
	MOV     DPTR,#PORT1_RXBUFF
	ADD     A,DPL
	MOV     R0,A
	MOV     A,#0
	ADDC    A,DPH
        MOV     R1,A
        MOV     DPTR,#GPSTIME
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM
;---------------------------------取出速度
	MOV 	R4,#3
	MOV     A,GPS_START
	CLR     C
	ADD     A,#45
	MOV     DPTR,#PORT1_RXBUFF
	ADD     A,DPL
	MOV     R0,A
	MOV     A,#0
	ADDC    A,DPH
        MOV     R1,A
        MOV     DPTR,#GPSSPD
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM
	MOV     A,GPS_START
	CLR     C
	ADD     A,#49
	MOV     DPTR,#PORT1_RXBUFF
	ADD     A,DPL
	MOV     DPL,A
	MOV     A,#0
	ADDC    A,DPH
        MOV     DPH,A
	MOVX    A,@DPTR
	MOV     DPTR,#(GPSSPD+3)
	MOVX    @DPTR,A
;---------------------------------取出方位角
	MOV 	R4,#3
	CLR     C
	MOV     A,GPS_START
	ADD     A,#51
	MOV     DPTR,#PORT1_RXBUFF
	ADD     A,DPL
	MOV     R0,A
	MOV     A,#0
	ADDC    A,DPH
        MOV     R1,A
        MOV     DPTR,#GPSDEG
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM
	MOV     A,#30H
	MOV     DPTR,#(GPSDEG+3)
	MOVX    @DPTR,A
;---------------------------------取出纬度
	MOV     R4,#4
	MOV     A,GPS_START
	CLR     C
	ADD     A,#20
	MOV     DPTR,#PORT1_RXBUFF
	ADD     A,DPL
	MOV     R0,A
	MOV     A,#0
	ADDC    A,DPH
        MOV     R1,A
	MOV     DPTR,#GPSLAT
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	MOV     R4,#4
	MOV     A,GPS_START
	CLR     C
	ADD     A,#25
	MOV     DPTR,#PORT1_RXBUFF
	ADD     A,DPL
	MOV     R0,A
	MOV     A,#0
	ADDC    A,DPH
        MOV     R1,A
	MOV     DPTR,#(GPSLAT+4)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

;----------------------------------取出经度
	MOV     R4,#4
	MOV     A,GPS_START
	CLR     C
	ADD     A,#33
	MOV     DPTR,#PORT1_RXBUFF
	ADD     A,DPL
	MOV     R0,A
	MOV     A,#0
	ADDC    A,DPH
        MOV     R1,A
	MOV     DPTR,#GPSLON
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM
	MOV     R4,#4
	MOV     A,GPS_START
	CLR     C
	ADD     A,#38
	MOV     DPTR,#PORT1_RXBUFF
	ADD     A,DPL
	MOV     R0,A
	MOV     A,#0
	ADDC    A,DPH
        MOV     R1,A
	MOV     DPTR,#(GPSLON+4)
	MOV     R2,DPL

⌨️ 快捷键说明

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