📄 main.lst
字号:
1 .file "main.c"
2 .arch atmega128
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
12 .text
13 .Ltext0:
74 .global __vector_18
76 __vector_18:
1:main.c **** #include <avr/io.h>
2:main.c **** #include <avr/signal.h>
3:main.c **** #include <avr/interrupt.h>
4:main.c **** #include <stdlib.h>
5:main.c **** #include <inttypes.h>
6:main.c **** #include "adc_sram.h"
7:main.c **** #include "macro.h"
8:main.c **** //全局变量////////////////////////////
9:main.c **** uint8_t global_flag_serie;//通信状态标志
10:main.c **** uint16_t global_ad_counter;//AD转换计数器
11:main.c **** uint8_t global_start_sample_flag;//采样开始标志
12:main.c **** uint8_t global_sample_mode_flag;//采样方式标志:手动或自动
13:main.c **** uint8_t global_operation_detected_flag;//检测到动作标志
14:main.c **** uint16_t global_detect_close[5];//用于检测合闸动作开始
15:main.c **** uint16_t global_detect_trip[5];//用于检测分闸动作开始
16:main.c **** uint8_t global_channel_flag;//通道标志
17:main.c **** uint16_t global_close_counter;//合闸线圈地址计数器
18:main.c **** uint16_t global_trip_counter;//分闸线圈地址计数器
19:main.c **** uint16_t global_motor_counter;//打压电机地址计数器
20:main.c **** uint16_t global_voltage_counter;//操作电压地址计数器
21:main.c **** uint8_t global_ad_finish_flag;//AD转换结束标志
22:main.c **** //串口接收中断////////////////////////
23:main.c **** SIGNAL(SIG_UART0_RECV)
24:main.c **** {
78 .LM1:
79 /* prologue: frame size=5 */
80 0000 1F92 push __zero_reg__
81 0002 0F92 push __tmp_reg__
82 0004 0FB6 in __tmp_reg__,__SREG__
83 0006 0F92 push __tmp_reg__
84 0008 1124 clr __zero_reg__
85 000a 2F93 push r18
86 000c 3F93 push r19
87 000e 4F93 push r20
88 0010 5F93 push r21
89 0012 6F93 push r22
90 0014 7F93 push r23
91 0016 8F93 push r24
92 0018 9F93 push r25
93 001a AF93 push r26
94 001c BF93 push r27
95 001e EF93 push r30
96 0020 FF93 push r31
97 0022 CF93 push r28
98 0024 DF93 push r29
99 0026 CDB7 in r28,__SP_L__
100 0028 DEB7 in r29,__SP_H__
101 002a 2597 sbiw r28,5
102 002c DEBF out __SP_H__,r29
103 002e CDBF out __SP_L__,r28
104 /* prologue end (size=24) */
25:main.c **** //变量定义
26:main.c **** uint8_t temp_data;
27:main.c **** uint16_t i;
28:main.c **** //关全局中断
29:main.c **** cli();
106 .LM2:
107 .LBB2:
108 /* #APP */
109 0030 F894 cli
30:main.c **** //等待接收到数据标志被置位
31:main.c **** loop_until_bit_is_set(UCSR0A,RXC0);
111 .LM3:
112 /* #NOAPP */
113 .L8:
114 0032 8091 2B00 lds r24,43
115 0036 8823 tst r24
116 0038 E4F7 brge .L8
32:main.c **** //对接收到的字节进行判断
33:main.c **** temp_data=UDR0;//读取接收的字节
118 .LM4:
119 003a 8091 2C00 lds r24,44
120 003e 8983 std Y+1,r24
34:main.c **** if(temp_data!=0)//如果接收到非零
122 .LM5:
123 0040 8981 ldd r24,Y+1
124 0042 8823 tst r24
125 0044 09F4 brne .+2
126 0046 4EC0 rjmp .L12
35:main.c **** {
36:main.c **** if(global_flag_serie==0)//如果接收到的为第一字节
128 .LM6:
129 0048 8091 0000 lds r24,global_flag_serie
130 004c 8823 tst r24
131 004e 51F5 brne .L13
37:main.c **** {
38:main.c **** switch (temp_data)
133 .LM7:
134 0050 8981 ldd r24,Y+1
135 0052 282F mov r18,r24
136 0054 3327 clr r19
137 0056 2C83 std Y+4,r18
138 0058 3D83 std Y+5,r19
139 005a 8C81 ldd r24,Y+4
140 005c 9D81 ldd r25,Y+5
141 005e 8031 cpi r24,16
142 0060 9105 cpc r25,__zero_reg__
143 0062 D1F0 breq .L16
144 0064 2C81 ldd r18,Y+4
145 0066 3D81 ldd r19,Y+5
146 0068 2131 cpi r18,17
147 006a 3105 cpc r19,__zero_reg__
148 006c 34F4 brge .L20
149 006e 8C81 ldd r24,Y+4
150 0070 9D81 ldd r25,Y+5
151 0072 8230 cpi r24,2
152 0074 9105 cpc r25,__zero_reg__
153 0076 39F0 breq .L15
154 0078 35C0 rjmp .L12
155 .L20:
156 007a 2C81 ldd r18,Y+4
157 007c 3D81 ldd r19,Y+5
158 007e 2232 cpi r18,34
159 0080 3105 cpc r19,__zero_reg__
160 0082 69F0 breq .L17
161 0084 2FC0 rjmp .L12
162 .L15:
39:main.c **** {
40:main.c **** case 2://接到本机地址
41:main.c **** global_flag_serie=1;//准备接收第二字节数据
164 .LM8:
165 0086 81E0 ldi r24,lo8(1)
166 0088 8093 0000 sts global_flag_serie,r24
42:main.c **** UCSR0A&=~(1<<MPCM0);//清零MPCM0,允许继续接收数据包
168 .LM9:
169 008c 8091 2B00 lds r24,43
170 0090 8E7F andi r24,lo8(-2)
171 0092 8093 2B00 sts 43,r24
43:main.c **** break;
173 .LM10:
174 0096 26C0 rjmp .L12
175 .L16:
44:main.c **** // case 0://接到复位命令
45:main.c **** // global_start_sample_flag=0xff;//复位开始
46:main.c **** // break;
47:main.c **** case 0x10://接到采集命令
48:main.c **** global_start_sample_flag=0;//开始采集数据
177 .LM11:
178 0098 1092 0000 sts global_start_sample_flag,__zero_reg__
49:main.c **** // sbi(PORTG,3);//测试用///////////////
50:main.c **** break;
180 .LM12:
181 009c 23C0 rjmp .L12
182 .L17:
51:main.c **** // case 17://接到采集结束命令
52:main.c **** // global_start_sample_flag=0xff;//结束采集数据
53:main.c **** // break;
54:main.c **** case 0x22://接收到自动测试信号
55:main.c **** global_sample_mode_flag=0;
184 .LM13:
185 009e 1092 0000 sts global_sample_mode_flag,__zero_reg__
56:main.c **** break;
187 .LM14:
188 00a2 20C0 rjmp .L12
189 .L13:
57:main.c **** default:
58:main.c **** break;
59:main.c **** }
60:main.c **** }
61:main.c **** else if((global_flag_serie==1)&&(temp_data<=32))//如果接收的是第二字节
191 .LM15:
192 00a4 8091 0000 lds r24,global_flag_serie
193 00a8 8130 cpi r24,lo8(1)
194 00aa E1F4 brne .L12
195 00ac 8981 ldd r24,Y+1
196 00ae 8132 cpi r24,lo8(33)
197 00b0 C8F4 brsh .L12
62:main.c **** {
63:main.c **** for(i=0;i<0xfff;i++){;}//延时等待
199 .LM16:
200 00b2 1A82 std Y+2,__zero_reg__
201 00b4 1B82 std Y+3,__zero_reg__
202 .L23:
203 00b6 8A81 ldd r24,Y+2
204 00b8 9B81 ldd r25,Y+3
205 00ba 3FE0 ldi r19,hi8(4095)
206 00bc 8F3F cpi r24,lo8(4095)
207 00be 9307 cpc r25,r19
208 00c0 08F0 brlo .L25
209 00c2 06C0 rjmp .L24
210 .L25:
211 00c4 8A81 ldd r24,Y+2
212 00c6 9B81 ldd r25,Y+3
213 00c8 0196 adiw r24,1
214 00ca 8A83 std Y+2,r24
215 00cc 9B83 std Y+3,r25
216 00ce F3CF rjmp .L23
217 .L24:
64:main.c **** SEND_ONE_PACKAGE(temp_data);//发送数据包,temp_data为包序号
219 .LM17:
220 00d0 8981 ldd r24,Y+1
221 00d2 0E94 0000 call SEND_ONE_PACKAGE
65:main.c **** // if(temp_data==17){sbi(PORTG,3);}//测试用////////////
66:main.c **** global_flag_serie=0;
223 .LM18:
224 00d6 1092 0000 sts global_flag_serie,__zero_reg__
67:main.c **** UCSR0A|=(1<<MPCM0);//准备接收地址
226 .LM19:
227 00da 8091 2B00 lds r24,43
228 00de 8160 ori r24,lo8(1)
229 00e0 8093 2B00 sts 43,r24
230 .L12:
68:main.c **** }
69:main.c **** }
70:main.c **** cbi(PORTE,2);//改为接收状态
232 .LM20:
233 00e4 8091 2300 lds r24,35
234 00e8 8B7F andi r24,lo8(-5)
235 00ea 8093 2300 sts 35,r24
71:main.c **** sei();
237 .LM21:
238 /* #APP */
239 00ee 7894 sei
72:main.c **** }
241 .LM22:
242 /* #NOAPP */
243 .LBE2:
244 /* epilogue: frame size=5 */
245 00f0 2596 adiw r28,5
246 00f2 F894 cli
247 00f4 DEBF out __SP_H__,r29
248 00f6 CDBF out __SP_L__,r28
249 00f8 DF91 pop r29
250 00fa CF91 pop r28
251 00fc FF91 pop r31
252 00fe EF91 pop r30
253 0100 BF91 pop r27
254 0102 AF91 pop r26
255 0104 9F91 pop r25
256 0106 8F91 pop r24
257 0108 7F91 pop r23
258 010a 6F91 pop r22
259 010c 5F91 pop r21
260 010e 4F91 pop r20
261 0110 3F91 pop r19
262 0112 2F91 pop r18
263 0114 0F90 pop __tmp_reg__
264 0116 0FBE out __SREG__,__tmp_reg__
265 0118 0F90 pop __tmp_reg__
266 011a 1F90 pop __zero_reg__
267 011c 1895 reti
268 /* epilogue end (size=23) */
269 /* function __vector_18 size 145 (98) */
275 .Lscope0:
278 .global __vector_8
280 __vector_8:
73:main.c ****
74:main.c **** //AD转换结束中断int7//////////////////
75:main.c **** SIGNAL(SIG_INTERRUPT7)
76:main.c **** {
282 .LM23:
283 /* prologue: frame size=7 */
284 011e 1F92 push __zero_reg__
285 0120 0F92 push __tmp_reg__
286 0122 0FB6 in __tmp_reg__,__SREG__
287 0124 0F92 push __tmp_reg__
288 0126 1124 clr __zero_reg__
289 0128 2F93 push r18
290 012a 3F93 push r19
291 012c 4F93 push r20
292 012e 5F93 push r21
293 0130 6F93 push r22
294 0132 7F93 push r23
295 0134 8F93 push r24
296 0136 9F93 push r25
297 0138 AF93 push r26
298 013a BF93 push r27
299 013c EF93 push r30
300 013e FF93 push r31
301 0140 CF93 push r28
302 0142 DF93 push r29
303 0144 CDB7 in r28,__SP_L__
304 0146 DEB7 in r29,__SP_H__
305 0148 2797 sbiw r28,7
306 014a DEBF out __SP_H__,r29
307 014c CDBF out __SP_L__,r28
308 /* prologue end (size=24) */
77:main.c **** //变量定义
78:main.c **** uint16_t int16_temp1;
79:main.c **** uint8_t temp1,temp2,i;
80:main.c **** //关中断
81:main.c **** cli();
310 .LM24:
311 .LBB3:
312 /* #APP */
313 014e F894 cli
82:main.c **** //读取ad转换结果
83:main.c **** int16_temp1=AD7891_READ();
315 .LM25:
316 /* #NOAPP */
317 0150 0E94 0000 call AD7891_READ
318 0154 8983 std Y+1,r24
319 0156 9A83 std Y+2,r25
84:main.c **** //如果是需要保存到RAM的采样
85:main.c **** if(global_sample_mode_flag==0xFF)
321 .LM26:
322 0158 8091 0000 lds r24,global_sample_mode_flag
323 015c 8F3F cpi r24,lo8(-1)
324 015e 09F0 breq .+2
325 0160 96C0 rjmp .L28
86:main.c **** {
87:main.c **** //AD7891 deselect,否则数据总线与RAM冲突
88:main.c **** sbi(PORTD,5);
327 .LM27:
328 0162 8091 3200 lds r24,50
329 0166 8062 ori r24,lo8(32)
330 0168 8093 3200 sts 50,r24
89:main.c **** //AD转换结果存入RAM
90:main.c **** temp1=int16_temp1/256;
332 .LM28:
333 016c 8981 ldd r24,Y+1
334 016e 9A81 ldd r25,Y+2
335 0170 892F mov r24,r25
336 0172 9927 clr r25
337 0174 8B83 std Y+3,r24
91:main.c **** temp2=int16_temp1%256;
339 .LM29:
340 0176 8981 ldd r24,Y+1
341 0178 9A81 ldd r25,Y+2
342 017a 9070 andi r25,hi8(255)
343 017c 8C83 std Y+4,r24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -