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

📄 pic16f874controlgpsrx.txt

📁 用PIC16F84控制GPS接收机的源代码
💻 TXT
字号:
; 用PIC16F874单片机进行GPS串口数据接收 
;********************************************************** 
  ; THIS IS A GPS RECEIVER PROGRAM * 
  ;********************************************************** 
  LIST P=16F874 
  INCLUDE P16F874.INC 
  ;*******寄存器定义 ******************** 
  TEMP1 EQU 0X27 
  W_TEMP EQU 0X54 
  STATUS_TEMP EQU 0X55 
  LONG1 EQU 0X40 ;LONG1--- LONG10经度的10位数据 
  LONG2 EQU 0X41 
  LONG3 EQU 0X42 
  LONG4 EQU 0X43 
  LONG5 EQU 0X44 
  LONG6 EQU 0X45 
  LONG7 EQU 0X46 
  LONG8 EQU 0X47 
  LONG9 EQU 0X48 
  LONG10 EQU 0X49 
  T1 EQU 0X58 ;T1---T6时间的6位数据 
  T2 EQU 0X59 
  T3 EQU 0X60 
  T4 EQU 0X61 
  T5 EQU 0X62 
  T6 EQU 0X63 
  ;******************************************************** 
  ORG 00H 
  NOP 
  NOP 
  GOTO MAIN 
  ORG 04H ;设定按中端健才开始数据接受 
  NOP 
  NOP 
  GOTO INTERRUPT 
  ;*********判断头文件是不是‘$GPGGA’********** 
  IDMESSAGE 
  BCF STATUS,RP0 
  BREAK0 
  CALL PAND 
  MOVWF TEMP1 
  MOVLW ‘$‘ ;detect $ 
  SUBWF TEMP1,0 
  BTFSS STATUS,Z 
  GOTO BREAK0 
  CALL PAND 
  MOVWF TEMP1 
  MOVLW ‘G‘ ;detect G 
  SUBWF TEMP1,0 
  BTFSS STATUS,Z 
  GOTO BREAK0 
  CALL PAND 
  MOVWF TEMP1 
  MOVLW ‘P‘ ;detect P 
  SUBWF TEMP1,0 
  BTFSS STATUS,Z 
  GOTO BREAK0 
  CALL PAND 
  MOVWF TEMP1 
  MOVLW ‘G‘ ;detect G 
  SUBWF TEMP1,0 
  BTFSS STATUS,Z 
  GOTO BREAK0 
  CALL PAND 
  MOVWF TEMP1 
  MOVLW ‘G‘ ;detect G 
  SUBWF TEMP1,0 
  BTFSS STATUS,Z 
  GOTO BREAK0 
  CALL PAND 
  MOVWF TEMP1 
  MOVLW ‘A‘ ;detect A 
  SUBWF TEMP1,0 
  BTFSS STATUS,Z 
  GOTO BREAK0 
  CALL PAND ;跳过逗号 
  RETURN 
  ;************接收函数****************** 
  RECEIVE 
  CALL PAND ;开始时间数据接收 
  MOVWF T1 
  CALL PAND 
  MOVWF T2 
  CALL PAND 
  MOVWF T3 
  CALL PAND 
  MOVWF T4 
  CALL PAND 
  MOVWF T5 
  CALL PAND 
  MOVWF T6 ;时间数据接收完成 
  CALL PAND ;跳过逗号 
  CALL PAND ;跳过10位纬度数据---开始 
  CALL PAND 
  CALL PAND 
  CALL PAND 
  CALL PAND 
  CALL PAND 
  CALL PAND 
  CALL PAND 
  CALL PAND 
  CALL PAND ;跳过10位纬度数据---结束 
  CALL PAND ;跳过逗号 
  CALL PAND ;跳过南/北纬判断位数据 
  CALL PAND ;跳过逗号 
  CALL PAND ;接受经度信号开始 
  MOVWF LONG1 
  CALL PAND 
  MOVWF LONG2 
  CALL PAND 
  MOVWF LONG3 
  CALL PAND 
  MOVWF LONG4 
  CALL PAND 
  MOVWF LONG5 
  CALL PAND 
  MOVWF LONG6 
  CALL PAND 
  MOVWF LONG7 
  CALL PAND 
  MOVWF LONG8 
  CALL PAND 
  MOVWF LONG9 
  CALL PAND 
  MOVWF LONG10 ;接受经度信号结束 
  RETURN 
  ;***************串口寄存器中是否数据***************** 
  PAND 
  BCF STATUS,RP0 
  CC BTFSS PIR1,5 
  GOTO CC 
  MOVF RCREG,0 
  RETURN 
  ;*****************中断函数*************************** 
  INTERRUPT 
  BCF INTCON,7 ;SET GIE=0屏蔽所有中端 
  BCF STATUS,RP0 
  BCF RCSTA,1 ;清除溢出错误位 
  BSF STATUS,RP0 
  BCF TXSTA,2 ;BRGH=0 Low speed 
  BCF TXSTA,4 ;Set Asynchronous mode 
  MOVLW 0X0C 
  MOVWF SPBRG ;设置波特率为4800 
  BCF STATUS,RP0 
  MOVLW B‘10010000‘ 
  MOVWF RCSTA ;串口接收相关设置 
  BSF STATUS,RP0 
  BSF OPTION_REG,6 ; RB0/INT 引脚上升沿中断 
  MOVWF W_TEMP 
  SWAPF STATUS,W 
  BCF STATUS,RP0 
  MOVWF STATUS_TEMP 
  BCF STATUS,RP0 
  CALL IDMESSAGE 
  CALL RECEIVE 
  BCF STATUS,RP0 
  CLRF RCSTA ;清除串口设置 
  CALL CONVERT ;调用时间转换函数 
  OUT BCF STATUS,RP0 ;跳出中断部分,恢复寄存器 
  SWAPF STATUS_TEMP,W 
  MOVWF STATUS 
  SWAPF W_TEMP,F 
  SWAPF W_TEMP,W 
  BSF INTCON,7 ;SET GIE=1允许所有中端 
  NOP 
  RETFIE 
  ;************ 格林威治时间转换为北京时间****************** 
  CONVERT 
  MOVLW A‘0‘ 
  SUBWF T2,1 
  SUBWF T1,1 
  MOVLW D‘10‘ 
  MOVWF TEMP1 
  LOOP1 MOVF TEMP1,0 
  MOVF TEMP1,1 
  BTFSS STATUS,Z 
  GOTO ADD10 
  MOVLW D‘8‘ 
  ADDWF T2,1 
  MOVLW D‘24‘ 
  SUBWF T2,1 
  BTFSC STATUS,C 
  GOTO CON1 
  ADDWF T2,1 
  GOTO CON1 
  CON1 MOVLW D‘20‘ 
  MOVWF TEMP1 
  SUBWF T2,0 
  BTFSS STATUS,C 
  GOTO CON2 
  MOVWF T2 
  MOVLW 0X02 
  MOVWF T1 
  GOTO HALT1 
  CON2 MOVLW D‘10‘ 
  MOVWF TEMP1 
  SUBWF T2,0 
  BTFSS STATUS,C 
  GOTO CON3 
  MOVWF T2 
  MOVLW 0X01 
  MOVWF T1 
  GOTO HALT1 
  CON3 MOVLW 0X00 
  MOVWF T1 
  HALT1 MOVLW A‘0‘ 
  ADDWF T1,1 
  ADDWF T2,1 
  RETURN 
  ADD10 MOVF T1,0 
  ADDWF T2,1 
  DECF TEMP1,1 
  GOTO LOOP1 
  RETURN 
  ;******************MAIN*********************** 
  MAIN 
  BCF STATUS,RP0 
  MOVLW B‘10010000‘ 
  MOVWF INTCON ;打开中断 
  LOOP NOP 
  BCF STATUS,RP0 
  GOTO LOOP 
  GOTO MAIN 
  END  

⌨️ 快捷键说明

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