📄 gps.asm
字号:
;=============================================
;CS0接CS8255 CS1接CS50 8255PA0-PA7接DB0-DB7
;8255PC0接REQ 8255PC7接BUSY
;=============================================
P55A EQU 0CFA0H ;8255I/O
P55B EQU 0CFA1H
P55C EQU 0CFA2H
PCTR EQU 0CFA3H
STOBE0 EQU 70H ;PC0复位控制字
STOBE1 EQU 71H ;PC0置位控制字
ADDR1 EQU 0CFA8H ;8250
ADDR2 EQU 0CFA9H
INTR EQU 0CFAAH
LCR EQU 0CFABH
MCR EQU 0CFACH
LSR EQU 0CFADH
MSR EQU 0CFAEH
;=============================================
STSF EQU 20H
TIME EQU 30H
DPHR EQU 31H
DPLR EQU 32H
ADRX EQU 33H
ADRY EQU 34H
CNTB EQU 35H
BUF EQU 36H
;=============================================
RIF EQU 00H ;STSF BIT
TIF EQU 04H
;=============================================
ORG 4000H
LJMP START
;=============================================
ORG 4100H
START: MOV DPTR,#LCR
MOV A,#80H
MOVX @DPTR,A
MOV DPTR,#ADDR1
MOV A,#18H
MOVX @DPTR,A
MOV DPTR,#ADDR2
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#LCR
MOV A,#7
MOVX @DPTR,A
MOV DPTR,#ADDR2
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#LSR
MOVX A,@DPTR
MOV DPTR,#ADDR1
MOVX A,@DPTR
;ACALL SPFST
;ACALL SSTOP
;ACALL SPFST
;ACALL SSURV1
;ACALL SPFST
;ACALL SPPS
;ACALL SPFST
;ACALL SSTART
MAIN: MOV TIME,#6
MOV DPHR,#50H
MOV DPLR,#00H
REC0: MOV DPTR,#LSR
TSTST: MOVX A,@DPTR
MOV STSF,A
JBC RIF,TSTOK
AJMP TSTST
TSTOK: MOV DPTR,#ADDR1
MOVX A,@DPTR
CJNE A,#24H,REC0
MOV DPH,DPHR
MOV DPL,DPLR
MOVX @DPTR,A
INC DPLR
JNZ RXACK
INC DPHR
RXACK: MOV DPTR,#LSR
RACK: MOVX A,@DPTR
MOV STSF,A
JBC RIF,REC1 ;接收呼叫信号
SJMP RACK
REC1: MOV DPTR,#ADDR1
MOVX A,@DPTR
MOV DPL,DPLR
MOV DPH,DPHR
MOVX @DPTR,A
INC DPLR
MOV A,DPLR
JNZ REC2
INC DPHR
REC2: MOVX A,@DPTR
CJNE A,#10,RXACK
DEC TIME
MOV A,TIME
jnz REC0
DIS: mov TIME,#6
mov DPLR,#0
mov DPHR,#50h
MOV DPTR,#PCTR
MOV A,#88H
MOVX @DPTR,A ;置PA口输出,PC口高4位输入,低4位输出
MOV DPTR,#PCTR
MOV A,#STOBE0
MOVX @DPTR,A
MOV A,#0F4H
ACALL WRTB
ACALL DELAY ;清屏
WRT0: MOV ADRX,#0
MOV ADRY,#0
MOV DPH,DPHR
MOV DPL,DPLR
MOVX A,@DPTR
CLR C
SUBB A,#'$'
JZ WRITE
INC DPLR
MOV A,DPLR
JNZ WRT0
INC DPHR
AJMP WRT0
WRITE: MOV CNTB,#40H
MOV DPH,DPHR
MOV DPL,DPLR
MOVX A,@DPTR
CLR C
SUBB A,#0DH
JZ WRTOK
CALL WRT1
MOV DPH,DPHR
MOV DPL,DPLR
MOVX A,@DPTR
CJNE A,#'$',NEXT
LJMP WRTOK
NEXT: MOV A,ADRX
ANL A,#0FH
JNZ WRITE
MOV ADRX,#0
MOV A,ADRY
ADD A,#8
MOV ADRY,A
CJNE A,#20H,WRITE
WRTWT: MOV R3,#20h
WT1: LCALL DELAY
DJNZ R3,WT1
MOV DPTR, #PCTR
MOV A, #88H
MOVX @DPTR, A ;置PA口输出,PC口高4位输入,低4位输出
MOV DPTR, #PCTR
MOV A, #STOBE0
MOVX @DPTR, A
MOV A, #0F4H
ACALL WRTB
ACALL DELAY
MOV ADRX,#0
MOV ADRY,#0
AJMP WRITE
WRTOK: MOV R3,#40h
OK1: LCALL DELAY
DJNZ R3,OK1
DJNZ TIME,WRT0
LJMP MAIN
;=============================================
SEND: MOV BUF,A
MOV DPTR,#LSR
WTSD: MOVX A,@DPTR
CJNE A,20H,SDOK
;CLR C
;SUBB A,#20H
;JNZ SDOK
;MOV STSF,A
;JBC TIF,SDOK
AJMP WTSD
SDOK: MOV DPTR,#ADDR1
MOV A,BUF
MOVX @DPTR,A
RET
;=============================================
RECV: MOV DPTR,#LSR
WTRC: MOVX A,@DPTR
MOV STSF,A
JBC RIF,RCOK
AJMP RECV
RCOK: MOV DPTR,#ADDR1
MOVX A,@DPTR
MOV BUF,A
RET
;=============================================
WRT1: ACALL BUSY
MOV A,#0F1H
ACALL WRTB
ACALL BUSY
MOV A,ADRX
ACALL WRTB
INC ADRX
ACALL BUSY
MOV A,ADRY
ACALL WRTB
ACALL BUSY
MOV DPH,DPHR
MOV DPL,DPLR
INC DPLR
MOVX A,@DPTR
ACALL WRTB
RET
;=============================================
BUSY: MOV DPTR,#P55C
MOVX A,@DPTR
JB ACC.7,BUSY
RET
;=============================================
DELAY: MOV R4,#0
MOV R5,#0
DLY: DJNZ R4,DLY
DJNZ R5,DLY
RET
;=============================================
WRTB: MOV DPTR, #P55A
MOVX @DPTR, A
MOV DPTR, #PCTR
MOV A, #STOBE1
MOVX @DPTR, A
WAIT: MOV DPTR, #P55C
MOVX A, @DPTR
JNB ACC.7, WAIT
MOV DPTR, #PCTR
MOV A, #STOBE0
MOVX @DPTR, A
RET
;=============================================
SPFST: MOV A,#'$'
ACALL SEND
MOV A,#'P'
ACALL SEND
MOV A,#'F'
ACALL SEND
MOV A,#'S'
ACALL SEND
MOV A,#'T'
ACALL SEND
MOV A,#','
ACALL SEND
RET
;=============================================
SSTOP: MOV A,#'S'
ACALL SEND
MOV A,#'T'
ACALL SEND
MOV A,#'O'
ACALL SEND
MOV A,#'P'
ACALL SEND
;=============================================
SCRLF: MOV A,#0DH
ACALL SEND
MOV A,#0AH
ACALL SEND
RET
;=============================================
SSURV1: MOV A,#'S'
ACALL SEND
MOV A,#'U'
ACALL SEND
MOV A,#'R'
ACALL SEND
MOV A,#'V'
ACALL SEND
MOV A,#'E'
ACALL SEND
MOV A,#'Y'
ACALL SEND
MOV A,#'L'
ACALL SEND
MOV A,#'E'
ACALL SEND
MOV A,#'N'
ACALL SEND
MOV A,#','
MOV A,#'1'
ACALL SEND
ACALL SCRLF
RET
;=============================================
SPPS: MOV A,#'P'
ACALL SEND
MOV A,#'P'
ACALL SEND
MOV A,#'S'
ACALL SEND
MOV A,#'M'
ACALL SEND
MOV A,#'O'
ACALL SEND
MOV A,#'D'
ACALL SEND
MOV A,#'E'
ACALL SEND
MOV A,#','
ACALL SEND
MOV A,#'1'
ACALL SEND
ACALL SCRLF
RET
;=============================================
SSTART: MOV A,#'S'
ACALL SEND
MOV A,#'T'
ACALL SEND
MOV A,#'A'
ACALL SEND
MOV A,#'R'
ACALL SEND
MOV A,#'T'
ACALL SEND
ACALL SCRLF
RET
;=============================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -