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

📄 gpstime1.asm

📁 GPS时钟系统,用W78E516B单片机,本程序接收GPS的$GPGGA信息中的时间数据
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;              GPS时钟系统            ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;用W78E516B单片机
;本程序接收GPS的$GPGGA信息中的时间数据,采用12MHZ晶振,4800波特率接收
;使用资源:R0、R1、R3、R5、R6、R7,定时器T2(作波特率发生器),20H单元
;显示缓冲单元在70H—75H,70H—71H显示秒,72H—73H显示分,74H—75H显示时
;时间接收数据在7AH—7BH(秒)、7CH—7DH(分)、7EH—7FH(时)
;
;定时器T2定义
                T2CON           EQU     0C8H    ; T2 控制寄存器
                T2MOD           EQU     0C9H    ;
                TL2             EQU     0CCH    ; T2 计数寄存器低字节
                TH2             EQU     0CDH    ; T2 计数寄存器高字节
                TR2             EQU     0CAH    ; T2 启动位
                RCAP2L          EQU     0CAH    ; T2 计数重栽寄存器低字节
                RCAP2H          EQU     0CBH    ; T2 计数重栽寄存器高字节
                SFLAG           BIT     00H     ;信息头标志OK
                G1FLAG          BIT     01H     ;G1 OK
                PFLAG           BIT     02H     ;P OK
                G2FLAG          BIT     03H     ;G2 OK
                G3FLAG          BIT     04H     ;G3 OK
                AFLAG           BIT     05H     ;A OK
                DFLAG           BIT     06H     ;, OK
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           中断入口程序              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
              ORG 0000H
                  LJMP      START
              ORG 0003H
                  RETI
              ORG 000BH
		  RETI
              ORG 0013H
		  RETI
	      ORG 001BH
		  RETI
	      ORG 0023H
		  LJMP      INTS
	      ORG 002BH
 		  RETI
;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;           主 程 序                 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
 start:         MOV     PSW, #00H               ; 设第0组寄存器
                MOV     SP, #50H                ; 设置堆栈指针
                MOV     SCON, #01010000B        ; 串口工作方式 1 (8 BIT UART) 允许接收
                MOV     T2CON, #00110000B       ; T2CON
                MOV     A,#0B2H
                MOV     TL2, A                  ;设置波特率 ( 4800)
                MOV     RCAP2L, A               ;
                MOV     A,#0FFH
                MOV     TH2, A                  ;
                MOV     RCAP2H, A               ;
        START1: MOV   R0,  #70H                 ;清70-7F内存单元
                MOV   R7,  #10H
    CLEARDISP:  MOV   @R0, #00H
                INC   R0
                DJNZ  R7,CLEARDISP
                MOV   20H,  #00H                ;清标志单元
                MOV     R0,#7FH                 ;GPS数据在78-7F内
                MOV     R3,#06H                 ;接收6个数据
                SETB    ES                      ; 允许串口中断
                MOV     IP, #00H                ; 低优先级
                SETB    REN                     ; 启动串口接收
                CLR     TI                      ; 清串口发送中断标志位
                CLR     RI                      ; 清串口接收中断标志位
                SETB    TR2                     ; 启动定时计数器 2
                SETB    EA                      ; 开放所有中断
        start2: LCALL DISPLAY
                SJMP  Start2
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           显示程序                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
          DISPLAY: MOV R1,#70H
                   MOV R5,#0FEH
             PLAY: MOV A,R5
                   MOV P2,A
                   MOV A,@R1
                   MOV DPTR,#TAB
                   MOVC A,@A+DPTR
                   MOV P0,A
                   LCALL DL1MS
                   INC R1
                   MOV A,R5
                   JNB ACC.5,ENDOUT
                   RL A
                   MOV R5,A
                   AJMP PLAY
           ENDOUT: MOV  P2,#0FFH
                   MOV  P0,#0FFH
                   RET
             TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
             RET
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           延时程序                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
             DL1MS: MOV R6,#14H
             DL1:   MOV R7,#19H
             DL2:   DJNZ R7,DL2
                    DJNZ R6,DL1
                    RET
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;          中断接收程序               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTS:       JBC  RI,RXINTS
            CLR  TI
            LJMP INTSOUT
