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

📄 gps.asm

📁 使用CYAN单片机的ECOG1开发板连接SIM300C的GSM模块开发的短信收发程序.供UART和AT指令编程者参考
💻 ASM
📖 第 1 页 / 共 5 页
字号:
; generated by Norcroft eCOG C Compiler V1.10 $BuildRevision$
; special options:  -g
;
	MODULE gps___gps
	.CODE
	.LARGE
	; TARGET_MAX_STACK_OVERRUN = 8
;/******************************************************************************
;MODE:		AML--#GPS+accelerator+compass
;MCU:		Cyan eCOG1k
;COMPILER:	CyanIDE v1.41
;FILE NAME:	GPS C source code files
;******************************************************************************/
;
;#define gps_code
;
;/******************************************************************************
;Project level include files.
;******************************************************************************/
;
;#include "gps.h"
;#include "cyan_base_driver.h"
;
;extern char			receive_temp_buf[20];
;extern unsigned int	receive_p;
;/******************************************************************************
;Declaration of static functions.
;******************************************************************************/
;int __irq_code _str_cmp(char *str1,char *str2);
;void gps_initialization(void);
;void __irq_code RMC_receive(void);
;void __irq_code GGA_receive(void);
;void __irq_code GSA_receive(void);
;void __irq_code GSV_receive(void);
;void __irq_code GPS_one_group_receive(void);
;void __irq_code GPS_STR_head_receive(void);
;
;void __irq_code GPS_data_transmit(void);
;void __irq_code GPS_transmit_one_byte(char *transmit_P);
;
;/******************************************************************************
;NAME
;    _str_cmp
;
;SYNOPSIS
;    int __irq_code _str_cmp(char *str1,char *str2)
;
;FUNCTION
;    Be invoked for interrupt function.
;    Compares the string pointed to by str1 to the string pointed to by str2.
;	Returns an integer 0(equal) or 1(not equal).
;
;RETURNS
;    0 or 1.
;******************************************************************************/
;int __irq_code _str_cmp(char *str1,char *str2)
;
$_str_cmp?:
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?49.1:
	st	AL,@(-1,Y)
	st	AH,@(-2,Y)
	st	XH,@(-4,Y)
	st	X,@(-3,Y)
	st	AL,@$?irq_scratchpad?+5	; %r2 (str1)
	st	AH,@$?irq_scratchpad?+4	; %r2 (str1)
