📄 gps.asm
字号:
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 + -