?? 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 + -