Lstab?0c:
;{
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?50.1:
Lstab?1c:
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?51.1:
	ld	AL,#0
;	int cmp_value = 0;
;	while((*str1 != '\0') || (*str2 != '\0'))
	st	AL,@$?irq_scratchpad?+7	; %r3 (cmp_value)
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?52.1:
	add	Y,#-4
Lstab?2a:
?L5F1:
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?52.1:
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,@$?irq_scratchpad?+5	; %r2 (str1)
	ld	AH,@$?irq_scratchpad?+4	; %r2 (str1)
	movax
	ld.bu	AL,@(0,X)
	bne	?L7F1
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?52.1:
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,@(5,Y)	; %r35 (str2)
	ld	AH,@(4,Y)	; %r35 (str2)
	movax
	ld.bu	AL,@(0,X)
	beq	?L6F1
?L7F1:
;	{
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?53.1:
;		if(*str1 != *str2) break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?54.1:
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,@$?irq_scratchpad?+5	; %r2 (str1)
	ld	AH,@$?irq_scratchpad?+4	; %r2 (str1)
	movax
	ld.bu	AH,@(0,X)
	st	AH,@$?irq_scratchpad?+9	; %r4
	ld	AL,@(5,Y)	; %r35 (str2)
	ld	AH,@(4,Y)	; %r35 (str2)
	movax
	ld.bu	AL,@(0,X)
	cmp	AL,@$?irq_scratchpad?+9	; %r4
	beq	?L11F1
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?54.1:
	bra	?L6F1
?L11F1:
;		else
;		{		
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?56.1:
;			str1++;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?57.1:
	ld	AL,@$?irq_scratchpad?+5	; %r2 (str1)
	ld	AH,@$?irq_scratchpad?+4	; %r2 (str1)
	add	AL,#1
	addc	AH,#0
;			str2++;
	st	AL,@$?irq_scratchpad?+5	; %r2 (str1)
	st	AH,@$?irq_scratchpad?+4	; %r2 (str1)
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?58.1:
	ld	AL,@(5,Y)	; %r35 (str2)
	ld	AH,@(4,Y)	; %r35 (str2)
	add	AL,#1
	addc	AH,#0
	st	AL,@(5,Y)	; %r35 (str2)
	st	AH,@(4,Y)	; %r35 (str2)
	bra	?L5F1
?L6F1:
;		}
;	}
;	if((*str1 == '\0') && (*str2 == '\0')) cmp_value = 0;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?61.1:
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,@$?irq_scratchpad?+5	; %r2 (str1)
	ld	AH,@$?irq_scratchpad?+4	; %r2 (str1)
	movax
	ld.bu	AL,@(0,X)
	bne	?L18F1
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?61.1:
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,@(5,Y)	; %r35 (str2)
	ld	AH,@(4,Y)	; %r35 (str2)
	movax
	ld.bu	AL,@(0,X)
	bne	?L18F1
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?61.1:
	ld	AL,#0
	st	AL,@$?irq_scratchpad?+7	; %r3 (cmp_value)
	bra	?L21F1
?L18F1:
;	else cmp_value = 1;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?62.1:
	ld	AL,#1
	st	AL,@$?irq_scratchpad?+7	; %r3 (cmp_value)
?L21F1:
;	return(cmp_value);
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?63.1:
	ld	AL,@$?irq_scratchpad?+7	; %r3 (cmp_value)
?L24F1:
	add	Y,#4
	ld	XH,@(-4,Y)
	bra	@(-3,Y)
Lstab?3c:
;
;}
;
;
;
;/******************************************************************************
;NAME
;    usr_rx_handler
;
;SYNOPSIS
;    void __irq_entry usr_rx_handler(void)
;
;FUNCTION
;    Interrupt handler for usr receive ready
;    Receive one byte data from GPS mode.
;
;RETURNS
;    Nothing.
;******************************************************************************/
;
;void __irq_entry usr_rx_handler(void)
;
$usr_rx_handler??:
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?83.1:
	st	flags,@(-37,Y)
	st	XH,@(-36,Y)
	st	X,@(-35,Y)
	st	AH,@(-34,Y)
	st	AL,@(-33,Y)
	ld	AL,@(-37,Y)
	or	AL,#16
	st	AL,@(-37,Y)
