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

📄 main.s

📁 ATmega128的GPS例子
💻 S
📖 第 1 页 / 共 4 页
字号:
	lds R9,_latitude+2+1
	lds R6,_latitude
	lds R7,_latitude+1
	sub R6,R2
	sbc R7,R3
	sbc R8,R4
	sbc R9,R5
	ldi R20,111
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R16,R20
	movw R18,R22
	xcall empy32u
	sts _y2_post+1,R17
	sts _y2_post,R16
	sts _y2_post+2+1,R19
	sts _y2_post+2,R18
	.dbline 80
; 			area += Get_Area(x1_post,y1_post,x2_post,y2_post);
	movw R2,R16
	movw R4,R18
	std y+8,R2
	std y+9,R3
	std y+10,R4
	std y+11,R5
	lds R4,_x2_post+2
	lds R5,_x2_post+2+1
	lds R2,_x2_post
	lds R3,_x2_post+1
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	lds R4,_y1_post+2
	lds R5,_y1_post+2+1
	lds R2,_y1_post
	lds R3,_y1_post+1
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	lds R18,_x1_post+2
	lds R19,_x1_post+2+1
	lds R16,_x1_post
	lds R17,_x1_post+1
	xcall _Get_Area
	lds R4,_area+2
	lds R5,_area+2+1
	lds R2,_area
	lds R3,_area+1
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	sts _area+1,R3
	sts _area,R2
	sts _area+2+1,R5
	sts _area+2,R4
	.dbline 82
; 			//计算完成本次坐标次数前移
; 			x1_post = x2_post;
	lds R4,_x2_post+2
	lds R5,_x2_post+2+1
	lds R2,_x2_post
	lds R3,_x2_post+1
	sts _x1_post+1,R3
	sts _x1_post,R2
	sts _x1_post+2+1,R5
	sts _x1_post+2,R4
	.dbline 83
; 			y1_post = y2_post;
	lds R4,_y2_post+2
	lds R5,_y2_post+2+1
	lds R2,_y2_post
	lds R3,_y2_post+1
	sts _y1_post+1,R3
	sts _y1_post,R2
	sts _y1_post+2+1,R5
	sts _y1_post+2,R4
	.dbline 85
; 
; 			x_dis = x1_post;//显示偏移坐标
	lds R4,_x1_post+2
	lds R5,_x1_post+2+1
	lds R2,_x1_post
	lds R3,_x1_post+1
	sts _x_dis+1,R3
	sts _x_dis,R2
	sts _x_dis+2+1,R5
	sts _x_dis+2,R4
	.dbline 86
; 			y_dis = y1_post;
	lds R4,_y1_post+2
	lds R5,_y1_post+2+1
	lds R2,_y1_post
	lds R3,_y1_post+1
	sts _y_dis+1,R3
	sts _y_dis,R2
	sts _y_dis+2+1,R5
	sts _y_dis+2,R4
	.dbline 87
; 			if(x_dis < 0)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_x_dis+2
	lds R5,_x_dis+2+1
	lds R2,_x_dis
	lds R3,_x_dis+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brge L109
X32:
	.dbline 88
; 			{
	.dbline 89
; 				x_dis = ~(x_dis-1);
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	com R2
	com R3
	com R4
	com R5
	sts _x_dis+1,R3
	sts _x_dis,R2
	sts _x_dis+2+1,R5
	sts _x_dis+2,R4
	.dbline 90
; 			}
L109:
	.dbline 91
; 			if(y_dis < 0)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_y_dis+2
	lds R5,_y_dis+2+1
	lds R2,_y_dis
	lds R3,_y_dis+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brge L111
X33:
	.dbline 92
; 			{
	.dbline 93
; 				y_dis = ~(y_dis-1);
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	com R2
	com R3
	com R4
	com R5
	sts _y_dis+1,R3
	sts _y_dis,R2
	sts _y_dis+2+1,R5
	sts _y_dis+2,R4
	.dbline 94
; 			}
L111:
	.dbline 96
