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

📄 gps.asm

📁 ASM汇编语言的GPS接收程序只读取GPRMC数据。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	MOV     R3,DPH
	LCALL   RAMTORAM
;----------------------------------取出海拔高度
	MOV     R4,#8
	MOV     DPTR,#GPSHGH
	MOV     A,#'C'
HEIGH:	MOVX    @DPTR,A
	INC     DPTR
	DJNZ    R4,HEIGH
UNPAKGPSE:
	RET
;*******************************************
;名称:RAMTORAM                            *
;功能:把R1,R0开始的RAM表中的内容传送到以  *
;      R3,R2为目的地址的RAM中              *
;      R1,R0   <-- 要传送RAM DPH,DPL       *
;      R3,R2   <-- 传送目标RAM DPH,DPL     *
;      R4      <-- 传送的个数              *
;占用寄存器: A,DPTR, R0,R1,R2,R3,R4        *
;子程序编号:                               *
;*******************************************
RAMTORAM:
        MOV     DPH, R1          ;将数据缓冲区重新给DPTR指针
        MOV     DPL, R0          ;
        MOVX    A,@DPTR
        INC     DPTR
        MOV     R1,DPH
        MOV     R0,DPL
        MOV     DPL,R2
        MOV     DPH,R3
        MOVX    @DPTR,A
        INC     DPTR
        MOV     R2,DPL
        MOV     R3,DPH
        LCALL   WDOG              ;看门狗
        DJNZ    R4, RAMTORAM
        RET
;***************************************
;功能说明:发送一个字节的数据到串口;  *
;函数名:TXBYTE:                       *
;参数:	TXBUF:	要发送的数据地址;     *
; 	TXBUFAD:串口发送的地址         *
;***************************************
TXBYTE:
	CLR 	TI
	CLR     ES
	CLR     TR1
	MOV     TH1,#0FAH
        MOV     TL1,#0FAH          ;波特率为9600
        SETB    TR1
        SETB    ES
        SETB    F0
	MOV     A,TXBUF
	MOV     SBUF,A
	JB      F0,$
	CLR     TR1
	CLR     ES
	MOV     TH1,#0F4H
        MOV     TL1,#0F4H          ;波特率为4800
	SETB    TR1
	SETB    ES
NEXTEX:
	RET
;***************************************
;功能说明:打包GPS数据到串口;          *
;函数名:PAGGPSDATA:                   *
;参数:	 TXGPSBUFF                     *
; 	TXBUFAD:串口发送的地址         *
;***************************************
PAGGPSEXIT:	RET
PAGGPSDATA:
	JB      TXGPSOKBIT,PAGGPSEXIT

	MOV   	DPTR,#TXGPSBUFF
	MOV   	A,#'$'
	MOVX  	@DPTR,A
	INC   	DPTR
	MOV   	A,#'G'
	MOVX  	@DPTR,A
	INC   	DPTR
	MOV   	A,#'P'
	MOVX  	@DPTR,A
	INC   	DPTR
	MOV   	A,#'R'
	MOVX  	@DPTR,A
	INC   	DPTR
	MOV   	A,#'M'
	MOVX  	@DPTR,A
	INC   	DPTR
	MOV   	A,#'C'
	MOVX  	@DPTR,A
	INC   	DPTR
	MOV   	A,#','
	MOVX  	@DPTR,A

	MOV     R4,#6
	MOV     DPTR,#(GPSTIME+6)
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+7)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC   	DPTR
	MOV   	A,#','
	MOVX  	@DPTR,A

	INC   	DPTR
	MOV   	A,#'V'
	MOVX  	@DPTR,A

	INC   	DPTR
	MOV   	A,#','
	MOVX  	@DPTR,A

	MOV     R4,#4
	MOV     DPTR,#GPSLAT
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+15)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC   	DPTR
	MOV   	A,#'.'
	MOVX  	@DPTR,A

	MOV     R4,#4
	MOV     DPTR,#(GPSLAT+4)
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+20)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC   DPTR
	MOV   A,#','
	MOVX  @DPTR,A

	INC   DPTR
	MOV   A,#'N'
	MOVX  @DPTR,A

	INC   DPTR
	MOV   A,#','
	MOVX  @DPTR,A

	INC   DPTR
	MOV   A,#31H
	MOVX  @DPTR,A

	MOV     R4,#4
	MOV     DPTR,#GPSLON
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+29)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC   DPTR
	MOV   A,#'.'
	MOVX  @DPTR,A

	MOV     R4,#4
	MOV     DPTR,#GPSLON
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+35)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC   	DPTR
	MOV   	A,#','
	MOVX  	@DPTR,A

	INC   	DPTR
	MOV   	A,#'E'
	MOVX  	@DPTR,A

	INC   	DPTR
	MOV   	A,#','
	MOVX  	@DPTR,A

	MOV     R4,#3
	MOV     DPTR,#GPSSPD
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+43)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC   	DPTR
	MOV   	A,#'.'
	MOVX  	@DPTR,A

	MOV     DPTR,#(GPSSPD+4)
	MOVX    A,@DPTR
	MOV     DPTR,#(TXGPSBUFF+48)
	MOVX    @DPTR,A

	INC   	DPTR
	MOV   	A,#','
	MOVX  	@DPTR,A

	MOV     R4,#3
	MOV     DPTR,#GPSDEG
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+50)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC   	DPTR
	MOV   	A,#'.'
	MOVX  	@DPTR,A

	MOV     DPTR,#(GPSDEG+4)
	MOVX    A,@DPTR
	MOV     DPTR,#(TXGPSBUFF+55)
	MOVX    @DPTR,A


	INC     DPTR
	MOV     A,#','
	MOVX    @DPTR,A

	MOV     R4,#4
	MOV     DPTR,#GPSTIME
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+57)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC     DPTR
	MOV     A,#','
	MOVX    @DPTR,A

	MOV     R4,#8
	MOV     DPTR,#GPSHGH
        MOV     R0,DPL           ;保存接收缓冲区数据指针
        MOV     R1,DPH           ;
        MOV     DPTR,#(TXGPSBUFF+63)
	MOV     R2,DPL
	MOV     R3,DPH
	LCALL   RAMTORAM

	INC     DPTR
	MOV     A,#','
	MOVX    @DPTR,A

	INC     DPTR
	MOV     A,#0DH
	MOVX    @DPTR,A
	INC     DPTR
	MOV     A,#0AH
	MOVX    @DPTR,A
	SETB    TXGPSOKBIT
	RET

