📄 gps-1280.lst
字号:
(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 + -