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

📄 gps.asm

📁 一个自行设计的GPS的出租车使用的程序源代码。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
C100MS          EQU     57H     ;用于100MS 定时
C500MS          EQU     58H     ;用于500MS定时
C1000MS         EQU     59H     ;用于1000MS,1S 定时
TEMPCALLNUM     EQU     5AH     ;已拨电话条数
TEMPCALLPN      EQU     5BH     ;已拨电话指针
CNTNOKEYPRESS   EQU     5CH     ;在无键按下30秒钟后,检查显示状态,进入GPS和徽标状态
CALLLEN         EQU     5DH     ;电话号码长度
BKLEDCNT        EQU     5EH     ;液晶背光秒计数器
BUZZTYPE        EQU     5FH     ;有按键报响计数器
INTSYSCOUNT     EQU     60H     ;系统设置计数器
DEALYCNT        EQU     61H     ;延时
KEYOKVALUE      EQU     62H     ;按键有效键值
CNTDISDLY       EQU     63H     ;显示时状态切换延时秒计数器
PROGSTAT    	EQU	64H	;显示状态(菜单或输入)
LISTENTIME	EQU	65H     ;监听的时间存储区
HZK3ADR		EQU	66H
DISPBYTE	EQU	67H
TXCNT		EQU	68H     ;发送延时
DISPTEM		EQU     69H
TEMP1		EQU     6AH
TEMP2		EQU	6BH
TXBUF		EQU     6CH     ;串口数据发送缓冲区
C10000MS        EQU     6DH     ;用于10S定时
TXBUFAD         EQU     6EH     ;串口地址缓冲区
SCANVHH		EQU	6FH	;高电平捕捉高位
SCANVHL		EQU	70H	;高电平捕捉低位
SCANVLH		EQU	71H	;低电平捕捉高位
SCANVLL		EQU	72H	;低电平捕捉低位
KEYVH 		EQU 	73H
KEYVL 		EQU 	74H
POSROW		EQU	75H	;保存行值
POSCOL		EQU	76H	;保存列值
SLA		EQU     77H     ;EPPROM的硬件地址
MUMEBYTE	EQU 	78H	;菜单计数
MESSLEN         EQU	79H	;短信长度
S0TEMP		EQU	7AH     ;串口运行变量
RDEPNUM		EQU	7BH	;报警按键计数
WARNTIME	EQU	7CH	;报警响应间隔时间
WARNTXNUM       EQU     7EH     ;报警呼叫计次
Music_Times     EQU     7FH     ;提示音的长度
;CAT24C256硬件地址--U6的地址:  读(A3H)写(A2H)U7的地址:
;读(A1H)写(A0H) ;IC的地址: 读(A5H)写(A4H)
;-------------------------------------------------
; 高128字节分配 #80H-FFH
;-------------------------------------------------
;80~AFH 为加密数据时的缓冲区
;B0~BF 为固定信息指针存放区
 CALLNUM        EQU      0B0H
 CALLPN         EQU      0B1H
 PHRNUM         EQU      0B2H
 PHRPN          EQU      0B3H
