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

📄 gps.asm

📁 GPS模块接收导航电文,数据处理源码,提取经,纬度,时间等有效信息.
💻 ASM
字号:
;;;;;;debug program of GPS receiver modular;;;;;;;
     RW EQU P1.0;RW=SID
      E EQU P1.1;E=SCLK
   LED1 EQU P1.4
   LED2 EQU P1.5
        ORG 0000H
        AJMP MAIN
   MAIN:;CLR RST;复位接收模块
        ;CLR LED
        MOV TMOD,#20H;定时器1方式2
        MOV TL1,#0F3H;4800bit/s
        MOV TH1,#0F3H
        MOV PCON,#80H;SMOD=1
        CLR EA       ;关中断
        SETB TR1     ;启动定时器1
        MOV SCON,#50H;串口方式1
        MOV SP,#70H
        LCALL DELAY
        LCALL DELAY
        LCALL SETUP;液晶初始化
        MOV A,#80H ;在第一行显示汉字
        LCALL WRITE_COM
        MOV DPTR,#CHINESE1
        MOV 30H,#5;要显示汉字的个数
        LCALL WRITE_HZ
        MOV A,#90H;在第二行显示汉字
        LCALL WRITE_COM
        MOV DPTR,#CHINESE2
        MOV 30H,#2
        LCALL WRITE_HZ
        MOV A,#88H;在第三行显示汉字
        LCALL WRITE_COM
        MOV DPTR,#CHINESE3
        MOV 30H,#2
        LCALL WRITE_HZ
        MOV A,#98H;在第四行显示汉字
        LCALL WRITE_COM
        MOV DPTR,#CHINESE4
        MOV 30H,#2
        LCALL WRITE_HZ
;*************************************
  START:;LCALL SENDCOM;设置接收模块
  AGAIN:LCALL RECEIVE;接收导航电文
        SETB LED2
        MOV 35H,40H
        MOV 36H,41H
        ANL 35H,#0FH;UTC转换北京时间
        ANL 36H,#0FH
        MOV A,35H
        SWAP A
        ADD A,36H
        ADD A,#08H
        DA A
        MOV R7,A
        CLR C
        SUBB A,#24H
        JC LL
        MOV R7,A
        SUBB A,#06H
        JC LL
        AJMP LLL
     LL:MOV A,R7
    LLL:MOV B,#10H
        DIV AB
        ADD A,#30H
        MOV 40H,A
        MOV A,B
        ADD A,#30H
        MOV 41H,A
        MOV A,#92H;显示时间
        LCALL WRITE_COM
        MOV R1,#40H
        MOV 31H,#10
        LCALL WRITE_ASCII
        MOV A,#85H;显示A/V
        LCALL WRITE_COM
        MOV R1,#4AH
        MOV 31H,#1
        LCALL WRITE_ASCII
        MOV A,#9AH;显示纬度
        LCALL WRITE_COM
        MOV R1,#4BH
        MOV 31H,#10
        LCALL WRITE_ASCII
        MOV A,#8AH;显示经度
        LCALL WRITE_COM
        MOV R1,#55H
        MOV 31H,#11
        LCALL WRITE_ASCII
        LJMP AGAIN
;***************************************
 SENDCOM:MOV R7,#23;设置接收模块子程序
         MOV DPTR,#TAB1
      L0:CLR A
         MOVC A,@A+DPTR
         MOV SBUF,A
         JNB TI,$
         CLR TI
         INC DPTR
         DJNZ R7,L0
         RET
    TAB1:DB "$PGRMO,,2"
         DB "$PGRMO,GPRMC,1"
 RECEIVE:;接收导航电文子程序
         CLR LED2
         JNB RI,$
         CLR RI
         MOV A,SBUF
         XRL A,#24H;IS $ ?
         JNZ RECEIVE;NO->RECRIVE
      RE:JNB RI,$
         CLR RI
         MOV A,SBUF
         XRL A,#2CH;IS ,?
         JNZ RE
         MOV R0,#40H;THE FIRST ADDER
         LCALL R_DATA;RECEIVE 'TIME'
         LCALL R_DATA;RECEIVE 'A/V'
         LCALL R_DATA;RECEIVE LATITUDE
         LCALL R_DATA;RECEIVE 'N/S'
         LCALL R_DATA;RECEIVE LONGITUDE
         LCALL R_DATA;RECEIVE 'E/W'
         LCALL R_DATA
         MOV R0,#60H
         LCALL R_DATA
         MOV R0,#60H
         LCALL R_DATA
         MOV R0,#60H
         LCALL R_DATA
         MOV R0,#60H
         LCALL R_DATA
         MOV R0,60H
         LCALL R_DATA
         RET
  R_DATA:JNB RI,$
         CLR RI
         MOV A,SBUF
         MOV @R0,A
         INC R0
         CJNE A,#2CH,R_DATA
         DEC R0
         RET