; 			//Hzk_Dis_Clr();
; 			Hzk_Dis_Data(1,1,x_dis/10,9);//显示相对坐标*0.01米
	ldi R24,9
	std y+4,R24
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R18,_x_dis+2
	lds R19,_x_dis+2+1
	lds R16,_x_dis
	lds R17,_x_dis+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	xcall div32s
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	ldi R18,1
	ldi R16,1
	xcall _Hzk_Dis_Data
	.dbline 97
; 			Hzk_Dis_Data(2,1,y_dis/10,9);	
	ldi R24,9
	std y+4,R24
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R18,_y_dis+2
	lds R19,_y_dis+2+1
	lds R16,_y_dis
	lds R17,_y_dis+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	xcall div32s
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	ldi R18,1
	ldi R16,2
	xcall _Hzk_Dis_Data
	.dbline 98
; 		}
L107:
	.dbline 99
; 		if(flag_area == 2)
	lds R24,_flag_area
	cpi R24,2
	breq X43
	xjmp L113
X43:
X34:
	.dbline 100
; 		{
	.dbline 101
; 			x2_post = (longitude - x0_longitude)*11;
	lds R4,_x0_longitude+2
	lds R5,_x0_longitude+2+1
	lds R2,_x0_longitude
	lds R3,_x0_longitude+1
	lds R8,_longitude+2
	lds R9,_longitude+2+1
	lds R6,_longitude
	lds R7,_longitude+1
	sub R6,R2
	sbc R7,R3
	sbc R8,R4
	sbc R9,R5
	ldi R20,11
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R16,R20
	movw R18,R22
	xcall empy32u
	sts _x2_post+1,R17
	sts _x2_post,R16
	sts _x2_post+2+1,R19
	sts _x2_post+2,R18
	.dbline 102
; 			y2_post = (latitude - y0_latitude)*11;
	lds R4,_y0_latitude+2
	lds R5,_y0_latitude+2+1
	lds R2,_y0_latitude
	lds R3,_y0_latitude+1
	lds R8,_latitude+2
	lds R9,_latitude+2+1
	lds R6,_latitude
	lds R7,_latitude+1
	sub R6,R2
	sbc R7,R3
	sbc R8,R4
	sbc R9,R5
	ldi R20,11
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R16,R20
	movw R18,R22
	xcall empy32u
	sts _y2_post+1,R17
	sts _y2_post,R16
	sts _y2_post+2+1,R19
	sts _y2_post+2,R18
	.dbline 103
; 			area += Get_Area(x2_post,y2_post,x0_post,y0_post);
	lds R4,_y0_post+2
	lds R5,_y0_post+2+1
	lds R2,_y0_post
	lds R3,_y0_post+1
	std y+8,R2
	std y+9,R3
	std y+10,R4
	std y+11,R5
	lds R4,_x0_post+2
	lds R5,_x0_post+2+1
	lds R2,_x0_post
	lds R3,_x0_post+1
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	movw R2,R16
	movw R4,R18
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	lds R18,_x2_post+2
	lds R19,_x2_post+2+1
	lds R16,_x2_post
	lds R17,_x2_post+1
	xcall _Get_Area
	lds R4,_area+2
	lds R5,_area+2+1
	lds R2,_area
	lds R3,_area+1
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	sts _area+1,R3
	sts _area,R2
	sts _area+2+1,R5
	sts _area+2,R4
	.dbline 104
; 			if(area < 0)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brge L115
X35:
	.dbline 105
; 			{
	.dbline 106
; 				area = ~(area - 1); 
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	com R2
	com R3
	com R4
	com R5
	sts _area+1,R3
	sts _area,R2
	sts _area+2+1,R5
	sts _area+2,R4
	.dbline 107
; 			}
L115:
	.dbline 108
; 			Hzk_Dis_Clr();
	xcall _Hzk_Dis_Clr
	.dbline 109
; 			Hzk_Dis_Data(2,1,area/100,9);
	ldi R24,9
	std y+4,R24
	ldi R20,100
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R18,_area+2
	lds R19,_area+2+1
	lds R16,_area
	lds R17,_area+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	xcall div32s
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	ldi R18,1
	ldi R16,2
	xcall _Hzk_Dis_Data
L117:
	.dbline 110
; 			while(1);
L118:
	.dbline 110
	xjmp L117
L113:
	.dbline 113
; 			//flag_area = 0;
; 		}		
; 		if((flag_area == 0)||(flag_area == 1)||(flag_area == 2)||(flag_area == 3))
	lds R2,_flag_area
	tst R2
	breq L124
