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

📄 gps20080503icc.lst

📁 ATmega128的GPS例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0148) 		//将data变为datal 0000 datah 0000
(0149) 	Send_8bit(com&0xf0);
     228 2D0A      MOV	R16,R10
     229 2711      CLR	R17
     22A 7F00      ANDI	R16,0xF0
     22B 7010      ANDI	R17,0
     22C D015      RCALL	_Send_8bit
(0150) 	Delay_Us(100);//72us	
     22D E604      LDI	R16,0x64
     22E DED8      RCALL	_Delay_Us
(0151) 	Send_8bit((com&0x0f)<<4);
     22F 2D0A      MOV	R16,R10
     230 2711      CLR	R17
     231 700F      ANDI	R16,0xF
     232 7010      ANDI	R17,0
     233 0F00      LSL	R16
     234 1F11      ROL	R17
     235 0F00      LSL	R16
     236 1F11      ROL	R17
     237 0F00      LSL	R16
     238 1F11      ROL	R17
     239 0F00      LSL	R16
     23A 1F11      ROL	R17
     23B D006      RCALL	_Send_8bit
(0152) 	Delay_Us(100);//72us
     23C E604      LDI	R16,0x64
     23D DEC9      RCALL	_Delay_Us
(0153) 	LCD_CS_L;//片选置低
     23E 98AB      CBI	0x15,3
     23F 90C9      LD	R12,Y+
     240 90A9      LD	R10,Y+
     241 9508      RET
_Send_8bit:
  i                    --> R20
  x                    --> R10
     242 940E 09A0 CALL	push_xgset300C
     244 0158      MOVW	R10,R16