;0C0H 开始的16个字节为ASC电话号码处理区
;0D0H 开始的16个字节为BCD码电话处理区
;-------------------------------------------------
; IC 24C64地址 #0000H-1FFFH (共8K的地址空间)
;硬件地址:A0[写]、A1[读]:SLA=EEPRADR1=A0
;-------------------------------------------------
;司机身份IC卡存储分布
CARDID          EQU     0000H   ;保存IC卡ID的开始地址
ICDRIVERIDADDR	EQU	0001H   ;目前共4个字节
ICFENCEADDR     EQU     0348H   ;共17个字节
ICGPSDATAPN     EQU     035CH   ;GPS条数和指针的起始地址
ICSAVEGPS	EQU     0360H   ;运行信息存储的起始地址
;-------------------------------------------------
; EEPROM 24C64地址 #0000H-1FFFH (共8K的地址空间)
;硬件地址:A2[写]、A3[读]:SLA=EEPRADR2=A2
;-------------------------------------------------
STABYTE 	EQU	0080H	;保存汽车状态(共3个字节)(报警,锁车,关闭单元|打开单元,枪毙|复活,空车|重车)
FENCEADDR       EQU     0083H   ;电子围栏数据存放地址
MESSADDR   	EQU  	0100H  	;短消息存放地址(0100H~1501H)   (40*128+2)=1402H
GMESSADDR       EQU     1520H   ;固定信息存放地址(1520H~168AH) (18*20+2)=16AH
CALLADDR 	EQU     16A0H	;电话号码(16A0H~180AH)       (18*20+2)=16AH
TEMPCALLADDR1	EQU	1820H	;已拨电话(1820H~198AH)       (18*10+2)=16AH
TEMPCALLADDR2	EQU	19A0H	;已拨电话时间(19A0~1B0AH)   (18*10+2)=16AH
;-------------------------------------------------
; EEPROM 24C64地址 #0000H-1FFFH (共8K的地址空间)
;硬件地址:A6[写]、A7[读]:SLA=EEPRADR3=A6
;-------------------------------------------------
EPGPSFRAME_PN   EQU     0000H	;在EPPROM中GPS数据的长度和指针
GPSFRAME        EQU     0020H	;定时或不定时或设定保存GPS数据帧[32个字节为一帧]
EPRGPSADDR      EQU     0020H   ;保存运行信息的起始地址
;每一帧GPS数据长度为:32个字节[1页]
;数据格式:帧头[1]|日期时间[6]|纬度[4]|经度[4]|海拔高度[4]|速度[2]|方位角[2]|
;+中心指令[1]+本地状态[1]+二级状态[1]+0FFH+0DH         
;*****************************************************************************************************
          ORG     0000h
          LJMP    MAINFUN    	;R0..R7 <--> 00H..07H , 10H..17H
          ORG     000BH  	;内部时钟中断0
          LJMP    CT0ST   	;R0..R7 <--> 08H..0FH
          ORG     0023H
          LJMP    TXRX
          ORG	  0033H
          LJMP    PCASERVE
;===================外部中断报警功能模块INT0======================
;****************************************************************
;程 序 名  :  CARWARN                              	        *
;功      能:  串口中断服务程序                   		*
;占用寄存器:  ACC, B, DPTR                                      *
;工作寄存器:  RDEPNUM 						*
;位标志变量:  WARNBIT,STACHGBIT					*
;缓 冲 区  :  TAXISTATUS       					*
;子程序编号:  [此功能被屏蔽,改为扫描工作方式]                  *
;****************************************************************
CARWARN: JB     INTSYS,WARNEXIT
	 JB     WARNBIT,WARNEXIT;正在报警
	 MOV  	A,RDEPNUM       ;初始化=0FFH
	 XRL  	A,#2
	 JZ  	RUNWARN
	 INC  	RDEPNUM
         LJMP 	WARNEXIT
RUNWARN:
	 MOV    RDEPNUM,#0 	;报警计时计次
	 MOV    WARNTXNUM,#100
	 SETB   WARNBIT
	 SETB   STACHGBIT
WARNEXIT:
	 RETI
;===================PCA中断服务程序模块========================
;****************************************************************
;程 序 名  :  PCASERVE                              	        *
;功      能:  PCA中断服务程序                   		*
;占用寄存器:  ACC, B, DPTR                                      *
;工作寄存器:  RXBUF, Port0_Rx_PN, Port1_Rx_PN,Port1_Rx_PN       *
;位标志变量:  RXBITG,RXBITF,RXGPSOKBIT,RXFC201OKBIT             *
;缓 冲 区  :  Port0_RxBuff,Port1_RxBuff,Port2_RxBuff            *
;子程序编号:                                                    *
;****************************************************************
PCASERVE:
	 PUSH	PSW
         JNB	CCF3,PCAEXIT
         CLR 	CCF3
         JB	KEYDNBIT,PCAEXIT
         JB	SCANBIT,PCASERVE1
         CLR    CR
         MOV 	CCAPM3,#21H		;正跳变触发中断
         SETB	CR
         SETB 	SCANBIT
         LJMP	PCAEXIT
PCASERVE1:
	 JB	INSCANBIT,PCASERVE2
	 CLR	CR
	 MOV	CCAPM3,#11H		;负跳变触发中断
	 MOV    CH,#0
	 MOV    CL,#0
	 SETB	CR
	 SETB   INSCANBIT
	 LJMP   PCAEXIT
PCASERVE2:
         JB     SCANVHBIT,PCASERVE3
         CLR	CR
         MOV	CCAPM3,#21H		;正跳变触发中断
         MOV    CH,#0
         MOV    CL,#0
         SETB	CR
         MOV	SCANVHH,CCAP3H
         MOV	SCANVHL,CCAP3L
         SETB	SCANVHBIT
         LJMP	PCAEXIT