X36:
	mov R24,R2
	cpi R24,1
	breq L124
X37:
	cpi R24,2
	breq L124
X38:
	cpi R24,3
	brne L120
X39:
L124:
	.dbline 114
; 		{
	.dbline 115
; 			Hzk_Dis_Data(1,7,key_dis,2);
	ldi R24,2
	std y+4,R24
	lds R2,_key_dis
	clr R3
	clr R4
	clr R5
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	ldi R18,7
	ldi R16,1
	xcall _Hzk_Dis_Data
	.dbline 116
; 			Hzk_Dis_Data(2,7,flag_area,2);
	ldi R24,2
	std y+4,R24
	lds R2,_flag_area
	clr R3
	clr R4
	clr R5
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	ldi R18,7
	ldi R16,2
	xcall _Hzk_Dis_Data
	.dbline 117
; 		}
L120:
	.dbline 125
; 		/*
; 		if(usart_flag & BIT(SINK0_FINISH))
; 		{
; 			Get_GPRMC_data();	
; 			usart_flag &=~ BIT(SINK0_FINISH);			
; 		}
; 		*/
; 	}
L94:
	.dbline 46
	xjmp L93
X40:
	.dbline -2
L92:
	.dbline 0 ; func end
	adiw R28,12
	ret
	.dbsym l i 13 i
	.dbend
	.dbfunc e Get_Key _Get_Key fV
	.even
_Get_Key::
	.dbline -1
	.dbline 131