Lstab?4c:
;{
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?84.1:
Lstab?5c:
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?86.1:
	ld	AL,@$fd+H'4
	asr	#3
	and	AL,#1
;	
;	int test = fd.duart.a_sts.rx_1b_rdy;		// Read rx interrupt status register
;	
;	test += fd.duart.a_sts.rx_act;				// Ensure that the receiver is currently inactive.
	st	AL,@(-38,Y)	; %r16 (test)
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?88.1:
	ld	AL,@$fd+H'4
	asr	#13
	and	AL,#1
	add	AL,@(-38,Y)	; %r16 (test)
;	if (1 == test)								// Received character ready?
	st	AL,@(-38,Y)	; %r16 (test)
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?89.1:
	add	Y,#-39
Lstab?6a:
	ld	AH,@(1,Y)	; %r16 (test)
	cmp	AH,#1
	bne	?L10F2
;	{
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?90.1:
;		c = rg.duart.a_rx;					// Yes, read receive register
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?91.1:
	ld	AL,@$rg+H'a
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,#lwrd(2*$c)
	ld	AH,#hwrd(2*$c)
	movax
	st	AL,@$?irq_scratchpad?+5	; %r2
	st	AH,@$?irq_scratchpad?+4	; %r2
	ld	AL,@$?irq_scratchpad?+1	; %r0
	st.b	AL,@(0,X)
;		if(c >= '\x80') goto usr_rx_handler_end;// If Receive value isn't ASCII,abandon current value.
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?92.1:
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,#lwrd(2*$c)
	ld	AH,#hwrd(2*$c)
	movax
	st	AL,@$?irq_scratchpad?+5	; %r2
	st	AH,@$?irq_scratchpad?+4	; %r2
	ld.bu	AL,@(0,X)
	cmp	AL,#'\x80'
	blt	?L7F2
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?92.1:
	bra	?L9F2
?L7F2:
;		
;		switch(c)								// Judge receive value.
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?94.1:
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,#lwrd(2*$c)
	ld	AH,#hwrd(2*$c)
	movax
	st	AL,@$?irq_scratchpad?+5	; %r2
	st	AH,@$?irq_scratchpad?+4	; %r2
	ld.bu	AL,@(0,X)
	cmp	AL,#10
	beq	?L14F2
	cmp	AL,#13
	beq	?L13F2
	cmp	AL,#36
	beq	?L12F2
	bra	?L11F2
?L12F2:
;				checksum = 0;					// Start count checksum;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?97.1:
	ld	AL,#0
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,#lwrd(2*$checksum)
	ld	AH,#hwrd(2*$checksum)
	movax
	st	AL,@$?irq_scratchpad?+5	; %r2
	st	AH,@$?irq_scratchpad?+4	; %r2
	ld	AL,@$?irq_scratchpad?+1	; %r0
	st.b	AL,@(0,X)
;				receive_buffer_count = 0;		// CLR receive character counter.
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?98.1:
	ld	AL,#0
	st	AL,@$receive_buffer_count
;				str_head_flag = _GPHAD_;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?99.1:
	ld	AL,#6
	st	AL,@$str_head_flag
;				break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?100.1:
	bra	?L10F2
?L13F2:
;				
;			case LF:												// Receive value equ line advance?
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?104.1:
?L14F2:
;				
;				break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?106.1:
	bra	?L10F2
?L11F2:
;				checksum ^= c;										// Count checksum.
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?109.1:
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,#lwrd(2*$checksum)
	ld	AH,#hwrd(2*$checksum)
	movax
	st	AL,@$?irq_scratchpad?+5	; %r2
	st	AH,@$?irq_scratchpad?+4	; %r2
	ld.bu	AL,@(0,X)
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,#lwrd(2*$c)
	ld	AH,#hwrd(2*$c)
	st	AL,@$?irq_scratchpad?+5	; %r2
	st	AH,@$?irq_scratchpad?+4	; %r2
	movax
	ld.bu	AH,@(0,X)
	st	AH,@$?irq_scratchpad?+5	; %r2
	ld	AL,@$?irq_scratchpad?+5	; %r2
	xor	AL,@$?irq_scratchpad?+1	; %r0
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	AL,#lwrd(2*$checksum)
	ld	AH,#hwrd(2*$checksum)
	movax
	st	AL,@$?irq_scratchpad?+5	; %r2
	st	AH,@$?irq_scratchpad?+4	; %r2
	ld	AL,@$?irq_scratchpad?+1	; %r0
	st.b	AL,@(0,X)
;				
;				switch(str_head_flag)
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?111.1:
	ld	AL,@$str_head_flag
	sub	AL,#1
	cmp	AL,#6
	bcc	?L23F2
	st	AL,@$?irq_scratchpad?+1	; %r0
	ld	X,@$?irq_scratchpad?+1	; %r0
	add	X,@$?irq_scratchpad?+1	; %r0
	brxl
	bra2	?L28F2
	bra2	?L27F2
	bra2	?L26F2
	bra2	?L25F2
	bra2	?L23F2
	bra2	?L24F2
?L24F2:
;						GPS_STR_head_receive();
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?114.1:
	bsr	$GPS_STR_head_receive?
;						break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?115.1:
	bra	?L22F2
?L28F2:
;						GGA_receive();
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?118.1:
	bsr	$GGA_receive?
;						break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?119.1:
	bra	?L22F2
?L27F2:
;						GSA_receive();
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?122.1:
	bsr	$GSA_receive?
;						break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?123.1:
	bra	?L22F2
?L26F2:
;						GSV_receive();
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?126.1:
	bsr	$GSV_receive?
;						break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?127.1:
	bra	?L22F2
?L25F2:
;						RMC_receive();
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?130.1:
	bsr	$RMC_receive?
;						break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?131.1:
	bra	?L22F2
?L23F2:
;						break;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?135.1:
?L22F2:
;				}
;				break;	
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?137.1:
?L10F2:
?L4F2:
;		}
;		
;	}
;usr_rx_handler_end:
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?141.1:
?L9F2:
;	nop();
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?142.1:
	nop