(0154) }
(0155) 	
(0156) void Send_8bit(Word x)
(0157) {
(0158) 	Byte i;
(0159) 	for(i=0;i<8;i++)
     245 2744      CLR	R20
     246 C00E      RJMP	0x0255
(0160) 	{
(0161) 		if(x&0x80)//数据线发送数据
     247 FEA7      SBRS	R10,7
     248 C002      RJMP	0x024B
(0162) 		{
(0163) 			LCD_STD_H;
     249 9AC3      SBI	0x18,3
(0164) 		}
     24A C001      RJMP	0x024C
(0165) 		else
(0166) 		{
(0167) 			LCD_STD_L;
     24B 98C3      CBI	0x18,3
(0168) 		}
(0169) 		LCD_SCLK_L;//产生同步时钟
     24C 98C4      CBI	0x18,4
(0170) 		Delay_Us(2);
     24D E002      LDI	R16,2
     24E DEB8      RCALL	_Delay_Us
(0171) 		LCD_SCLK_H;
     24F 9AC4      SBI	0x18,4
(0172) 		Delay_Us(2);
     250 E002      LDI	R16,2
     251 DEB5      RCALL	_Delay_Us
(0173) 		x <<= 1;
     252 0CAA      LSL	R10
     253 1CBB      ROL	R11
     254 9543      INC	R20
     255 3048      CPI	R20,0x8
     256 F380      BCS	0x0247
     257 940C 09A5 JMP	pop_xgset300C
_Hzk_Dis_Clr:
     259 9722      SBIW	R28,2
(0174) 	}
(0175) }
(0176) 
(0177) void Hzk_Dis_Clr(void)//汉字显示清屏
(0178) {
(0179) 	Hzk_Dis_Words(1,1,"                  ");
     25A E681      LDI	R24,0x61
     25B E090      LDI	R25,0
     25C 8399      STD	Y+1,R25
     25D 8388      STD	Y+0,R24
     25E E021      LDI	R18,1
     25F E001      LDI	R16,1
     260 DEEE      RCALL	_Hzk_Dis_Words
(0180) 	Hzk_Dis_Words(2,1,"                  ");	
     261 E681      LDI	R24,0x61
     262 E090      LDI	R25,0
     263 8399      STD	Y+1,R25
     264 8388      STD	Y+0,R24
     265 E021      LDI	R18,1
     266 E002      LDI	R16,2
     267 DEE7      RCALL	_Hzk_Dis_Words
     268 9622      ADIW	R28,2
     269 9508      RET
_main:
  i                    --> Y,+13
     26A 972C      SBIW	R28,0xC
FILE: D:\SOURCE~1\gps20080503\main.c
(0001) //ICC-AVR application builder : 2007-11-21
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004)                   
(0005) /******************  SMG12232ZK串行接口程序******************
(0006) * Title : Accessing to LCD-CONTROLLER                                   
(0007) * Date :  2007.10.18                                                      
(0008) * Support telephone:       
(0009) * Support fax :     
(0010) * Create by :	       
(0011) * DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER  
(0012) *******************************************************************/
(0013) 
(0014) #include <iom16v.h>		//ATMEGA48头文件
(0015) #include <macros.h>		//宏定义
(0016) //#include <math.h>	
(0017) #include "define.h"		//端口定义
(0018) #include "initrialm16.h"//初始化mcu
(0019) #include "delay.h"		//延时程序
(0020) #include "smg12232zk.h" //122*32点阵屏驱动程序
(0021) 
(0022) 
(0023) void Get_Key(void);
(0024) void Get_GPRMC_data(void);//提取GPRMC数据
(0025) long Get_Area(long x1,long y1,long x2,long y2);
(0026) 
(0027) 
(0028) Byte const COS_TAB[90]=
(0029) 	{
(0030) 	100,100,100,100,100,99, 99, 99, 99, 98, 
(0031) 	98, 98, 97, 97, 97, 96, 96, 95, 95, 94, 
(0032) 	93, 93, 92, 91, 91, 90, 89, 88, 87, 87, 
(0033) 	86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 
(0034) 	75, 74, 73, 72, 71, 69, 68, 67, 66, 64, 
(0035) 	63, 62, 60, 59, 57, 56, 55, 53, 52, 50, 
(0036) 	49, 47, 45, 44, 42, 41, 39, 38, 36, 34, 
(0037) 	33, 31, 29, 28, 26, 24, 23, 21, 19, 17, 
(0038) 	16, 14, 12, 11,  9,  7,  5,  4,  2,  0 
(0039) 	};
(0040) 
(0041) void main(void)
(0042) {
(0043) 	Word i;
(0044)  	Init_Devices();
     26B DE18      RCALL	_Init_Devices
(0045) 	Lcd_Reset();
     26C DF9C      RCALL	_Lcd_Reset
     26D C317      RJMP	0x0585
(0046) 	while(1)
(0047) 	{
(0048) 		Get_Key();
     26E D319      RCALL	_Get_Key
(0049) 		if(key != 0)
     26F 9020 007D LDS	R2,key
     271 2022      TST	R2
     272 F0D1      BEQ	0x028D
(0050) 		{
(0051) 			switch(key)
     273 2CA2      MOV	R10,R2
     274 24BB      CLR	R11
     275 01C5      MOVW	R24,R10
     276 3081      CPI	R24,1
     277 E0E0      LDI	R30,0
     278 079E      CPC	R25,R30
     279 F029      BEQ	0x027F
     27A 3082      CPI	R24,2
     27B E0E0      LDI	R30,0
     27C 079E      CPC	R25,R30
     27D F029      BEQ	0x0283
     27E C007      RJMP	0x0286
(0052) 			{
(0053) 				case 1: flag_area = 1;break;//开始测量
     27F E081      LDI	R24,1
     280 9380 0148 STS	flag_area,R24
     282 C003      RJMP	0x0286
(0054) 				case 2: flag_area = 2;break;
     283 E082      LDI	R24,2
     284 9380 0148 STS	flag_area,R24
(0055) 				default:break;
(0056) 			}
(0057) 			key_dis = key;
     286 9020 007D LDS	R2,key
     288 9220 007C STS	key_dis,R2
(0058) 			key = 0;
     28A 2422      CLR	R2
     28B 9220 007D STS	key,R2
(0059) 		}
(0060) 		if(flag_area == 0)
     28D 9020 0148 LDS	R2,flag_area
     28F 2022      TST	R2
     290 F511      BNE	0x02B3
(0061) 		{
(0062) 			Hzk_Dis_Data(1,1,latitude,9);
     291 E089      LDI	R24,0x9
     292 838C      STD	Y+4,R24
     293 9040 018C LDS	R4,latitude+2
     295 9050 018D LDS	R5,latitude+3
     297 9020 018A LDS	R2,latitude
     299 9030 018B LDS	R3,latitude+1
     29B 8228      STD	Y+0,R2
     29C 8239      STD	Y+1,R3
     29D 824A      STD	Y+2,R4
     29E 825B      STD	Y+3,R5
     29F E021      LDI	R18,1
     2A0 E001      LDI	R16,1
     2A1 DF05      RCALL	_Hzk_Dis_Data
(0063) 			Hzk_Dis_Data(2,1,longitude,9);
     2A2 E089      LDI	R24,0x9
     2A3 838C      STD	Y+4,R24
     2A4 9040 0188 LDS	R4,longitude+2
     2A6 9050 0189 LDS	R5,longitude+3
     2A8 9020 0186 LDS	R2,longitude
     2AA 9030 0187 LDS	R3,longitude+1
     2AC 8228      STD	Y+0,R2
     2AD 8239      STD	Y+1,R3
     2AE 824A      STD	Y+2,R4
     2AF 825B      STD	Y+3,R5
     2B0 E021      LDI	R18,1
     2B1 E002      LDI	R16,2
     2B2 DEF4      RCALL	_Hzk_Dis_Data
(0064) 		}
(0065) 		if(flag_area == 1)
     2B3 9180 0148 LDS	R24,flag_area
     2B5 3081      CPI	R24,1
     2B6 F009      BEQ	0x02B8
     2B7 C047      RJMP	0x02FF
(0066) 		{
(0067) 			x0_longitude = longitude;//保存0点的坐标
     2B8 9040 0188 LDS	R4,longitude+2
     2BA 9050 0189 LDS	R5,longitude+3
     2BC 9020 0186 LDS	R2,longitude
     2BE 9030 0187 LDS	R3,longitude+1
     2C0 9230 017E STS	x0_longitude+1,R3
     2C2 9220 017D STS	x0_longitude,R2
     2C4 9250 0180 STS	x0_longitude+3,R5
     2C6 9240 017F STS	x0_longitude+2,R4
(0068) 			y0_latitude = latitude;
     2C8 9040 018C LDS	R4,latitude+2
     2CA 9050 018D LDS	R5,latitude+3
     2CC 9020 018A LDS	R2,latitude
     2CE 9030 018B LDS	R3,latitude+1
     2D0 9230 017A STS	y0_latitude+1,R3
     2D2 9220 0179 STS	y0_latitude,R2
     2D4 9250 017C STS	y0_latitude+3,R5
     2D6 9240 017B STS	y0_latitude+2,R4
(0069) 			x1_post = 0;
     2D8 E040      LDI	R20,0
     2D9 E050      LDI	R21,0
     2DA E060      LDI	R22,0
     2DB E070      LDI	R23,0
     2DC 9350 016E STS	x1_post+1,R21
     2DE 9340 016D STS	x1_post,R20
     2E0 9370 0170 STS	x1_post+3,R23
     2E2 9360 016F STS	x1_post+2,R22
(0070) 			y1_post = 0;
     2E4 E040      LDI	R20,0
     2E5 E050      LDI	R21,0
     2E6 E060      LDI	R22,0
     2E7 E070      LDI	R23,0
     2E8 9350 016A STS	y1_post+1,R21
     2EA 9340 0169 STS	y1_post,R20
     2EC 9370 016C STS	y1_post+3,R23
     2EE 9360 016B STS	y1_post+2,R22
(0071) 			area = 0;
     2F0 E040      LDI	R20,0
     2F1 E050      LDI	R21,0
     2F2 E060      LDI	R22,0
     2F3 E070      LDI	R23,0
     2F4 9350 014E STS	area+1,R21
     2F6 9340 014D STS	area,R20
     2F8 9370 0150 STS	area+3,R23
     2FA 9360 014F STS	area+2,R22
(0072) 			flag_area = 3;//测量开始
     2FC E083      LDI	R24,3
     2FD 9380 0148 STS	flag_area,R24
(0073) 		}
(0074) 		if(flag_area == 3)
     2FF 9180 0148 LDS	R24,flag_area
     301 3083      CPI	R24,3
     302 F009      BEQ	0x0304
     303 C190      RJMP	0x0494
(0075) 		{
(0076) 			//计算本次的相对坐标
(0077) 			xishu = PI2RDIV360*COS_TAB[latitude/1000000-1]/100000;
     304 E440      LDI	R20,0x40
     305 E452      LDI	R21,0x42
     306 E06F      LDI	R22,0xF
     307 E070      LDI	R23,0
     308 9120 018C LDS	R18,latitude+2
     30A 9130 018D LDS	R19,latitude+3
     30C 9100 018A LDS	R16,latitude
     30E 9110 018B LDS	R17,latitude+1
     310 937A      ST	R23,-Y
     311 936A      ST	R22,-Y
     312 935A      ST	R21,-Y
     313 934A      ST	R20,-Y
     314 940E 08EC CALL	div32u
     316 0118      MOVW	R2,R16
     317 0129      MOVW	R4,R18
     318 E041      LDI	R20,1
     319 E050      LDI	R21,0
     31A E060      LDI	R22,0
     31B E070      LDI	R23,0
     31C 1A24      SUB	R2,R20
     31D 0A35      SBC	R3,R21
     31E 0A46      SBC	R4,R22
     31F 0A57      SBC	R5,R23
     320 01F1      MOVW	R30,R2
     321 E584      LDI	R24,0x54
     322 E090      LDI	R25,0
     323 0FE8      ADD	R30,R24
     324 1FF9      ADC	R31,R25
     325 9024      LPM	R2,0(Z)
     326 2433      CLR	R3
     327 2444      CLR	R4
     328 2455      CLR	R5
     329 E54B      LDI	R20,0x5B
     32A EB52      LDI	R21,0xB2
     32B E061      LDI	R22,1
     32C E070      LDI	R23,0
     32D 925A      ST	R5,-Y
     32E 924A      ST	R4,-Y
     32F 923A      ST	R3,-Y
     330 922A      ST	R2,-Y
     331 018A      MOVW	R16,R20
     332 019B      MOVW	R18,R22
     333 940E 0956 CALL	empy32s
     335 EA40      LDI	R20,0xA0
     336 E856      LDI	R21,0x86
     337 E061      LDI	R22,1
     338 E070      LDI	R23,0
     339 937A      ST	R23,-Y
     33A 936A      ST	R22,-Y
     33B 935A      ST	R21,-Y
     33C 934A      ST	R20,-Y
     33D 940E 08F2 CALL	div32s
     33F 9310 014A STS	xishu+1,R17
     341 9300 0149 STS	xishu,R16
     343 9330 014C STS	xishu+3,R19
     345 9320 014B STS	xishu+2,R18
(0078) 			x2_post = (longitude - x0_longitude)*xishu;
     347 9040 017F LDS	R4,x0_longitude+2
     349 9050 0180 LDS	R5,x0_longitude+3
     34B 9020 017D LDS	R2,x0_longitude
     34D 9030 017E LDS	R3,x0_longitude+1
     34F 9120 0188 LDS	R18,longitude+2
     351 9130 0189 LDS	R19,longitude+3
     353 9100 0186 LDS	R16,longitude
     355 9110 0187 LDS	R17,longitude+1
     357 1902      SUB	R16,R2
     358 0913      SBC	R17,R3
     359 0924      SBC	R18,R4
     35A 0935      SBC	R19,R5
     35B 9040 014B LDS	R4,xishu+2
     35D 9050 014C LDS	R5,xishu+3
     35F 9020 0149 LDS	R2,xishu
     361 9030 014A LDS	R3,xishu+1
     363 925A      ST	R5,-Y
     364 924A      ST	R4,-Y
     365 923A      ST	R3,-Y
     366 922A      ST	R2,-Y
     367 940E 0956 CALL	empy32s
     369 9310 0166 STS	x2_post+1,R17
     36B 9300 0165 STS	x2_post,R16
     36D 9330 0168 STS	x2_post+3,R19
     36F 9320 0167 STS	x2_post+2,R18
(0079) 			y2_post = (latitude - y0_latitude)*111;
     371 9040 017B LDS	R4,y0_latitude+2
     373 9050 017C LDS	R5,y0_latitude+3
     375 9020 0179 LDS	R2,y0_latitude
     377 9030 017A LDS	R3,y0_latitude+1
     379 9080 018C LDS	R8,latitude+2
     37B 9090 018D LDS	R9,latitude+3
     37D 9060 018A LDS	R6,latitude
     37F 9070 018B LDS	R7,latitude+1
     381 1862      SUB	R6,R2
     382 0873      SBC	R7,R3
     383 0884      SBC	R8,R4
     384 0895      SBC	R9,R5
     385 E64F      LDI	R20,0x6F
     386 E050      LDI	R21,0
     387 E060      LDI	R22,0
     388 E070      LDI	R23,0
     389 929A      ST	R9,-Y
     38A 928A      ST	R8,-Y
     38B 927A      ST	R7,-Y
     38C 926A      ST	R6,-Y
     38D 018A      MOVW	R16,R20
     38E 019B      MOVW	R18,R22
     38F 940E 0956 CALL	empy32s
     391 9310 0162 STS	y2_post+1,R17
     393 9300 0161 STS	y2_post,R16
     395 9330 0164 STS	y2_post+3,R19
     397 9320 0163 STS	y2_post+2,R18
(0080) 			area += Get_Area(x1_post,y1_post,x2_post,y2_post);
     399 0118      MOVW	R2,R16
     39A 0129      MOVW	R4,R18
     39B 8628      STD	Y+8,R2
     39C 8639      STD	Y+9,R3
     39D 864A      STD	Y+10,R4
     39E 865B      STD	Y+11,R5
     39F 9040 0167 LDS	R4,x2_post+2
     3A1 9050 0168 LDS	R5,x2_post+3
     3A3 9020 0165 LDS	R2,x2_post
     3A5 9030 0166 LDS	R3,x2_post+1
     3A7 822C      STD	Y+4,R2
     3A8 823D      STD	Y+5,R3
     3A9 824E      STD	Y+6,R4
     3AA 825F      STD	Y+7,R5
     3AB 9040 016B LDS	R4,y1_post+2
     3AD 9050 016C LDS	R5,y1_post+3

⌨️ 快捷键说明

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