; }
; 
; 
; 
; void Get_Key(void)
; {
	.dbline 132
; 		if( (KEY_PIN & BIT(KEY_START)) == 0)
	sbic 0x19,1
	rjmp L126
X44:
	.dbline 133
; 		{
	.dbline 134
; 			Delay_Ms(20);
	ldi R16,20
	ldi R17,0
	xcall _Delay_Ms
L128:
	.dbline 136
; 			while((KEY_PIN & BIT(KEY_START)) == 0)
; 				;
L129:
	.dbline 135
	sbis 0x19,1
	rjmp L128
X45:
	.dbline 137
; 			key = 1;
	ldi R24,1
	sts _key,R24
	.dbline 138
; 		}
L126:
	.dbline 139
; 		if( (KEY_PIN & BIT(KEY_FINISH)) == 0)
	sbic 0x19,3
	rjmp L131
X46:
	.dbline 140
; 		{
	.dbline 141
; 			Delay_Ms(20);
	ldi R16,20
	ldi R17,0
	xcall _Delay_Ms
L133:
	.dbline 143
; 			while((KEY_PIN & BIT(KEY_FINISH)) == 0)
; 				;
L134:
	.dbline 142
	sbis 0x19,3
	rjmp L133
X47:
	.dbline 144
; 			key = 2;
	ldi R24,2
	sts _key,R24
	.dbline 145
; 		}
L131:
	.dbline -2
L125:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Get_GPRMC_data _Get_GPRMC_data fV
;              f -> R14
;              m -> R12
;              n -> R10
	.even
_Get_GPRMC_data::
	xcall push_xgsetF0FC
	.dbline -1
	.dbline 149
; }
; 
; void Get_GPRMC_data(void)//提取GPRMC数据
; {
	.dbline 150
; 	unsigned char n=0,m=0,f=0;
	clr R10
	.dbline 150
	clr R12
	.dbline 150
	clr R14
	.dbline 151
; 	if((sink0_buf[1] == 'G')
	lds R24,_sink0_buf+1
	cpi R24,71
	breq X64
	xjmp L137
X64:
X48:
	lds R24,_sink0_buf+2
	cpi R24,80
	breq X65
	xjmp L137
X65:
X49:
	lds R24,_sink0_buf+3
	cpi R24,82
	breq X66
	xjmp L137
X66:
X50:
	lds R24,_sink0_buf+4
	cpi R24,77
	breq X67
	xjmp L137
X67:
X51:
	lds R24,_sink0_buf+5
	cpi R24,67
	breq X68
	xjmp L137
X68:
X52:
	.dbline 156
; 	  &&(sink0_buf[2] == 'P')
; 	  &&(sink0_buf[3] == 'R')
; 	  &&(sink0_buf[4] == 'M')
; 	  &&(sink0_buf[5] == 'C'))//GPRMC
; 	{
	.dbline 157
; 		LED_PORT ^= BIT(LED);
	ldi R24,32
	in R2,0x18
	eor R2,R24
	out 0x18,R2
	.dbline 158
; 		for(n=0;n<100;n++)
	xjmp L147
L144:
	.dbline 159
; 		{	
	.dbline 160
; 			if(sink0_buf[n] == ',')
	ldi R24,<_sink0_buf
	ldi R25,>_sink0_buf
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,44
	breq X69
	xjmp L148
X69:
X53:
	.dbline 161
; 			{
	.dbline 162
; 				m ++;//m表示低级个","
	inc R12
	.dbline 163
; 				if(m == 1)//第一个","后面为时间数据
	mov R24,R12
	cpi R24,1
	brne L150
X54:
	.dbline 164
; 				{
	.dbline 166
; 					//Hzk_Dis_Char(1,1,&sink0_buf[n+1],9);
; 				}
L150:
	.dbline 167
; 				if(m == 2)//第二个","后面为定位信息状态
	mov R24,R12
	cpi R24,2
	brne L152
X55:
	.dbline 168
; 				{
	.dbline 169
; 					gps_status = sink0_buf[n+1]; 
	ldi R24,<_sink0_buf+1
	ldi R25,>_sink0_buf+1
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	sts _gps_status,R2
	.dbline 171
; 					//Hzk_Dis_Char(1,6,&gps_status,1);					
; 				}
L152:
	.dbline 172
; 				if(m == 3)//第三个","后面为纬度数据
	mov R24,R12
	cpi R24,3
	breq X70
	xjmp L155
X70:
X56:
	.dbline 173
; 				{
	.dbline 174
; 					if(gps_status == 'A')
	lds R24,_gps_status
	cpi R24,65
	breq X71
	xjmp L157
X71:
X57:
	.dbline 175
; 					{
	.dbline 177
; 						//Hzk_Dis_Char(1,1,&sink0_buf[n+1],11);
; 						latitude = (unsigned long)(sink0_buf[n+1]-0x30)*10000000
	ldi R24,<_sink0_buf+4
	ldi R25,>_sink0_buf+4
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	clr R25
	sbiw R24,48
	movw R2,R24
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,160
	ldi R21,134
	ldi R22,1
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	movw R2,R16
	movw R4,R18
	ldi R24,<_sink0_buf+3
	ldi R25,>_sink0_buf+3
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	clr R25
	sbiw R24,48
	movw R6,R24
	clr R8
	sbrc R7,7
	com R8
	clr R9
	sbrc R8,7
	com R9
	ldi R20,64
	ldi R21,66
	ldi R22,15
	ldi R23,0
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R16,R20
	movw R18,R22
	xcall empy32u
	movw R6,R16
	movw R8,R18
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	ldi R24,<_sink0_buf+6
	ldi R25,>_sink0_buf+6
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	clr R25
	sbiw R24,48
	movw R2,R24
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,16
	ldi R21,39
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	add R6,R16
	adc R7,R17
	adc R8,R18
	adc R9,R19
	ldi R24,<_sink0_buf+7
	ldi R25,>_sink0_buf+7
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	clr R25
	sbiw R24,48
	movw R2,R24
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,232
	ldi R21,3
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	add R6,R16
	adc R7,R17
	adc R8,R18
	adc R9,R19
	ldi R24,<_sink0_buf+8
	ldi R25,>_sink0_buf+8
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	clr R25
	sbiw R24,48
	movw R2,R24
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,100
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	add R6,R16
	adc R7,R17
	adc R8,R18
	adc R9,R19
	ldi R24,<_sink0_buf+9
	ldi R25,>_sink0_buf+9

⌨️ 快捷键说明

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