PCASERVE3:
	 MOV	SCANVLH,CCAP3H
         MOV	SCANVLL,CCAP3L
         SETB	KEYDNBIT
PCAEXIT: CLR    KEYUPBIT
         MOV	CCON,#0
         SETB   CR
         POP    PSW
         RETI
;===================串口中断服务程序模块========================
;****************************************************************
;程 序 名  :  TXRX                              	        *
;功      能:  串口中断服务程序                   		*
;占用寄存器:  ACC, B, DPTR                                      *
;工作寄存器:  RXBUF, Port0_Rx_PN, Port1_Rx_PN,Port1_Rx_PN       *
;位标志变量:  RXBITG,RXBITF,RXGPSOKBIT,RXFC201OKBIT             *
;缓 冲 区  :  Port0_RxBuff,Port1_RxBuff,Port2_RxBuff            *
;子程序编号:                                                    *
;****************************************************************
;----------------------串口中断子程序----------------------------
TXRX:
        JB   	RI,UARTREVDATA   ;接收中断,JMP
        CLR  	TI               ;发送中断,返回
        CLR     F0
TXRXE:  RETI
TXRXRE:
        CLR  	TI
        CLR  	RI               ;发送中断,返回
        RETI
;******************
;串口接收程序     *
;******************
UARTREVDATA:
        PUSH 	PSW
        PUSH	ACC
        PUSH    B
        PUSH	DPH
        PUSH 	DPL
	CLR     RI
	LCALL   WDOG
	MOV     RXBUF,SBUF
	MOV     A,P1
	ANL     A,#0CH
	RR      A
	RR      A
	MOV     B,A
	XRL     A,#00H
	JNZ     UARTPORT1
	LJMP    RXFC201          ;接收FC201电台数据
UARTPORT1:
	MOV     A,B
	XRL     A,#01H
	JNZ     UARTPORT2
	LCALL   WDOG
	LJMP    RXGPS            ;接收GPS数据子程序
UARTPORT2:
        MOV     A,B
        XRL     A,#02H
        JNZ     RXEXIT
        LCALL   WDOG
        LJMP    RXXDJDATA        ;接收计价器数据
RXEXIT:
        POP     DPL
        POP     DPH
        POP     B
        POP     ACC
        POP     PSW
        RETI
;**********************************
;串口0接收中心指令程序
;**********************************
RXFC201:JB      RXFC201OKBIT,RXEXIT
	MOV     A,RXBUF
	JB      RXBITF,RXFC201_1    ;检测进来的数据帧头
	XRL     A,#7EH
	JNZ     RXFC201E
	SETB    RXBITF	            ;找到帧头,是有效数据帧
	MOV     Port0_Rx_PN,#00H    ;复位fc201缓冲区的指针
	MOV     DPTR,#Port0_RxBuff
	MOV     A,#7EH
	MOVX    @DPTR,A
	INC     Port0_Rx_PN
RXFC201E:
	LJMP    RXEXIT
RXFC201_1:
	MOV    DPTR,#Port0_RxBuff
        CLR    C
        MOV    A,DPL
        ADD    A,Port0_Rx_PN
        MOV    DPL,A
        MOV    A,#0
        ADDC   A,DPH
        MOV    DPH,A
        MOV    A,RXBUF
        MOVX   @DPTR,A
        INC    Port0_Rx_PN
        MOV    A,RXBUF
        XRL    A,#0dH
        JZ     RXFC201END
        LJMP   RXEXIT
RXFC201END:
        SETB   RXFC201OKBIT
        SETB   RADIOMODBIT
        MOV    INNETCNT,#36                ;初始化在网计数器
        CLR    RXBITF
        LJMP   RXEXIT
;***********************
;串口1接收GPS数据的程序*
;***********************
RXGPS:
	JB      RXGPSOKBIT,RXEXIT
	LCALL   WDOG
	MOV     A,RXBUF
	JB      RXBITG,RXGPS1
	XRL     A,#'$'
	JNZ     RXGPSE
	SETB    RXBITG
	MOV     Port1_Rx_PN,#00H            ;复位GPS缓冲区的指针
	MOV     DPTR,#Port1_RxBuff
	MOV     A,#'$'
	MOVX    @DPTR,A
	INC     Port1_Rx_PN
RXGPSE: LCALL   WDOG
	LJMP    RXEXIT
