📄 gps20080503icc.lst
字号:
__start:
__text_start:
61 E5CF LDI R28,0x5F
62 E0D4 LDI R29,4
63 BFCD OUT 0x3D,R28
64 BFDE OUT 0x3E,R29
65 52C0 SUBI R28,0x20
66 40D0 SBCI R29,0
67 EA0A LDI R16,0xAA
68 8308 STD Y+0,R16
69 2400 CLR R0
6A E7E4 LDI R30,0x74
6B E0F0 LDI R31,0
6C E011 LDI R17,1
6D 3AE3 CPI R30,0xA3
6E 07F1 CPC R31,R17
6F F011 BEQ 0x0072
70 9201 ST R0,Z+
71 CFFB RJMP 0x006D
72 8300 STD Z+0,R16
73 EAEE LDI R30,0xAE
74 E0F0 LDI R31,0
75 E6A0 LDI R26,0x60
76 E0B0 LDI R27,0
77 E010 LDI R17,0
78 E000 LDI R16,0
79 BF0B OUT 0x3B,R16
7A 3CE2 CPI R30,0xC2
7B 07F1 CPC R31,R17
7C F021 BEQ 0x0081
7D 95C8 LPM
7E 9631 ADIW R30,1
7F 920D ST R0,X+
80 CFF9 RJMP 0x007A
81 940E 026A CALL _main
_exit:
83 CFFF RJMP _exit
FILE: D:\SOURCE~1\gps20080503\initrialm16.h
(0001) //ICC-AVR application builder : 2007-6-27 10:26:06
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) /**************初始化m8函数***************/
(0006) #ifndef Initrial_M16_H
(0007) #define Initrial_M16_H
(0008)
(0009) /**************************************************************
(0010) **函数名称 :void init_devices(void)
(0011) **函数功能 :初始化设备
(0012) **输入参数 :无
(0013) **返回值 :无
(0014) **外定义变量:无
(0015) **调用的函数:无
(0016) **************************************************************/
(0017) void Init_Devices(void);
(0018)
(0019) /**************************************************************
(0020) **函数名称 :void port_init(void)
(0021) **函数功能 :初始化端口
(0022) **输入参数 :无
(0023) **返回值 :无
(0024) **外定义变量:无
(0025) **调用的函数: Port_init();
(0026) **************************************************************/
(0027) void Port_Init(void);
(0028) void Init_Devices(void);
(0029) void uart0_init(void);
(0030) void uart0_rx_isr(void);
(0031) extern void Get_GPRMC_data(void);//提取GPRMC数据
(0032)
(0033)
(0034) //call this routine to initialize all peripherals
(0035) void Init_Devices(void)
(0036) {
(0037) //stop errant interrupts until set up
(0038) CLI(); //disable all interrupts
_Init_Devices:
84 94F8 BCLR 7
(0039) Port_Init();
85 D007 RCALL _Port_Init
(0040) uart0_init();
86 D014 RCALL _uart0_init
(0041) MCUCR = 0x00;
87 2422 CLR R2
88 BE25 OUT 0x35,R2
(0042) GICR = 0x00;
89 BE2B OUT 0x3B,R2
(0043) TIMSK = 0x00; //timer interrupt sources
8A BE29 OUT 0x39,R2
(0044) SEI(); //re-enable interrupts
8B 9478 BSET 7
8C 9508 RET
(0045) //all peripherals are now initialized
(0046) }
(0047)
(0048) void Port_Init(void)
(0049) {
(0050) PORTB = 0xFF;
_Port_Init:
8D EF8F LDI R24,0xFF
8E BB88 OUT 0x18,R24
(0051) DDRB = 0xFF;
8F BB87 OUT 0x17,R24
(0052) PORTC = 0x7F; //m103 output only
90 E78F LDI R24,0x7F
91 BB85 OUT 0x15,R24
(0053) DDRC = 0x7F;
92 BB84 OUT 0x14,R24
(0054) PORTD = 0xFF;
93 EF8F LDI R24,0xFF
94 BB82 OUT 0x12,R24
(0055) DDRD = 0xFF;
95 BB81 OUT 0x11,R24
(0056)
(0057) DDRD &=~ BIT(PD0);
96 9888 CBI 0x11,0
(0058) PORTD &= ~ BIT(PD0);
97 9890 CBI 0x12,0
(0059)
(0060) DDRA &=~ BIT(PA1);//按键
98 98D1 CBI 0x1A,1
(0061) DDRA &=~ BIT(PA3);
99 98D3 CBI 0x1A,3
9A 9508 RET
(0062) //PORTA &= ~ BIT(PA5);
(0063) //PORTA &= ~ BIT(PA7);
(0064)
(0065)
(0066)
(0067) }
(0068)
(0069) //UART0 initialize
(0070) // desired baud rate: 9600
(0071) // actual: baud rate:9615 (0.2%)
(0072) void uart0_init(void)
(0073) {
(0074) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
9B 2422 CLR R2
9C B82A OUT 0x0A,R2
(0075) UCSRA = 0x00;
9D B82B OUT 0x0B,R2
(0076) UCSRC = BIT(URSEL) | 0x06;
9E E886 LDI R24,0x86
9F BD80 OUT 0x20,R24
(0077) UBRRL = 0x33; //set baud rate lo
A0 E383 LDI R24,0x33
A1 B989 OUT 0x09,R24
(0078) UBRRH = 0x00; //set baud rate hi
A2 BC20 OUT 0x20,R2
(0079) UCSRB = 0x98;
A3 E988 LDI R24,0x98
A4 B98A OUT 0x0A,R24
A5 9508 RET
_uart0_rx_isr:
data --> R20
A6 920A ST R0,-Y
A7 921A ST R1,-Y
A8 922A ST R2,-Y
A9 923A ST R3,-Y
AA 924A ST R4,-Y
AB 925A ST R5,-Y
AC 926A ST R6,-Y
AD 927A ST R7,-Y
AE 928A ST R8,-Y
AF 929A ST R9,-Y
B0 930A ST R16,-Y
B1 931A ST R17,-Y
B2 932A ST R18,-Y
B3 933A ST R19,-Y
B4 938A ST R24,-Y
B5 939A ST R25,-Y
B6 93AA ST R26,-Y
B7 93BA ST R27,-Y
B8 93EA ST R30,-Y
B9 93FA ST R31,-Y
BA B60F IN R0,0x3F
BB 920A ST R0,-Y
BC 934A ST R20,-Y
(0080) }
(0081)
(0082) #pragma interrupt_handler uart0_rx_isr:12
(0083) void uart0_rx_isr(void)
(0084) {
(0085) char data;
(0086) data = UDR;
BD B14C IN R20,0x0C
(0087) if(data == '$')//开始字符
BE 3244 CPI R20,0x24
BF F441 BNE 0x00C8
(0088) {
(0089) usart_flag |= BIT(SINK0_START);
C0 9180 007E LDS R24,usart_flag
C2 6081 ORI R24,1
C3 9380 007E STS usart_flag,R24
(0090) sink0_count = 0;
C5 2422 CLR R2
C6 9220 007F STS sink0_count,R2
(0091) }
(0092) if(usart_flag & BIT(SINK0_START))
C8 9020 007E LDS R2,usart_flag
CA FE20 SBRS R2,0
CB C00D RJMP 0x00D9
(0093) {
(0094) sink0_buf[sink0_count] = data;
CC E880 LDI R24,0x80
CD E090 LDI R25,0
CE 91E0 007F LDS R30,sink0_count
D0 27FF CLR R31
D1 0FE8 ADD R30,R24
D2 1FF9 ADC R31,R25
D3 8340 STD Z+0,R20
(0095) sink0_count ++;
D4 9180 007F LDS R24,sink0_count
D6 5F8F SUBI R24,0xFF
D7 9380 007F STS sink0_count,R24
(0096) }
(0097) if(data == 0x0a)//换行结束字符
D9 304A CPI R20,0xA
DA F441 BNE 0x00E3
(0098) {
(0099) usart_flag &=~ BIT(SINK0_START);
DB 9180 007E LDS R24,usart_flag
DD 7F8E ANDI R24,0xFE
DE 9380 007E STS usart_flag,R24
(0100) usart_flag |= BIT(SINK0_FINISH);
E0 6082 ORI R24,2
E1 9380 007E STS usart_flag,R24
(0101)
(0102) }
(0103) if(usart_flag & BIT(SINK0_FINISH))
E3 9020 007E LDS R2,usart_flag
E5 FE21 SBRS R2,1
E6 C006 RJMP 0x00ED
(0104) {
(0105) Get_GPRMC_data();
E7 D4B5 RCALL _Get_GPRMC_data
(0106) usart_flag &=~ BIT(SINK0_FINISH);
E8 9180 007E LDS R24,usart_flag
EA 7F8D ANDI R24,0xFD
EB 9380 007E STS usart_flag,R24
(0107) }
ED 9149 LD R20,Y+
EE 9009 LD R0,Y+
EF BE0F OUT 0x3F,R0
F0 91F9 LD R31,Y+
F1 91E9 LD R30,Y+
F2 91B9 LD R27,Y+
F3 91A9 LD R26,Y+
F4 9199 LD R25,Y+
F5 9189 LD R24,Y+
F6 9139 LD R19,Y+
F7 9129 LD R18,Y+
F8 9119 LD R17,Y+
F9 9109 LD R16,Y+
FA 9099 LD R9,Y+
FB 9089 LD R8,Y+
FC 9079 LD R7,Y+
FD 9069 LD R6,Y+
FE 9059 LD R5,Y+
FF 9049 LD R4,Y+
100 9039 LD R3,Y+
101 9029 LD R2,Y+
102 9019 LD R1,Y+
103 9009 LD R0,Y+
104 9518 RETI
FILE: D:\SOURCE~1\gps20080503\delay.h
(0001) #ifndef _DELAY_H
(0002) #define _DELAY_H
(0003)
(0004) // mcu:avr crystal=8MHz
(0005)
(0006) /**************************************************************
(0007) **函数功能:延时1us
(0008) **输入参数:无
(0009) **返回值:无
(0010) **在本函数外定义变量:无
(0011) **调用的函数:NOP()
(0012) **************************************************************/
(0013) void Delay_1us(void);
(0014)
(0015) /**************************************************************
(0016) **函数功能:us级延时
(0017) **输入参数:xus:延时us数
(0018) **返回值:无
(0019) **在本函数外定义变量:无
(0020) **调用的函数:Delay_1us()
(0021) **************************************************************/
(0022) void Delay_Us(unsigned char xus);
(0023)
(0024) /**************************************************************
(0025) **函数功能:延时1ms
(0026) **输入参数:无
(0027) **返回值:无
(0028) **在本函数外定义变量:无
(0029) **调用的函数:NOP()
(0030) **************************************************************/
(0031) void Delay_1ms(void);
(0032)
(0033) /**************************************************************
(0034) **函数功能:ms级延时
(0035) **输入参数:xms:延时ms数
(0036) **返回值:无
(0037) **在本函数外定义变量:无
(0038) **调用的函数:Delay_1ms()
(0039) **************************************************************/
(0040) void Delay_Ms(unsigned int xms);
(0041)
(0042) /**************************************************************
(0043) **函数功能:10us级延时
(0044) **输入参数:x10us:延时x10us数
(0045) **返回值:无
(0046) **在本函数外定义变量:无
(0047) **调用的函数:无
(0048) **************************************************************/
(0049) void Delay10us(Word x10us);
(0050)
(0051)
(0052) void Delay_1us()
(0053) {
(0054) NOP();
_Delay_1us:
105 0000 NOP
106 9508 RET
_Delay_Us:
i --> R10
xus --> R12
107 92AA ST R10,-Y
108 92CA ST R12,-Y
109 2EC0 MOV R12,R16
(0055) }
(0056)
(0057) void Delay_Us(unsigned char xus)
(0058) {
(0059) unsigned char i;
(0060) for(i=0;i<xus;i++)
10A 24AA CLR R10
10B C002 RJMP 0x010E
(0061) Delay_1us();
10C DFF8 RCALL _Delay_1us
10D 94A3 INC R10
10E 14AC CP R10,R12
10F F3E0 BCS 0x010C
110 90C9 LD R12,Y+
111 90A9 LD R10,Y+
112 9508 RET
(0062) }
(0063)
(0064) void Delay_1ms(void)
(0065) {
(0066) unsigned int i;
(0067) for(i=0;i<1142;i++)
_Delay_1ms:
i --> R16
113 2700 CLR R16
114 2711 CLR R17
115 C002 RJMP 0x0118
116 5F0F SUBI R16,0xFF
117 4F1F SBCI R17,0xFF
118 3706 CPI R16,0x76
119 E0E4 LDI R30,4
11A 071E CPC R17,R30
11B F3D0 BCS 0x0116
11C 9508 RET
_Delay_Ms:
i --> R20
j --> R22
xms --> R16
11D 940E 09AA CALL push_xgsetF000
(0068) ;
(0069) }
(0070)
(0071) void Delay_Ms(Word xms) //crystal=8MHz
(0072) {
(0073) Word i,j; //variable:declare Word
(0074) for(i=0; i<xms; i++)
11F 2744 CLR R20
120 2755 CLR R21
121 C014 RJMP 0x0136
(0075) for(j=0; j<498;j++)
122 2766 CLR R22
123 2777 CLR R23
124 C00B RJMP 0x0130
(0076) {
(0077) NOP();
125 0000 NOP
(0078) NOP();
126 0000 NOP
(0079) NOP();
127 0000 NOP
(0080) NOP();
128 0000 NOP
(0081) NOP();
129 0000 NOP
(0082) NOP();
12A 0000 NOP
(0083) NOP();
12B 0000 NOP
(0084) NOP();
12C 0000 NOP
(0085) NOP();
12D 0000 NOP
12E 5F6F SUBI R22,0xFF
12F 4F7F SBCI R23,0xFF
130 3F62 CPI R22,0xF2
131 E0E1 LDI R30,1
132 077E CPC R23,R30
133 F388 BCS 0x0125
134 5F4F SUBI R20,0xFF
135 4F5F SBCI R21,0xFF
136 1740 CP R20,R16
137 0751 CPC R21,R17
138 F348 BCS 0x0122
139 940C 09AF JMP pop_xgsetF000
_Delay10us:
i --> R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -