📄 gpt.lst
字号:
__text_start:
__start:
0059 EFCF LDI R28,0xFF
005A E1D0 LDI R29,0x10
005B BFCD OUT 0x3D,R28
005C BFDE OUT 0x3E,R29
005D 51C0 SUBI R28,0x10
005E 40D0 SBCI R29,0
005F EA0A LDI R16,0xAA
0060 8308 STD Y+0,R16
0061 2400 CLR R0
0062 E2E6 LDI R30,0x26
0063 E0F1 LDI R31,1
0064 E011 LDI R17,1
0065 33E6 CPI R30,0x36
0066 07F1 CPC R31,R17
0067 F011 BEQ 0x006A
0068 9201 ST R0,Z+
0069 CFFB RJMP 0x0065
006A 8300 STD Z+0,R16
006B E8EC LDI R30,0x8C
006C E0F0 LDI R31,0
006D E0A0 LDI R26,0
006E E0B1 LDI R27,1
006F E010 LDI R17,0
0070 3BE2 CPI R30,0xB2
0071 07F1 CPC R31,R17
0072 F021 BEQ 0x0077
0073 95C8 LPM
0074 9631 ADIW R30,1
0075 920D ST R0,X+
0076 CFF9 RJMP 0x0070
0077 940E00EC CALL _main
_exit:
0079 CFFF RJMP _exit
_delay:
i --> R20
t --> R16
007A 940E018D CALL push_gset1
FILE: C:\AVR\GPS\main.c
(0001) #include<iom128v.h>
(0002) #include<macros.h>
(0003) #define fosc 4000000 //晶振4MHZ
(0004) #define baud 2400 //波特率
(0005) #define com0
(0006)
(0007) #define U8 unsigned char
(0008) #define U16 unsigned int
(0009)
(0010) U8 StrGpsLgd[8];
(0011) U16 i;
(0012) U16 RecFlag;
(0013) U16 IGpsLgd;
(0014) U16 NumComa;
(0015)
(0016) void delay(U16 t)
(0017) {
007C C009 RJMP 0x0086
(0018) U16 i;
(0019) while(t--)
(0020) {
(0021) for (i=0;i<125;i++)
007D 2744 CLR R20
007E 2755 CLR R21
007F C002 RJMP 0x0082
0080 5F4F SUBI R20,0xFF
0081 4F5F SBCI R21,0xFF
0082 374D CPI R20,0x7D
0083 E0E0 LDI R30,0
0084 075E CPC R21,R30
0085 F3D0 BCS 0x0080
0086 0118 MOVW R2,R16
0087 5001 SUBI R16,1
0088 4010 SBCI R17,0
0089 2022 TST R2
008A F791 BNE 0x007D
008B 2033 TST R3
008C F781 BNE 0x007D
008D 940E0190 CALL pop_gset1
008F 9508 RET
(0022) {}
(0023) }
(0024) }
(0025)
(0026) void uart0_init(void)
(0027) {
(0028) UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
0090 2422 CLR R2
0091 B82A OUT 0x0A,R2
(0029) UCSR0A = 0x00;
0092 B82B OUT 0x0B,R2
(0030) UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
0093 E086 LDI R24,6
0094 93800095 STS 0x95,R24
(0031) UBRR0L=(fosc/16/(baud+1))%256;
0096 E688 LDI R24,0x68
0097 B989 OUT 0x09,R24
(0032) UBRR0H=(fosc/16/(baud+1))/256;
0098 92200090 STS 0x90,R2
(0033) UCSR0B =(1<<RXEN0)|(1<<TXEN0);//RXCEN TXCEN
009A E188 LDI R24,0x18
009B B98A OUT 0x0A,R24
009C 9508 RET
(0034) }
(0035) void uart1_init(void)
(0036) {
(0037) UCSR1B = 0x00; //disable while setting baud rate
_uart1_init:
009D 2422 CLR R2
009E 9220009A STS 0x9A,R2
(0038) UCSR1A = 0x00;
00A0 9220009B STS 0x9B,R2
(0039) UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);//8bit+1bit stop
00A2 E086 LDI R24,6
00A3 9380009D STS 0x9D,R24
(0040) UBRR1L=(fosc/16/(baud+1))%256;
00A5 E688 LDI R24,0x68
00A6 93800099 STS 0x99,R24
(0041) UBRR1H=(fosc/16/(baud+1))/256;
00A8 92200098 STS 0x98,R2
(0042) UCSR1B =(1<<RXEN1)|(1<<TXEN1);//RXCEN TXCEN
00AA E188 LDI R24,0x18
00AB 9380009A STS 0x9A,R24
00AD 9508 RET
(0043) }
(0044) void putchar0(unsigned char c)
(0045) {
(0046) while (!(UCSR0A&(1<<UDRE0)));
_putchar0:
c --> R16
00AE 9B5D SBIS 0x0B,5
00AF CFFE RJMP _putchar0
(0047) UDR0=c;
00B0 B90C OUT 0x0C,R16
00B1 9508 RET
(0048) }
(0049) void putchar1(unsigned char c)
(0050) {
(0051) while (!(UCSR1A&(1<<UDRE1)));
_putchar1:
c --> R16
00B2 9020009B LDS R2,0x9B
00B4 FE25 SBRS R2,5
00B5 CFFC RJMP _putchar1
(0052) UDR1=c;
00B6 9300009C STS 0x9C,R16
00B8 9508 RET
(0053) }
(0054) unsigned char getchar0(void)
(0055) {
(0056) while(!(UCSR0A& (1<<RXC0)));
_getchar0:
00B9 9B5F SBIS 0x0B,7
00BA CFFE RJMP _getchar0
(0057) return UDR0;
00BB B10C IN R16,0x0C
00BC 9508 RET
(0058) }
(0059) unsigned char getchar1(void)
(0060) {
(0061) while(!(UCSR1A& (1<<RXC1)));
_getchar1:
00BD 9020009B LDS R2,0x9B
00BF FE27 SBRS R2,7
00C0 CFFC RJMP _getchar1
(0062) return UDR1;
00C1 9100009C LDS R16,0x9C
00C3 9508 RET
_puts0:
s --> R20
00C4 940E018D CALL push_gset1
00C6 01A8 MOVW R20,R16
(0063) }
(0064) void puts0(char *s)
(0065) {
00C7 C005 RJMP 0x00CD
(0066) while (*s)
(0067) {
(0068) putchar0(*s);
00C8 01FA MOVW R30,R20
00C9 8100 LDD R16,Z+0
00CA DFE3 RCALL _putchar0
(0069) s++;
00CB 5F4F SUBI R20,0xFF
00CC 4F5F SBCI R21,0xFF
00CD 01FA MOVW R30,R20
00CE 8020 LDD R2,Z+0
00CF 2022 TST R2
00D0 F7B9 BNE 0x00C8
(0070) }
(0071) putchar0(0x0a);
00D1 E00A LDI R16,0xA
00D2 DFDB RCALL _putchar0
(0072) putchar0(0x0d);
00D3 E00D LDI R16,0xD
00D4 DFD9 RCALL _putchar0
00D5 940E0190 CALL pop_gset1
00D7 9508 RET
_puts1:
s --> R20
00D8 940E018D CALL push_gset1
00DA 01A8 MOVW R20,R16
(0073) }
(0074) void puts1(char *s)
(0075) {
00DB C005 RJMP 0x00E1
(0076) while (*s)
(0077) {
(0078) putchar1(*s);
00DC 01FA MOVW R30,R20
00DD 8100 LDD R16,Z+0
00DE DFD3 RCALL _putchar1
(0079) s++;
00DF 5F4F SUBI R20,0xFF
00E0 4F5F SBCI R21,0xFF
00E1 01FA MOVW R30,R20
00E2 8020 LDD R2,Z+0
00E3 2022 TST R2
00E4 F7B9 BNE 0x00DC
(0080) }
(0081) putchar1(0x0a);
00E5 E00A LDI R16,0xA
00E6 DFCB RCALL _putchar1
(0082) putchar1(0x0d);
00E7 E00D LDI R16,0xD
00E8 DFC9 RCALL _putchar1
00E9 940E0190 CALL pop_gset1
00EB 9508 RET
(0083) }
(0084) void main(void)
(0085) {
(0086) unsigned char i;
(0087) #ifdef com0
(0088) uart0_init();
_main:
i --> Y+1
00EC DFA3 RCALL _uart0_init
(0089) puts0("HELLO!");
00ED E10F LDI R16,0x1F
00EE E011 LDI R17,1
00EF DFD4 RCALL _puts0
(0090) #else
(0091) uart1_init();
(0092) puts1("HELLO!");
(0093) #endif
(0094) //启动GPS
(0095) puts0("0x24");
00F0 E10A LDI R16,0x1A
00F1 E011 LDI R17,1
00F2 DFD1 RCALL _puts0
(0096) delay(10);
00F3 E00A LDI R16,0xA
00F4 E010 LDI R17,0
00F5 DF84 RCALL _delay
(0097) puts0("P");
00F6 E108 LDI R16,0x18
00F7 E011 LDI R17,1
00F8 DFCB RCALL _puts0
(0098) delay(10);
00F9 E00A LDI R16,0xA
00FA E010 LDI R17,0
00FB DF7E RCALL _delay
(0099) puts0("G");
00FC E106 LDI R16,0x16
00FD E011 LDI R17,1
00FE DFC5 RCALL _puts0
(0100) delay(10);
00FF E00A LDI R16,0xA
0100 E010 LDI R17,0
0101 DF78 RCALL _delay
(0101) puts0("R");
0102 E104 LDI R16,0x14
0103 E011 LDI R17,1
0104 DFBF RCALL _puts0
(0102) delay(10);
0105 E00A LDI R16,0xA
0106 E010 LDI R17,0
0107 DF72 RCALL _delay
(0103) puts0("M");
0108 E102 LDI R16,0x12
0109 E011 LDI R17,1
010A DFB9 RCALL _puts0
(0104) delay(10);
010B E00A LDI R16,0xA
010C E010 LDI R17,0
010D DF6C RCALL _delay
(0105) puts0("O");
010E E100 LDI R16,0x10
010F E011 LDI R17,1
0110 DFB3 RCALL _puts0
(0106) delay(10);
0111 E00A LDI R16,0xA
0112 E010 LDI R17,0
0113 DF66 RCALL _delay
(0107) puts0(",");
0114 E00E LDI R16,0xE
0115 E011 LDI R17,1
0116 DFAD RCALL _puts0
(0108) delay(10);
0117 E00A LDI R16,0xA
0118 E010 LDI R17,0
0119 DF60 RCALL _delay
(0109) puts0("G");
011A E106 LDI R16,0x16
011B E011 LDI R17,1
011C DFA7 RCALL _puts0
(0110) delay(10);
011D E00A LDI R16,0xA
011E E010 LDI R17,0
011F DF5A RCALL _delay
(0111) puts0("P");
0120 E108 LDI R16,0x18
0121 E011 LDI R17,1
0122 DFA1 RCALL _puts0
(0112) delay(10);
0123 E00A LDI R16,0xA
0124 E010 LDI R17,0
0125 DF54 RCALL _delay
(0113) puts0("R");
0126 E104 LDI R16,0x14
0127 E011 LDI R17,1
0128 DF9B RCALL _puts0
(0114) delay(10);
0129 E00A LDI R16,0xA
012A E010 LDI R17,0
012B DF4E RCALL _delay
(0115) puts0("M");
012C E102 LDI R16,0x12
012D E011 LDI R17,1
012E DF95 RCALL _puts0
(0116) delay(10);
012F E00A LDI R16,0xA
0130 E010 LDI R17,0
0131 DF48 RCALL _delay
(0117) puts0("C");
0132 E00C LDI R16,0xC
0133 E011 LDI R17,1
0134 DF8F RCALL _puts0
(0118) delay(10);
0135 E00A LDI R16,0xA
0136 E010 LDI R17,0
0137 DF42 RCALL _delay
(0119) puts0(",");
0138 E009 LDI R16,0x9
0139 E011 LDI R17,1
013A DF89 RCALL _puts0
(0120) delay(10);
013B E00A LDI R16,0xA
013C E010 LDI R17,0
013D DF3C RCALL _delay
(0121) puts0("1");
013E E007 LDI R16,7
013F E011 LDI R17,1
0140 DF83 RCALL _puts0
(0122) delay(10);
0141 E00A LDI R16,0xA
0142 E010 LDI R17,0
0143 DF36 RCALL _delay
(0123) puts0("0x2a");
0144 E002 LDI R16,2
0145 E011 LDI R17,1
0146 DF7D RCALL _puts0
(0124)
(0125)
(0126)
(0127) //关GPS
(0128) puts0("0x24");
0147 E10A LDI R16,0x1A
0148 E011 LDI R17,1
0149 DF7A RCALL _puts0
(0129) delay(10);
014A E00A LDI R16,0xA
014B E010 LDI R17,0
014C DF2D RCALL _delay
(0130) puts0("P");
014D E108 LDI R16,0x18
014E E011 LDI R17,1
014F DF74 RCALL _puts0
(0131) delay(10);
0150 E00A LDI R16,0xA
0151 E010 LDI R17,0
0152 DF27 RCALL _delay
(0132) puts0("G");
0153 E106 LDI R16,0x16
0154 E011 LDI R17,1
0155 DF6E RCALL _puts0
(0133) delay(10);
0156 E00A LDI R16,0xA
0157 E010 LDI R17,0
0158 DF21 RCALL _delay
(0134) puts0("R");
0159 E104 LDI R16,0x14
015A E011 LDI R17,1
015B DF68 RCALL _puts0
(0135) delay(10);
015C E00A LDI R16,0xA
015D E010 LDI R17,0
015E DF1B RCALL _delay
(0136) puts0("M");
015F E102 LDI R16,0x12
0160 E011 LDI R17,1
0161 DF62 RCALL _puts0
(0137) delay(10);
0162 E00A LDI R16,0xA
0163 E010 LDI R17,0
0164 DF15 RCALL _delay
(0138) puts0("O");
0165 E100 LDI R16,0x10
0166 E011 LDI R17,1
0167 DF5C RCALL _puts0
(0139) delay(10);
0168 E00A LDI R16,0xA
0169 E010 LDI R17,0
016A DF0F RCALL _delay
(0140) puts0(",");
016B E00E LDI R16,0xE
016C E011 LDI R17,1
016D DF56 RCALL _puts0
(0141) delay(10);
016E E00A LDI R16,0xA
016F E010 LDI R17,0
0170 DF09 RCALL _delay
(0142) puts0(",");
0171 E00E LDI R16,0xE
0172 E011 LDI R17,1
0173 DF50 RCALL _puts0
(0143) delay(10);
0174 E00A LDI R16,0xA
0175 E010 LDI R17,0
0176 DF03 RCALL _delay
(0144) puts0("2");
0177 E000 LDI R16,0
0178 E011 LDI R17,1
0179 DF4A RCALL _puts0
(0145) delay(10);
017A E00A LDI R16,0xA
017B E010 LDI R17,0
017C DEFD RCALL _delay
(0146) puts0("0x2a");
017D E002 LDI R16,2
017E E011 LDI R17,1
017F DF44 RCALL _puts0
(0147) delay(10);
0180 E00A LDI R16,0xA
0181 E010 LDI R17,0
0182 DEF7 RCALL _delay
(0148)
(0149)
(0150)
(0151) while(1)
FILE: <library>
0183 CFFF RJMP 0x0183
0184 9508 RET
push_gset5:
0185 92FA ST R15,-Y
0186 92EA ST R14,-Y
push_gset4:
0187 92DA ST R13,-Y
0188 92CA ST R12,-Y
push_gset3:
0189 92BA ST R11,-Y
018A 92AA ST R10,-Y
push_gset2:
018B 937A ST R23,-Y
018C 936A ST R22,-Y
push_gset1:
018D 935A ST R21,-Y
018E 934A ST R20,-Y
018F 9508 RET
pop_gset1:
0190 E0E1 LDI R30,1
pop:
0191 9149 LD R20,Y+
0192 9159 LD R21,Y+
0193 FDE0 SBRC R30,0
0194 9508 RET
0195 9169 LD R22,Y+
0196 9179 LD R23,Y+
0197 FDE1 SBRC R30,1
0198 9508 RET
0199 90A9 LD R10,Y+
019A 90B9 LD R11,Y+
019B FDE2 SBRC R30,2
019C 9508 RET
019D 90C9 LD R12,Y+
019E 90D9 LD R13,Y+
019F FDE3 SBRC R30,3
01A0 9508 RET
01A1 90E9 LD R14,Y+
01A2 90F9 LD R15,Y+
01A3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -