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

📄 gps-1280.lst

📁 u-blox的GPS模块LEA-5x,三本例子为ATMEGA1280对他的操作的程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0131) 				//径度
(0132) 				radian(&data[mes_addr + 32]);
     414 018B      MOVW	R16,R22
     415 5E00      SUBI	R16,0xE0
     416 4F1F      SBCI	R17,0xFF
     417 0D0A      ADD	R16,R10
     418 1D1B      ADC	R17,R11
     419 DF84      RCALL	_radian
(0133) 				//地面速度
(0134) 				speed(&data[mes_addr + 46]);
     41A 018B      MOVW	R16,R22
     41B 5D02      SUBI	R16,0xD2
     41C 4F1F      SBCI	R17,0xFF
     41D 0D0A      ADD	R16,R10
     41E 1D1B      ADC	R17,R11
     41F DF9C      RCALL	_speed
(0135) 				//
(0136) 				debug_str("");
     420 E40C      LDI	R16,0x4C
     421 E012      LDI	R17,2
     422 940E 0104 CALL	_debug_str
(0137) 			}
     424 C015      RJMP	0x043A
(0138) 			else if(availability_flag_2 == 'V'){//无效数据(这个有时间返回)
     425 2D8C      MOV	R24,R12
     426 3586      CPI	R24,0x56
     427 F439      BNE	0x042F
(0139) 				//debug_str("gps data invalid !");
(0140) 				//<1> 当前位置的格林尼治时间,格式为hhmmss
(0141) 				Greenwich_time(&data[mes_addr + 7]);				
     428 018B      MOVW	R16,R22
     429 5F09      SUBI	R16,0xF9
     42A 4F1F      SBCI	R17,0xFF
     42B 0D0A      ADD	R16,R10
     42C 1D1B      ADC	R17,R11
     42D DF29      RCALL	_Greenwich_time
(0142) 			}
     42E C00B      RJMP	0x043A
(0143) 			else if(availability_flag_1 == 'V'){//无效数据
     42F 3546      CPI	R20,0x56
     430 F429      BNE	0x0436
(0144) 				debug_str("gps data invalid !");
     431 E00E      LDI	R16,0xE
     432 E012      LDI	R17,2
     433 940E 0104 CALL	_debug_str
(0145) 			}
     435 C004      RJMP	0x043A
(0146) 			else{//信息有误或处理出错
(0147) 				debug_str("gps error !");
     436 E002      LDI	R16,2
     437 E012      LDI	R17,2
     438 940E 0104 CALL	_debug_str
(0148) 			}
(0149) 		}
(0150) 	}
(0151) 	return 1;
     43A E001      LDI	R16,1
     43B 9622      ADIW	R28,2
     43C 940C 0662 JMP	pop_xgsetF0FC