Lstab?7c:
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?143.1:
?L41F2:
	add	Y,#39
	ld	AL,@(-33,Y)
	ld	AH,@(-34,Y)
	ld	X,@(-35,Y)
	ld	XH,@(-36,Y)
	rti	@(-37,Y)
Lstab?8c:
;
;}
;
;/******************************************************************************
;NAME
;    usr_ex_handler
;
;SYNOPSIS
;    void __irq_entry usr_ex_handler(void)
;
;FUNCTION
;    Interrupt handler for usr exceptions
;
;RETURNS
;    Nothing.
;******************************************************************************/
;
;void __irq_entry usr_ex_handler(void)
;
$usr_ex_handler??:
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?159.1:
	st	flags,@(-37,Y)
	st	XH,@(-36,Y)
	st	X,@(-35,Y)
	st	AH,@(-34,Y)
	st	AL,@(-33,Y)
	ld	AL,@(-37,Y)
	or	AL,#16
	st	AL,@(-37,Y)
Lstab?9c:
;{
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?160.1:
;	// Clear any exceptions
;    rg.duart.a_int_clr = 0xfff2;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?162.1:
	ld	AL,#-14
	st	AL,@$rg+H'7
;	// Disable any exceptions
;    rg.duart.a_int_dis = 0xfff2;
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?164.1:
	st	AL,@$rg+H'6
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?165.1:
	add	Y,#-37
Lstab?10a:
?L6F3:
	add	Y,#37
	ld	AL,@(-33,Y)
	ld	AH,@(-34,Y)
	ld	X,@(-35,Y)
	ld	XH,@(-36,Y)
	rti	@(-37,Y)
Lstab?11c:
;
;}
;
;
;/******************************************************************************
;NAME
;    gps_initialization
;
;SYNOPSIS
;    void gps_initialization(void)
;
;FUNCTION
;    Display gps fix character.
;
;RETURNS
;    Nothing.
;******************************************************************************/
;void gps_initialization(void)
;
$gps_initialization:
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?181.1:
	st	XH,@(-2,Y)
	st	X,@(-1,Y)
Lstab?12c:
;{
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?182.1:
Lstab?13c:
;	char *P;
;	int i;
;	P = "$GPGSA,";
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?185.1:
;	for(i = 0;i < 7;i++)
	ld	AH,#hwrd(2*?lit0001)
	st	AH,@H'ffe6	; %r3 (P)
	ld	AH,#lwrd(2*?lit0001)
	st	AH,@H'ffe7	; %r3 (P)
^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?186.1:
	ld	AL,#0
	add	Y,#-2
Lstab?14a:
	st	AL,@H'ffe5	; %r2 (i)
?L5F4:
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?186.1:
	ld	AH,@H'ffe5	; %r2 (i)
	cmp	AH,#7
	blt	?L4F4
	bra	?L7F4
?L6F4:
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?186.1:
; ^gps___gps.'D:\simcom\software\SIM300C\gps.c'.?186.1:
	ld	AL,@H'ffe5	; %r2 (i)
	add	AL,#1
	st	AL,@H'ffe5	; %r2 (i)
	bra	?L5F4

⌨️ 快捷键说明

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