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

📄 gps.lss

📁 手持式GPS导航系统-源码
💻 LSS
📖 第 1 页 / 共 5 页
字号:
				}
				altitude[i] = '\0';				/*字符串结束*/
     af8:	e0 2f       	mov	r30, r16
     afa:	f0 e0       	ldi	r31, 0x00	; 0
     afc:	e1 5f       	subi	r30, 0xF1	; 241
     afe:	fe 4f       	sbci	r31, 0xFE	; 254
     b00:	10 82       	st	Z, r1
     b02:	15 cd       	rjmp	.-1494   	; 0x52e <main+0x5c>
				/*获得天线高度 end*/

			}

/******************************* GPGSV 消息 *******************************/
			else if(strcmp(data_buffer,"GPGSV\0") == 0)
     b04:	65 ee       	ldi	r22, 0xE5	; 229
     b06:	70 e0       	ldi	r23, 0x00	; 0
     b08:	83 e5       	ldi	r24, 0x53	; 83
     b0a:	91 e0       	ldi	r25, 0x01	; 1
     b0c:	49 d3       	rcall	.+1682   	; 0x11a0 <strcmp>
     b0e:	00 97       	sbiw	r24, 0x00	; 0
     b10:	09 f0       	breq	.+2      	; 0xb14 <main+0x642>
     b12:	50 c0       	rjmp	.+160    	; 0xbb4 <main+0x6e2>
			{
				/*获得语句条数 start*/
				temp = USART_getchar();
     b14:	36 d3       	rcall	.+1644   	; 0x1182 <USART_getchar>
				if(temp != ',')					/*有效数据*/
     b16:	8c 32       	cpi	r24, 0x2C	; 44
     b18:	09 f0       	breq	.+2      	; 0xb1c <main+0x64a>
				{
					total_gpgsv_no = temp - '0';
					temp = USART_getchar();			/*跳过接下来的','号*/
     b1a:	33 d3       	rcall	.+1638   	; 0x1182 <USART_getchar>
				}
				else total_gpgsv_no = 0;
				/*获得语句条数 end*/

				/*获得当前语句编号 start*/
				temp = USART_getchar();
     b1c:	32 d3       	rcall	.+1636   	; 0x1182 <USART_getchar>
     b1e:	08 2f       	mov	r16, r24
				if(temp != ',')					/*有效数据*/
     b20:	8c 32       	cpi	r24, 0x2C	; 44
     b22:	19 f0       	breq	.+6      	; 0xb2a <main+0x658>
				{
					current_gpgsv_index = temp - '0';
					temp = USART_getchar();			/*跳过接下来的','号*/
     b24:	2e d3       	rcall	.+1628   	; 0x1182 <USART_getchar>
				}
				else current_gpgsv_index = 1;

				if(current_gpgsv_index == 1)	/*清数据,重新统计*/
     b26:	01 33       	cpi	r16, 0x31	; 49
     b28:	39 f4       	brne	.+14     	; 0xb38 <main+0x666>
				{
					total_statlites_have_signal[0] = '0';
     b2a:	80 e3       	ldi	r24, 0x30	; 48
     b2c:	80 93 21 01 	sts	0x0121, r24
					total_statlites_have_signal[1] = '0';
     b30:	80 93 22 01 	sts	0x0122, r24
					total_statlites_have_signal[2] = '\0';
     b34:	10 92 23 01 	sts	0x0123, r1
				}
				/*获得当前语句编号 end*/
#if 1
				/*获得可视卫星总数 start*/
				temp = USART_getchar();
     b38:	24 d3       	rcall	.+1608   	; 0x1182 <USART_getchar>
				if(temp != ',')
     b3a:	8c 32       	cpi	r24, 0x2C	; 44
     b3c:	49 f0       	breq	.+18     	; 0xb50 <main+0x67e>
				{
					total_statlites_visable[0] = temp;
     b3e:	80 93 1b 01 	sts	0x011B, r24
					total_statlites_visable[1] = USART_getchar();
     b42:	1f d3       	rcall	.+1598   	; 0x1182 <USART_getchar>
     b44:	80 93 1c 01 	sts	0x011C, r24
					total_statlites_visable[2] = '\0';
     b48:	10 92 1d 01 	sts	0x011D, r1
					temp = USART_getchar();				/*跳过接下来的','号*/
     b4c:	1a d3       	rcall	.+1588   	; 0x1182 <USART_getchar>
     b4e:	07 c0       	rjmp	.+14     	; 0xb5e <main+0x68c>
				}
				else
				{
					total_statlites_visable[0] = '0';
     b50:	80 e3       	ldi	r24, 0x30	; 48
     b52:	80 93 1b 01 	sts	0x011B, r24
					total_statlites_visable[1] = '0';
     b56:	80 93 1c 01 	sts	0x011C, r24
					total_statlites_visable[2] = '\0';
     b5a:	10 92 1d 01 	sts	0x011D, r1
     b5e:	10 e0       	ldi	r17, 0x00	; 0
							if(total_statlites_have_signal[1] != '9') 
								total_statlites_have_signal[1] += 1;
							else
							{
								total_statlites_have_signal[0] += 1;
								total_statlites_have_signal[1] = '0';	
     b60:	80 e3       	ldi	r24, 0x30	; 48
     b62:	f8 2e       	mov	r15, r24
				while(USART_getchar() != ',');	/*忽略可视卫星总数*/
#endif
				/*获得可视卫星参数 start*/
				for(i=0;i<4;i++)	/*没条语句包含四颗卫星数据*/
				{
					while(USART_getchar() != ',');	/*忽略卫星号*/
     b64:	0e d3       	rcall	.+1564   	; 0x1182 <USART_getchar>
     b66:	8c 97       	sbiw	r24, 0x2c	; 44
     b68:	e9 f7       	brne	.-6      	; 0xb64 <main+0x692>
					while(USART_getchar() != ',');	/*忽略卫星仰角*/
     b6a:	0b d3       	rcall	.+1558   	; 0x1182 <USART_getchar>
     b6c:	8c 97       	sbiw	r24, 0x2c	; 44
     b6e:	e9 f7       	brne	.-6      	; 0xb6a <main+0x698>
					while(USART_getchar() != ',');	/*忽略卫星方位*/
     b70:	08 d3       	rcall	.+1552   	; 0x1182 <USART_getchar>
     b72:	8c 97       	sbiw	r24, 0x2c	; 44
     b74:	e9 f7       	brne	.-6      	; 0xb70 <main+0x69e>

					temp = USART_getchar();			/*卫星信噪比*/
     b76:	05 d3       	rcall	.+1546   	; 0x1182 <USART_getchar>
     b78:	08 2f       	mov	r16, r24

					if((temp != ',') && (temp != '*'))
     b7a:	8c 32       	cpi	r24, 0x2C	; 44
     b7c:	b9 f0       	breq	.+46     	; 0xbac <main+0x6da>
     b7e:	8a 32       	cpi	r24, 0x2A	; 42
     b80:	a9 f0       	breq	.+42     	; 0xbac <main+0x6da>
					{
						temp += USART_getchar() - '0';
     b82:	ff d2       	rcall	.+1534   	; 0x1182 <USART_getchar>
     b84:	00 53       	subi	r16, 0x30	; 48
						if((temp > '0'))	/*不为0代表这个卫星有信号*/
     b86:	08 0f       	add	r16, r24
     b88:	01 33       	cpi	r16, 0x31	; 49
     b8a:	78 f0       	brcs	.+30     	; 0xbaa <main+0x6d8>
						{
							if(total_statlites_have_signal[1] != '9') 
     b8c:	80 91 22 01 	lds	r24, 0x0122
     b90:	89 33       	cpi	r24, 0x39	; 57
     b92:	21 f0       	breq	.+8      	; 0xb9c <main+0x6ca>
								total_statlites_have_signal[1] += 1;
     b94:	8f 5f       	subi	r24, 0xFF	; 255
     b96:	80 93 22 01 	sts	0x0122, r24
     b9a:	07 c0       	rjmp	.+14     	; 0xbaa <main+0x6d8>
							else
							{
								total_statlites_have_signal[0] += 1;
     b9c:	80 91 21 01 	lds	r24, 0x0121
     ba0:	8f 5f       	subi	r24, 0xFF	; 255
     ba2:	80 93 21 01 	sts	0x0121, r24
								total_statlites_have_signal[1] = '0';	
     ba6:	f0 92 22 01 	sts	0x0122, r15
							}
						}
						temp = USART_getchar();				/*跳过接下来的','号*/
     baa:	eb d2       	rcall	.+1494   	; 0x1182 <USART_getchar>
				/*获得可视卫星总数 end*/
#else
				while(USART_getchar() != ',');	/*忽略可视卫星总数*/
#endif
				/*获得可视卫星参数 start*/
				for(i=0;i<4;i++)	/*没条语句包含四颗卫星数据*/
     bac:	1f 5f       	subi	r17, 0xFF	; 255
     bae:	14 30       	cpi	r17, 0x04	; 4
     bb0:	c9 f6       	brne	.-78     	; 0xb64 <main+0x692>
     bb2:	bd cc       	rjmp	.-1670   	; 0x52e <main+0x5c>
				}
				/*获得可视卫星参数 end*/
			}

/*********************************  GPRMC 消息 ***********************************/
			else if(strcmp(data_buffer,"GPRMC\0") == 0)	/*从这个信息里获得时间*/
     bb4:	6c ee       	ldi	r22, 0xEC	; 236
     bb6:	70 e0       	ldi	r23, 0x00	; 0
     bb8:	83 e5       	ldi	r24, 0x53	; 83
     bba:	91 e0       	ldi	r25, 0x01	; 1
     bbc:	f1 d2       	rcall	.+1506   	; 0x11a0 <strcmp>
     bbe:	00 97       	sbiw	r24, 0x00	; 0
     bc0:	09 f0       	breq	.+2      	; 0xbc4 <main+0x6f2>
     bc2:	b5 cc       	rjmp	.-1686   	; 0x52e <main+0x5c>
     bc4:	00 e0       	ldi	r16, 0x00	; 0
					temp = USART_getchar();
					if(temp == ',')	/*结束*/
						break;
					else
					{
						if((i == 2) || (i == 5))time[i++] = ':';	/*添加'.'*/
     bc6:	1a e3       	ldi	r17, 0x3A	; 58
			{
				//debug("found tag GPRMC");
				i = 0;				
				while(1)
				{
					temp = USART_getchar();
     bc8:	dc d2       	rcall	.+1464   	; 0x1182 <USART_getchar>
					if(temp == ',')	/*结束*/
     bca:	8c 32       	cpi	r24, 0x2C	; 44
     bcc:	89 f0       	breq	.+34     	; 0xbf0 <main+0x71e>
						break;
					else
					{
						if((i == 2) || (i == 5))time[i++] = ':';	/*添加'.'*/
     bce:	02 30       	cpi	r16, 0x02	; 2
     bd0:	11 f0       	breq	.+4      	; 0xbd6 <main+0x704>
     bd2:	05 30       	cpi	r16, 0x05	; 5
     bd4:	31 f4       	brne	.+12     	; 0xbe2 <main+0x710>
     bd6:	e0 2f       	mov	r30, r16
     bd8:	f0 e0       	ldi	r31, 0x00	; 0
     bda:	e7 5b       	subi	r30, 0xB7	; 183
     bdc:	fe 4f       	sbci	r31, 0xFE	; 254
     bde:	10 83       	st	Z, r17
     be0:	0f 5f       	subi	r16, 0xFF	; 255
						time[i++] = temp;
     be2:	e0 2f       	mov	r30, r16
     be4:	f0 e0       	ldi	r31, 0x00	; 0
     be6:	e7 5b       	subi	r30, 0xB7	; 183
     be8:	fe 4f       	sbci	r31, 0xFE	; 254
     bea:	80 83       	st	Z, r24
     bec:	0f 5f       	subi	r16, 0xFF	; 255
     bee:	ec cf       	rjmp	.-40     	; 0xbc8 <main+0x6f6>
					}	
				}
				time[i] = '\0';				/*字符串结束*/
     bf0:	e0 2f       	mov	r30, r16
     bf2:	f0 e0       	ldi	r31, 0x00	; 0
     bf4:	e7 5b       	subi	r30, 0xB7	; 183
     bf6:	fe 4f       	sbci	r31, 0xFE	; 254
     bf8:	10 82       	st	Z, r1
				need_update = 1;			/*可以更新数据*/
				
				/*查询数据是否有效*/
				temp = USART_getchar();
     bfa:	c3 d2       	rcall	.+1414   	; 0x1182 <USART_getchar>
     bfc:	08 2f       	mov	r16, r24
				if(temp != ',')
     bfe:	8c 32       	cpi	r24, 0x2C	; 44
     c00:	09 f4       	brne	.+2      	; 0xc04 <main+0x732>
     c02:	51 c0       	rjmp	.+162    	; 0xca6 <main+0x7d4>
					if(temp == 'A')
					{
						gprmc_valid = 1;
					}
					else gprmc_valid =0;
					temp = USART_getchar();
     c04:	be d2       	rcall	.+1404   	; 0x1182 <USART_getchar>
				}
				else gprmc_valid = 0;				

				/*如果有效则继续收集速度和方位角信息*/
				if(gprmc_valid == 1)
     c06:	01 34       	cpi	r16, 0x41	; 65
     c08:	09 f0       	breq	.+2      	; 0xc0c <main+0x73a>
     c0a:	4d c0       	rjmp	.+154    	; 0xca6 <main+0x7d4>
				{
					while(USART_getchar() != ',');	/*忽略纬度*/
     c0c:	ba d2       	rcall	.+1396   	; 0x1182 <USART_getchar>
     c0e:	8c 97       	sbiw	r24, 0x2c	; 44
     c10:	e9 f7       	brne	.-6      	; 0xc0c <main+0x73a>
					while(USART_getchar() != ',');	/*忽略南北*/
     c12:	b7 d2       	rcall	.+1390   	; 0x1182 <USART_getchar>
     c14:	8c 97       	sbiw	r24, 0x2c	; 44
     c16:	e9 f7       	brne	.-6      	; 0xc12 <main+0x740>
					while(USART_getchar() != ',');	/*忽略经度*/
     c18:	b4 d2       	rcall	.+1384   	; 0x1182 <USART_getchar>
     c1a:	8c 97       	sbiw	r24, 0x2c	; 44
     c1c:	e9 f7       	brne	.-6      	; 0xc18 <main+0x746>
					while(USART_getchar() != ',');	/*忽略东西*/
     c1e:	b1 d2       	rcall	.+1378   	; 0x1182 <USART_getchar>
     c20:	8c 97       	sbiw	r24, 0x2c	; 44
     c22:	e9 f7       	brne	.-6      	; 0xc1e <main+0x74c>
     c24:	03 e0       	ldi	r16, 0x03	; 3
					
					i = 3;	
					while(1)	/*获得速度信息*/
					{			
						temp = USART_getchar();
     c26:	ad d2       	rcall	.+1370   	; 0x1182 <USART_getchar>
     c28:	e0 2f       	mov	r30, r16
     c2a:	f0 e0       	ldi	r31, 0x00	; 0
     c2c:	90 2f       	mov	r25, r16
     c2e:	9f 5f       	subi	r25, 0xFF	; 255
						if(temp == ',')break;
     c30:	8c 32       	cpi	r24, 0x2C	; 44
     c32:	29 f0       	breq	.+10     	; 0xc3e <main+0x76c>
						else speed[i++] = temp;
     c34:	ec 5d       	subi	r30, 0xDC	; 220
     c36:	fe 4f       	sbci	r31, 0xFE	; 254
     c38:	80 83       	st	Z, r24
     c3a:	09 2f       	mov	r16, r25
     c3c:	f4 cf       	rjmp	.-24     	; 0xc26 <main+0x754>
					}
					speed[i++] = ' ';
     c3e:	ec 5d       	subi	r30, 0xDC	; 220
     c40:	fe 4f       	sbci	r31, 0xFE	; 254
     c42:	80 e2       	ldi	r24, 0x20	; 32
     c44:	80 83       	st	Z, r24
					speed[i++] = 'M';
     c46:	e9 2f       	mov	r30, r25
     c48:	f0 e0       	ldi	r31, 0x00	; 0
     c4a:	ec 5d       	subi	r30, 0xDC	; 220
     c4c:	fe 4f       	sbci	r31, 0xFE	; 254
     c4e:	8d e4       	ldi	r24, 0x4D	; 77
     c50:	80 83       	st	Z, r24
     c52:	e9 2f       	mov	r30, r25
     c54:	ef 5f       	subi	r30, 0xFF	; 255
					speed[i++] = 'P';
     c56:	ae 2f       	mov	r26, r30
     c58:	b0 e0       	ldi	r27, 0x00	; 0
     c5a:	ac 5d       	subi	r26, 0xDC	; 220
     c5c:	be 4f       	sbci	r27, 0xFE	; 254
     c5e:	80 e5       	ldi	r24, 0x50	; 80
     c60:	8c 93       	st	X, r24
     c62:	ef 5f       	subi	r30, 0xFF	; 255
					speed[i++] = 'H';
     c64:	ae 2f       	mov	r26, r30
     c66:	b0 e0       	ldi	r27, 0x00	; 0
     c68:	ac 5d    

⌨️ 快捷键说明

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