;
RXINTS:     MOV  A,SBUF
            JB   DFLAG,DF       ;是$GPGGA,转AF接收时间数据
            JB   AFLAG,AF       ;判断是否是","
            JB   G3FLAG,G3F     ;判断是否是A
            JB   G2FLAG,G2F     ;判断是否是第三个G
            JB   PFLAG,PF       ;判断是否是第二个G
            JB   G1FLAG,G1F     ;判断是否是P
            JB   SFLAG,SF       ;判断是否是第一个G
            XRL  A,#24H         ;判断是否是“$”
            JZ   SYES
            MOV  20H,#00H       ;不是$,清所有标志
            LJMP INTSOUT
SYES:       SETB SFLAG          ;是$,设标志
            LJMP INTSOUT
;
;
SF:         XRL  A,#47H         ;是第一个“G”吗?
            JZ   G1YES           ;是G,转G1yes
            MOV  20H,#00H
            LJMP INTSOUT
G1YES:      SETB G1FLAG
INTSOUT:    RETI
;
G1F:         XRL  A,#50H         ;是“P”吗?
            JZ   PYES           ;是P,转Pyes
            MOV  20H,#00H
            LJMP INTSOUT
PYES:       SETB PFLAG
            LJMP INTSOUT
PF:         XRL  A,#47H         ;是第二个“G”吗?
            JZ   G2YES           ;是G,转G2yes
            MOV  20H,#00H
            LJMP INTSOUT
G2YES:      SETB G2FLAG
            LJMP INTSOUT
;
G2F:         XRL  A,#47H         ;是第三个“G”吗?
            JZ   G3YES           ;是G,转G3yes
            MOV  20H,#00H
            LJMP INTSOUT
G3YES:      SETB G3FLAG
            LJMP INTSOUT
;
G3F:         XRL  A,#41H         ;是“A”吗?
            JZ   AYES           ;是A,转Ayes
            MOV  20H,#00H
            LJMP INTSOUT
AYES:       SETB AFLAG
            LJMP INTSOUT
AF:         XRL  A,#2CH         ;是“,”吗?
            JZ   DYES           ;是",",转Dyes
            MOV  20H,#00H
            LJMP INTSOUT
DYES:       SETB DFLAG
            LJMP INTSOUT
;接收GPS时间数据,共6个字节,在7A-7F单元
DF:         MOV  @R0,A
            DEC  R0
            DJNZ R3,INTSOUT
            MOV  R3,#06H        ;数字ASCⅡ码转换成数字
            MOV  R0,#7AH
DF1:        MOV  A,@R0
            CLR  C
            SUBB A,#30H
            MOV  @R0,A
            INC  R0
            DJNZ R3,DF1
            MOV  A,7FH          ;格林时转换成北京时间(时加8)
            MOV  B,#10
            MUL  AB
            ADD  A,7EH
            ADD  A,#08H
            CLR  C
            CJNE A,#18H,DF2     ;是否大于24
DF2:        JC   DF3
            SUBB A,#18H         ;大于24减24
DF3:        MOV  B,#10          ;时十位、个位恢复为BCD码
            DIV  AB
            MOV  7FH,A
            MOV  7EH,B
            MOV  70H,7AH        ;将收到数据移入显示单元
            MOV  71H,7BH
            MOV  72H,7CH
            MOV  73H,7DH
            MOV  74H,7EH
            MOV  75H,7FH
            MOV  R3,#06H
            MOV  R0,#7FH
            MOV  20H,#00H
            LJMP INTSOUT
 ;
            END

⌨️ 快捷键说明

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