;************************************
SETUP:LCALL DELAY;液晶初始化
      LCALL DELAY
      LCALL DELAY
      MOV A,#01H ;CLEAR DISPLAY
      LCALL WRITE_COM
      MOV A,#00110000B ;FUNCTION SETTING
      LCALL WRITE_COM
      MOV A,#00000010B ;DDRAM SET TO '00H'
      LCALL WRITE_COM
      MOV A,#00000100B ;
      LCALL WRITE_COM
      MOV A,#00001100B ;DISPLAY ON
      LCALL WRITE_COM
      MOV A,#00000001B ;CLEARING SCREEN
      LCALL WRITE_COM
      MOV A,#10000000B ;SET DDRAM ADDRESS
      LCALL WRITE_COM
      RET
DELAY1:MOV R7,#010H
  D11: MOV R6,#010H
       DJNZ R6,$
       DJNZ R7,D11
       RET
DELAY:MOV R1,#00H
  D2: MOV R2,#00H
      DJNZ R2,$
      DJNZ R1,D2
      RET
;------------写16*8 点阵ASCII 字符-----------
WRITE_ASCII:
     MOV R4,31H
DDDD:MOV A,@R1
     LCALL WRITE_DAT
     INC R1
     DJNZ R4,DDDD
     RET
;-----------写16*16 点阵汉字------------
WRITE_HZ:MOV R4,30H;汉字个数
     DD: CLR A
         MOVC A,@A+DPTR
         INC DPTR
         LCALL WRITE_DAT
         CLR A
         MOVC A,@A+DPTR
         INC DPTR
         LCALL WRITE_DAT
         DJNZ R4,DD
         RET
CHINESE1:db 0ceh,0c0h,0d0h,0c7h,0d7h,0b4h,0cch,0ach,0a1h,0c3h;卫星状态:
CHINESE2:db 0cah,0b1h,0bch,0e4h;时间
CHINESE3:DB 0beh,0adh,0b6h,0c8h;经度
CHINESE4:db 0ceh,0b3h,0b6h,0c8h;纬度
;以下为串口写指令和数据的子程序:
WRITE_COM:LCALL DELAY1 ;INSTEAD OF CHECKING BF STATE
          PUSH ACC
          MOV R0,#8
          MOV A,#11111000B
    COMM1:CLR C
          RLC A
          MOV RW,C
          CLR E
          SETB E
          DJNZ R0,COMM1
          POP ACC
          MOV R5,A
          ANL A,#0F0H
          MOV R0,#8
   COMM2: CLR C
          RLC A
          MOV RW,C
          CLR E
          SETB E
          DJNZ R0,COMM2
          MOV A,R5
          SWAP A
          ANL A,#0F0H
          MOV R0,#8
   COMM3: CLR C
          RLC A
          MOV RW,C
          CLR E
          SETB E
          DJNZ R0,COMM3
          RET
;*******************************************
WRITE_DAT:LCALL DELAY1
          PUSH ACC
          MOV R0,#8
          MOV A,#11111010B
DATA1: CLR C
       RLC A
       MOV RW,C
       CLR E
       SETB E
       DJNZ R0,DATA1
       POP ACC
       MOV R5,A
       ANL A,#0F0H
       MOV R0,#8
DATA2: CLR C
       RLC A
       MOV RW,C
       CLR E
       SETB E
       DJNZ R0,DATA2
       MOV A,R5
       SWAP A
       ANL A,#0F0H
       MOV R0,#8
DATA3: CLR C
       RLC A
       MOV RW,C
       CLR E
       SETB E
       DJNZ R0,DATA3
       RET
       END



⌨️ 快捷键说明

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