FILE: E:\item\GPS-1280\main.c
(0001) //ICC-AVR application builder : 2008-10-26 13:13:33
(0002) // Target : m1280
(0003) // Crystal: 14.7456Mhz
(0004) 
(0005) #include <iom1280v.h>
(0006) #include <macros.h>
(0007) #include "uart3.h"
(0008) #include "debug.h"
(0009) #include "watchdog.h"
(0010) 
(0011) void init_devices(void)
(0012) {
(0013) 	CLI(); 
_init_devices:
     43E 94F8      BCLR	7
(0014) 	//--------------------------------
(0015) 	DDRJ|=(1<<3);	//开GPS模块电源
     43F 9180 0104 LDS	R24,0x0104
     441 6088      ORI	R24,0x8
     442 9380 0104 STS	0x0104,R24
(0016) 	PORTJ|=(1<<3);
     444 9180 0105 LDS	R24,0x0105
     446 6088      ORI	R24,0x8
     447 9380 0105 STS	0x0105,R24
(0017) 	//--------------------------------
(0018) 	DDRG|=(1<<5);	//开GPRS,xflsh电源
     449 9A9D      SBI	0x13,5
(0019) 	PORTG|=(1<<5);
     44A 9AA5      SBI	0x14,5
(0020) 	//--------------------------------
(0021) 	watchdog_init();
     44B 940E 0589 CALL	_watchdog_init
(0022) 	uart3_init();
     44D 940E 0479 CALL	_uart3_init
(0023) 	SEI();
     44F 9478      BSET	7
     450 9508      RET
(0024) }
(0025) 
(0026) void main(void)
(0027) {
(0028) 	init_devices();
_main:
     451 DFEC      RCALL	_init_devices
(0029) 	debug_str("GPS ^_^");
     452 E601      LDI	R16,0x61
     453 E012      LDI	R17,2
     454 940E 0104 CALL	_debug_str
     456 C004      RJMP	0x045B
(0030) 	
(0031) 	while(1)
(0032) 	{
(0033) 		watchdog_set();
     457 940E 058D CALL	_watchdog_set
(0034) 		uart3_function();
     459 940E 04D1 CALL	_uart3_function
     45B CFFB      RJMP	0x0457
     45C 9508      RET
FILE: E:\item\GPS-1280\uart3.c
(0001) #include <iom1280v.h>
(0002) #include <macros.h>
(0003) #include "define.h"
(0004) #include "gps.h"
(0005) 
(0006) uart uart3;
(0007) 
(0008) uchar uart3_recv_buf[1000];
(0009) 
(0010) //-------------------------------------------------------------
(0011) void uart3_register_init(void)
(0012) { 	
(0013) 	//U2X3=1
(0014) 	UCSR3A=(1<<U2X3);   
_uart3_register_init:
     45D E082      LDI	R24,2
     45E 9380 0130 STS	0x0130,R24
(0015) 	//异步模式,数据格式:8位数据位,1位停止位,无奇偶校验
(0016) 	UCSR3C=( (1<<UCSZ31) | (1<<UCSZ30) );		
     460 E086      LDI	R24,6
     461 9380 0132 STS	0x0132,R24
(0017) 	//Focs=14.7456MHZ  baudrate=9600
(0018) 	UBRR3H=0x00;	
     463 2422      CLR	R2
     464 9220 0135 STS	0x0135,R2
(0019) 	UBRR3L=191;
     466 EB8F      LDI	R24,0xBF
     467 9380 0134 STS	0x0134,R24
(0020) 	//发送和接收使能
(0021) 	UCSR3B |=(1<<RXEN3);
     469 9180 0131 LDS	R24,0x0131
     46B 6180      ORI	R24,0x10
     46C 9380 0131 STS	0x0131,R24
(0022) 	UCSR3B |=(1<<TXEN3);
     46E 9180 0131 LDS	R24,0x0131
     470 6088      ORI	R24,0x8
     471 9380 0131 STS	0x0131,R24
(0023) 	//接收中断使能
(0024) 	UCSR3B |=(1<<RXCIE3);
     473 9180 0131 LDS	R24,0x0131
     475 6880      ORI	R24,0x80
     476 9380 0131 STS	0x0131,R24
     478 9508      RET
(0025) }
(0026) //-------------------------------------------------------------
(0027) void uart3_init(void)
(0028) {
(0029) 	uart3_register_init();
_uart3_init:
     479 DFE3      RCALL	_uart3_register_init
(0030) 	
(0031) 	uart3.state			= UART_STATE_NULL;
     47A 2422      CLR	R2
     47B 9220 0651 STS	uart3,R2
(0032) 	uart3.time			= UART_TIME;
     47D E888      LDI	R24,0x88
     47E E193      LDI	R25,0x13
     47F E0A0      LDI	R26,0
     480 E0B0      LDI	R27,0
     481 9390 0653 STS	uart3+2,R25
     483 9380 0652 STS	uart3+1,R24
     485 93B0 0655 STS	0x0655,R27
     487 93A0 0654 STS	uart3+3,R26
(0033) 	uart3.last_recv_len	= 0;
     489 2433      CLR	R3
     48A 9230 0657 STS	0x0657,R3
     48C 9220 0656 STS	0x0656,R2
(0034) 	uart3.recv_len		= 0;
     48E 9230 0659 STS	0x0659,R3
     490 9220 0658 STS	0x0658,R2
(0035) 	uart3.send_len		= 0;
     492 9230 065B STS	0x065B,R3
     494 9220 065A STS	0x065A,R2
     496 9508      RET
_uart3_rx_isr:
     497 922A      ST	R2,-Y
     498 938A      ST	R24,-Y
     499 939A      ST	R25,-Y
     49A 93EA      ST	R30,-Y
     49B 93FA      ST	R31,-Y
     49C B62F      IN	R2,0x3F
     49D 922A      ST	R2,-Y
(0036) }
(0037) //-------------------------------------------------------------
(0038) #pragma interrupt_handler uart3_rx_isr:iv_USART3_RXC
(0039) void uart3_rx_isr(void)
(0040) {	
(0041) 	uart3_recv_buf[uart3.recv_len]=UDR3;
     49E E689      LDI	R24,0x69
     49F E092      LDI	R25,2
     4A0 91E0 0658 LDS	R30,0x0658
     4A2 91F0 0659 LDS	R31,0x0659
     4A4 0FE8      ADD	R30,R24
     4A5 1FF9      ADC	R31,R25
     4A6 9020 0136 LDS	R2,0x0136
     4A8 8220      STD	Z+0,R2
(0042) 	(uart3.recv_len)++;
     4A9 9180 0658 LDS	R24,0x0658
     4AB 9190 0659 LDS	R25,0x0659
     4AD 9601      ADIW	R24,1
     4AE 9390 0659 STS	0x0659,R25
     4B0 9380 0658 STS	0x0658,R24
     4B2 9029      LD	R2,Y+
     4B3 BE2F      OUT	0x3F,R2
     4B4 91F9      LD	R31,Y+
     4B5 91E9      LD	R30,Y+
     4B6 9199      LD	R25,Y+
     4B7 9189      LD	R24,Y+
     4B8 9029      LD	R2,Y+
     4B9 9518      RETI
(0043) }
(0044) //-------------------------------------------------------------
(0045) bool uart0_check_rev_data(void)
(0046) {
(0047) 	if((uart3.last_recv_len) != (uart3.recv_len)){
_uart0_check_rev_data:
     4BA 9020 0658 LDS	R2,0x0658
     4BC 9030 0659 LDS	R3,0x0659
     4BE 9040 0656 LDS	R4,0x0656
     4C0 9050 0657 LDS	R5,0x0657
     4C2 1442      CP	R4,R2
     4C3 0453      CPC	R5,R3
     4C4 F051      BEQ	0x04CF
(0048) 		(uart3.last_recv_len) = (uart3.recv_len);
     4C5 9020 0658 LDS	R2,0x0658
     4C7 9030 0659 LDS	R3,0x0659
     4C9 9230 0657 STS	0x0657,R3
     4CB 9220 0656 STS	0x0656,R2
(0049) 		return true;
     4CD E001      LDI	R16,1
     4CE C001      RJMP	0x04D0
(0050) 	}
(0051) 	return false;
     4CF 2700      CLR	R16
     4D0 9508      RET
_uart3_function:
     4D1 940E 0678 CALL	push_xgset300C
(0052) }
(0053) //-------------------------------------------------------------
(0054) unsigned char uart3_function(void)
(0055) {
(0056) 	switch(uart3.state)
     4D3 9140 0651 LDS	R20,uart3
     4D5 2755      CLR	R21
     4D6 3040      CPI	R20,0
     4D7 0745      CPC	R20,R21
     4D8 F079      BEQ	0x04E8
     4D9 3041      CPI	R20,1
     4DA E0E0      LDI	R30,0
     4DB 075E      CPC	R21,R30
     4DC F149      BEQ	0x0506
     4DD 3042      CPI	R20,2
     4DE E0E0      LDI	R30,0
     4DF 075E      CPC	R21,R30
     4E0 F409      BNE	0x04E2
     4E1 C038      RJMP	0x051A
     4E2 3043      CPI	R20,3
     4E3 E0E0      LDI	R30,0
     4E4 075E      CPC	R21,R30
     4E5 F409      BNE	0x04E7
     4E6 C065      RJMP	0x054C
     4E7 C07D      RJMP	0x0565
(0057) 	{
(0058) 		case UART_STATE_NULL:
(0059) 			uart3.state			= UART_STATE_CHECK_RECV;
     4E8 E081      LDI	R24,1
     4E9 9380 0651 STS	uart3,R24
(0060) 			uart3.time			= UART_TIME;
     4EB E888      LDI	R24,0x88
     4EC E193      LDI	R25,0x13
     4ED E0A0      LDI	R26,0
     4EE E0B0      LDI	R27,0
     4EF 9390 0653 STS	uart3+2,R25
     4F1 9380 0652 STS	uart3+1,R24
     4F3 93B0 0655 STS	0x0655,R27
     4F5 93A0 0654 STS	uart3+3,R26
(0061) 			uart3.last_recv_len	= 0;
     4F7 2422      CLR	R2
     4F8 2433      CLR	R3
     4F9 9230 0657 STS	0x0657,R3
     4FB 9220 0656 STS	0x0656,R2
(0062) 			uart3.recv_len		= 0;
     4FD 9230 0659 STS	0x0659,R3
     4FF 9220 0658 STS	0x0658,R2
(0063) 			uart3.send_len		= 0;
     501 9230 065B STS	0x065B,R3
     503 9220 065A STS	0x065A,R2
(0064) 		break;
     505 C062      RJMP	0x0568
(0065) 
(0066) 		case UART_STATE_CHECK_RECV:
(0067) 			if(uart0_check_rev_data()==TRUE){
     506 DFB3      RCALL	_uart0_check_rev_data
     507 3001      CPI	R16,1
     508 F009      BEQ	0x050A
     509 C05E      RJMP	0x0568
(0068) 				uart3.state = UART_STATE_RECVING_DATA;
     50A E082      LDI	R24,2
     50B 9380 0651 STS	uart3,R24
(0069) 				uart3.time = UART_TIME;
     50D E888      LDI	R24,0x88
     50E E193      LDI	R25,0x13
     50F E0A0      LDI	R26,0
     510 E0B0      LDI	R27,0
     511 9390 0653 STS	uart3+2,R25
     513 9380 0652 STS	uart3+1,R24
     515 93B0 0655 STS	0x0655,R27
     517 93A0 0654 STS	uart3+3,R26
(0070) 	        }else{
(0071) 			}
(0072) 		break;
     519 C04E      RJMP	0x0568
(0073) 
(0074) 		case UART_STATE_RECVING_DATA:
(0075) 			if(uart0_check_rev_data()){
     51A DF9F      RCALL	_uart0_check_rev_data
     51B 2300      TST	R16
     51C F069      BEQ	0x052A
(0076) 				uart3.time = UART_TIME;
     51D E888      LDI	R24,0x88
     51E E193      LDI	R25,0x13
     51F E0A0      LDI	R26,0
     520 E0B0      LDI	R27,0
     521 9390 0653 STS	uart3+2,R25
     523 9380 0652 STS	uart3+1,R24
     525 93B0 0655 STS	0x0655,R27
     527 93A0 0654 STS	uart3+3,R26
(0077) 			}else{
     529 C03E      RJMP	0x0568
(0078) 				(uart3.time)--;
     52A E081      LDI	R24,1
     52B E090      LDI	R25,0
     52C E0A0      LDI	R26,0
     52D E0B0      LDI	R27,0
     52E 9040 0654 LDS	R4,uart3+3
     530 9050 0655 LDS	R5,0x0655
     532 9020 0652 LDS	R2,uart3+1
     534 9030 0653 LDS	R3,uart3+2
     536 1A28      SUB	R2,R24
     537 0A39      SBC	R3,R25
     538 0A4A      SBC	R4,R26
     539 0A5B      SBC	R5,R27
     53A 9230 0653 STS	uart3+2,R3
     53C 9220 0652 STS	uart3+1,R2
     53E 9250 0655 STS	0x0655,R5
     540 9240 0654 STS	uart3+3,R4
(0079) 				if(!(uart3.time)){
     542 9488      BCLR	0
     543 2022      TST	R2
     544 0432      CPC	R3,R2
     545 0442      CPC	R4,R2
     546 0452      CPC	R5,R2
     547 F501      BNE	0x0568
(0080) 					uart3.state = UART_STATE_DISPOSE_DATA;
     548 E083      LDI	R24,3
     549 9380 0651 STS	uart3,R24
(0081) 				}
(0082) 			}
(0083) 		break;
     54B C01C      RJMP	0x0568
(0084) 
(0085) 		case UART_STATE_DISPOSE_DATA:
(0086) 			uart3.last_recv_len	=0;
     54C 2422      CLR	R2
     54D 2433      CLR	R3
     54E 9230 0657 STS	0x0657,R3
     550 9220 0656 STS	0x0656,R2
(0087) 			uart3.state = UART_STATE_NULL;
     552 9220 0651 STS	uart3,R2
(0088) 			//add function here
(0089) 			CLI();
     554 94F8      BCLR	7
(0090) 			gps_function(uart3_recv_buf,uart3.recv_len);
     555 9120 0658 LDS	R18,0x0658
     557 9130 0659 LDS	R19,0x0659
     559 E609      LDI	R16,0x69
     55A E012      LDI	R17,2
     55B 940E 03DB CALL	_gps_function
(0091) 			//set recv lengh zero
(0092) 			uart3.recv_len	= 0;
     55D 2422      CLR	R2
     55E 2433      CLR	R3
     55F 9230 0659 STS	0x0659,R3
     561 9220 0658 STS	0x0658,R2
(0093) 			SEI();
     563 9478      BSET	7

⌨️ 快捷键说明

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