;***************************************
;功能说明:发送GPS数据到串口;          *
;函数名:TXGPSDATA:                   *
;参数:	 TXGPSBUFF                     *
; 	TXBUFAD:串口发送的地址         *
;***************************************
TXGPSDATA:
	MOV    DPTR,#TXGPSBUFF
	MOV    DPL1,DPL
	MOV    DPH1,DPH
	MOV    R4,#72
TXGPSNEXT:
	MOV    DPL,DPL1
	MOV    DPH,DPH1
 	MOVX   A,@DPTR
        MOV    TXBUF,A
        LCALL  TXBYTE
        INC    DPTR
        MOV    DPL1,DPL
        MOV    DPH1,DPH
        DJNZ   R4,TXGPSNEXT
        CLR    TXGPSOKBIT
        RET
;*****************************************
;主程序
;*****************************************
MAINFUN:
	  CLR   EA
          MOV   PSW,#00H
          MOV   SP,#08H
          LCALL WDOG
          CLR   C
          CLR   F0
	  MOV   Port1_Rx_PN,#00H
;-----------------------------------------设定标志位的初始值:
          CLR 	RXBITG		         ;接收到GPS有效数据帧的标志位
	  CLR   RXGPSOKBIT	         ;接收完一帧GPS数据标志位
	  CLR   TXGPSOKBIT               ;清除打包结束标志
;------------------------------------------
          MOV    AUXR,#00H           ;使用ERAM
          CLR    TCLK                ;用定时器1作为波特率发生器
          CLR    RCLK                ;用定时器1作为波特率发生器
          MOV    AUXR1,#00H          ;使用DPTR作为ERAM的寻址方式
;-------------------------------------------
;         LCALL  WDOG
          MOV    IP, #01000001B      ;INT0>PCA>ES>T0
          MOV    IPH,#00010001B
          MOV    TMOD,#00100001b     ;T0为定时器方式1,T1的工作方式2(20h),重复装入计数值
	  MOV    TH1,#0F4H           ;晶振频率为11.059MHZ
          MOV    TL1,#0F4H           ;波特率=4800pbs
          MOV    PCON,#00H           ;00h,smod=0(若=1,则波特率=2*9600pbs),smod为最高位
          MOV    SCON,#01010000b     ;50h,01方式1,10位异步收发,定时器控制,01单机对单机,允许接收
          MOV    TL0,#BASTL0
          MOV    TH0,#BASTH0         ;CT0 2MS
;-------------------初始化PCA---------------
          MOV	 CMOD,#01H	     ;计数时钟为OSC/6,允许中断
;-------------------------------------------
;         LCALL  WDOG                ;看门狗
          MOV    C10MS,#5            ;用于10MS定时
          MOV    C20MS,#2            ;用于20MS定时
          MOV    C100MS,#5           ;用于100MS定时
          MOV    C500MS,#5           ;用于500MS定时
          MOV    C1000MS,#2          ;用于1S定时
          SETB   TR0                 ;启动t0计数
          SETB   TR1                 ;启动T1计数
          CLR	 CR		     ;关闭PCA计数
          MOV    IE,#10010010b       ;EA,EC,ES,ET0,EX0=11010011
MAINL4:   NOP
          NOP
          NOP
          NOP
;         LCALL  WDOG                ;看门狗
          NOP
          NOP
          NOP
          NOP
          NOP
          LJMP   MAINL4
;****************************************
; 功能说明:初始化看门狗                *
; 函数名:INITWDOG                      *
; 调用方法:                            *
;               LCALL   INITWDOG        *
; 占用寄存器:   			*
; 占用 RAM  :                          *
; 模块编号:                            *
;****************************************
INITWDOG:
        NOP
	;MOV	CCAPM4,#4CH
	;MOV 	CCAP4L,#0FFH
	;MOV     CCAP4H,#0FFH
	;MOV     WDTRST,#1EH
	;MOV     WDTRST,#0E1H
	;ORL     CMOD,#40H       ;看门狗使能信号=1
	RET
;****************************************
; 功能说明:初始化看门狗                *
; 函数名:	WDOG                    *
; 调用方法:                            *
;               LCALL   WDOG        	*
; 占用寄存器:   			*
; 占用 RAM  :                          *
; 模块编号:                            *
;****************************************
WDOG:    NOP
         NOP
	;CLR 	EA
	;MOV 	CCAP4L,#00
	;MOV    CCAP4H,CH
	;MOV    WDTRST,#1EH
	;MOV    WDTRST,#0E1H
	;SETB	EA
	 RET
;***************************************
         END

⌨️ 快捷键说明

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