RXGPS1: MOV     DPTR,#Port1_RxBuff
        CLR     C
        MOV     A,DPL
        ADD     A,Port1_Rx_PN
        MOV     DPL,A
        MOV     A,#0
        ADDC    A,DPH
        MOV     DPH,A
        MOV     A,RXBUF
        MOVX    @DPTR,A
        INC     Port1_Rx_PN
        MOV     A,Port1_Rx_PN
        CJNE    A,#72,RXGPS2   ;a>=72:c=0;<72;c=1
        LJMP    RXGPSEND
RXGPS2: 
	JC      RXGPS3        ;C=1转
	LJMP    RXGPSEND
;       LJMP    RXEXIT
RXGPS3: MOV     A,RXBUF
        XRL     A,#0AH
        JZ      RXGPSEND
        LJMP    RXEXIT
RXGPSEND:
      	SETB	GPSMODBIT
      	CLR     RXBITG
      	SETB    RXGPSOKBIT
      	LJMP    RXEXIT
;**************************
;串口2接收计价器数据的程序*
;**************************
PORT2_EXIT:
	LJMP    RXEXIT
RXXDJDATA:
	JB      RXXDJOKBIT,PORT2_EXIT
	LCALL   WDOG
	MOV	A,RXBUF
	JB	RXXDJBIT,RXXDJSTART
	XRL     A,#0AAH
	JNZ     RXXDJE
	SETB    RXXDJBIT
	MOV     DPTR,#PORT2RX_PN
	MOV     A,#00H
	MOVX    @DPTR,A
	MOV     DPTR,#PORT2_RXBUFF
	MOV     A,#0AAH
	MOVX    @DPTR,A
	MOV     DPTR,#PORT2RX_PN
	MOVX    A,@DPTR
	INC     A
	MOVX    @DPTR,A
	LJMP    RXEXIT
RXXDJSTART:
	LCALL   WDOG
	MOV     DPTR,#PORT2_RXBUFF
	CLR     C
	MOV     R0,DPL
	MOV     R1,DPH
	MOV     DPTR,#PORT2RX_PN
	MOVX    A,@DPTR
	ADD     A,R0
	MOV     R0,A
	MOV     A,#0
	ADDC    A,R1
	MOV     R1,A
	MOV     DPL,R0
	MOV     DPH,R1
	MOV     A,RXBUF
	MOVX    @DPTR,A
	MOV     DPTR,#PORT2RX_PN
	MOVX    A,@DPTR
	INC     A
	MOVX    @DPTR,A
	MOV     A,RXBUF
	XRL     A,#0CCH
	JZ	RXXDJEND
	LJMP	RXEXIT
RXXDJEND:
	SETB    RXXDJOKBIT
	CLR     RXXDJBIT
	LJMP    RXEXIT
RXXDJE:	
	LJMP    RXEXIT
;================定时中断服务程序模块区==========================
;****************************************************************
;程 序 名  :  CT0ST                              	        *
;功      能:  定时中断服务程序                   		*
;占用寄存器:  ACC, B, DPTR                                      *
;工作寄存器:  RXBUF, Port0_Rx_PN, Port1_Rx_PN,Port2_Rx_PN       *
;位标志变量:  RXBITG,RXBITF,RXGPSOKBIT,RXFC201OKBIT             *
;缓 冲 区  :  Port0_RxBuff,Port1_RxBuff,Port2_RxBuff            *
;子程序编号:                                                    *
;****************************************************************
;-------------定时中断主程序----------------------
DONE_DONE:LJMP   DONE
CT0ST:
          PUSH  ACC
          PUSH  B
          PUSH  DPH
          PUSH  DPL
          PUSH  PSW
          CLR   TR0                         ;2MS
          LCALL WDOG
          LCALL CHECKWARN 		    ;扫描报警输入
CT0ST01:  JB    SCANBIT,CT0ST02
          LCALL SCANKEY                     ;检测当前键是否已经松开
CT0ST02:  JNB   KEYOK,CT0ST10
          LCALL KEYORDER                    ;处理按键命令          
;------------用于10MS定时---------
CT0ST10:  DJNZ  C10MS,DONE_DONE
          MOV   C10MS,#5
          JNB   RXGPSOKBIT,CT0ST11
          LCALL DEALGPSDATA          
CT0ST11:  JNB   RXFC201OKBIT,CT0ST12
          LCALL UNPAKFC201                 ;处理串口来的命令

⌨️ 快捷键说明

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