📄 main.lst
字号:
1 .file "main.c"
2 .arch at90s2313
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
11 .text
12 .Ltext0:
51 .global g_bRxdLen
52 .global g_bRxdLen
53 .section .bss
56 g_bRxdLen:
57 0000 00 .skip 1,0
58 .global g_bRxdPos
59 .global g_bRxdPos
62 g_bRxdPos:
63 0001 00 .skip 1,0
64 .global g_bTxdLen
65 .global g_bTxdLen
68 g_bTxdLen:
69 0002 00 .skip 1,0
70 .global g_bTxdPos
71 .global g_bTxdPos
74 g_bTxdPos:
75 0003 00 .skip 1,0
76 .text
78 .global __vector_7
80 __vector_7:
1:main.c **** /*
2:main.c **** 中断方式UART测试程序
3:main.c **** main.c
4:main.c **** MCU:AT90S2313
5:main.c **** 时钟:4MHz
6:main.c ****
7:main.c **** 芯艺 2004-09-18
8:main.c **** */
9:main.c ****
10:main.c **** #include <avr/io.h>
11:main.c **** #include <avr/interrupt.h>
12:main.c **** #include <avr/signal.h>
13:main.c ****
14:main.c **** #define uchar unsigned char
15:main.c **** #define uint unsigned int
16:main.c ****
17:main.c **** uchar g_bTxdPos=0; //发送定位计数器
18:main.c **** uchar g_bTxdLen=0; //等待发送字节数
19:main.c **** uchar g_bRxdPos=0; //接收定位计数器
20:main.c **** uchar g_bRxdLen=0; //等待接收字节数
21:main.c ****
22:main.c **** uchar g_aSendBuf[16]; //发送数据绶冲区
23:main.c **** uchar g_aRecvBuf[16]; //接收数据缓冲区
24:main.c ****
25:main.c **** //接收中断
26:main.c **** SIGNAL(SIG_UART_RECV)
27:main.c **** {
82 .LM1:
83 /* prologue: frame size=0 */
84 0000 1F92 push __zero_reg__
85 0002 0F92 push __tmp_reg__
86 0004 0FB6 in __tmp_reg__,__SREG__
87 0006 0F92 push __tmp_reg__
88 0008 1124 clr __zero_reg__
89 000a 2F93 push r18
90 000c 8F93 push r24
91 000e 9F93 push r25
92 0010 EF93 push r30
93 0012 FF93 push r31
94 /* prologue end (size=10) */
28:main.c **** uchar c=UDR;
96 .LM2:
97 0014 2CB1 in r18,44-0x20
29:main.c **** if(g_bRxdLen>0)
99 .LM3:
100 0016 9091 0000 lds r25,g_bRxdLen
101 001a 9923 tst r25
102 001c 69F0 breq .L1
30:main.c **** {
31:main.c **** g_aRecvBuf[g_bRxdPos++]=c;
104 .LM4:
105 001e 8091 0000 lds r24,g_bRxdPos
106 0022 E82F mov r30,r24
107 0024 FF27 clr r31
108 0026 E050 subi r30,lo8(-(g_aRecvBuf))
109 0028 F040 sbci r31,hi8(-(g_aRecvBuf))
110 002a 2083 st Z,r18
111 002c 8F5F subi r24,lo8(-(1))
112 002e 8093 0000 sts g_bRxdPos,r24
32:main.c **** g_bRxdLen--;
114 .LM5:
115 0032 9150 subi r25,lo8(-(-1))
116 0034 9093 0000 sts g_bRxdLen,r25
117 .L1:
118 /* epilogue: frame size=0 */
119 0038 FF91 pop r31
120 003a EF91 pop r30
121 003c 9F91 pop r25
122 003e 8F91 pop r24
123 0040 2F91 pop r18
124 0042 0F90 pop __tmp_reg__
125 0044 0FBE out __SREG__,__tmp_reg__
126 0046 0F90 pop __tmp_reg__
127 0048 1F90 pop __zero_reg__
128 004a 1895 reti
129 /* epilogue end (size=10) */
130 /* function __vector_7 size 38 (18) */
134 .global __vector_9
136 __vector_9:
33:main.c **** }
34:main.c ****
35:main.c **** }
36:main.c **** //发送中断
37:main.c **** SIGNAL (SIG_UART_TRANS)
38:main.c **** {
138 .LM6:
139 /* prologue: frame size=0 */
140 004c 1F92 push __zero_reg__
141 004e 0F92 push __tmp_reg__
142 0050 0FB6 in __tmp_reg__,__SREG__
143 0052 0F92 push __tmp_reg__
144 0054 1124 clr __zero_reg__
145 0056 8F93 push r24
146 0058 EF93 push r30
147 005a FF93 push r31
148 /* prologue end (size=8) */
39:main.c **** if(--g_bTxdLen>0)
150 .LM7:
151 005c 8091 0000 lds r24,g_bTxdLen
152 0060 8150 subi r24,lo8(-(-1))
153 0062 8093 0000 sts g_bTxdLen,r24
154 0066 8823 tst r24
155 0068 59F0 breq .L3
40:main.c **** UDR=g_aSendBuf[++g_bTxdPos];
157 .LM8:
158 006a 8091 0000 lds r24,g_bTxdPos
159 006e 8F5F subi r24,lo8(-(1))
160 0070 8093 0000 sts g_bTxdPos,r24
161 0074 E82F mov r30,r24
162 0076 FF27 clr r31
163 0078 E050 subi r30,lo8(-(g_aSendBuf))
164 007a F040 sbci r31,hi8(-(g_aSendBuf))
165 007c 8081 ld r24,Z
166 007e 8CB9 out 44-0x20,r24
167 .L3:
168 /* epilogue: frame size=0 */
169 0080 FF91 pop r31
170 0082 EF91 pop r30
171 0084 8F91 pop r24
172 0086 0F90 pop __tmp_reg__
173 0088 0FBE out __SREG__,__tmp_reg__
174 008a 0F90 pop __tmp_reg__
175 008c 1F90 pop __zero_reg__
176 008e 1895 reti
177 /* epilogue end (size=8) */
178 /* function __vector_9 size 34 (18) */
181 .global IsRecvComplete
183 IsRecvComplete:
41:main.c **** }
42:main.c ****
43:main.c **** //是否接收完成
44:main.c **** uchar IsRecvComplete(void)
45:main.c **** {
185 .LM9:
186 /* prologue: frame size=0 */
187 /* prologue end (size=0) */
46:main.c **** return g_bRxdLen==0;
189 .LM10:
190 0090 20E0 ldi r18,lo8(0)
191 0092 30E0 ldi r19,hi8(0)
192 0094 8091 0000 lds r24,g_bRxdLen
193 0098 8823 tst r24
194 009a 11F4 brne .L6
196 .LM11:
197 009c 21E0 ldi r18,lo8(1)
198 009e 30E0 ldi r19,hi8(1)
199 .L6:
47:main.c **** }
201 .LM12:
202 00a0 932F mov r25,r19
203 00a2 822F mov r24,r18
204 /* epilogue: frame size=0 */
205 00a4 0895 ret
206 /* epilogue end (size=1) */
207 /* function IsRecvComplete size 11 (10) */
211 .global SendToUart
213 SendToUart:
48:main.c ****
49:main.c **** //从发送缓冲区发送指定长度数据
50:main.c **** void SendToUart(uchar size)
51:main.c **** {
215 .LM13:
216 /* prologue: frame size=0 */
217 /* prologue end (size=0) */
218 00a6 982F mov r25,r24
52:main.c **** g_bTxdPos=0;
220 .LM14:
221 00a8 1092 0000 sts g_bTxdPos,__zero_reg__
53:main.c **** g_bTxdLen=size;
223 .LM15:
224 00ac 8093 0000 sts g_bTxdLen,r24
54:main.c **** UDR=g_aSendBuf[0];
226 .LM16:
227 00b0 8091 0000 lds r24,g_aSendBuf
228 00b4 8CB9 out 44-0x20,r24
229 .L8:
55:main.c **** while(g_bTxdLen>0);
231 .LM17:
232 00b6 9923 tst r25
233 00b8 F1F7 brne .L8
234 /* epilogue: frame size=0 */
235 00ba 0895 ret
236 /* epilogue end (size=1) */
237 /* function SendToUart size 11 (10) */
242 .global RecvFromUart
244 RecvFromUart:
56:main.c **** }
57:main.c ****
58:main.c **** //接收指定长度数据到接收缓冲区
59:main.c **** void RecvFromUart(uchar size,uchar bwait)
60:main.c **** {
246 .LM18:
247 /* prologue: frame size=0 */
248 /* prologue end (size=0) */
249 00bc 982F mov r25,r24
61:main.c **** g_bRxdPos=0;
251 .LM19:
252 00be 1092 0000 sts g_bRxdPos,__zero_reg__
62:main.c **** g_bRxdLen=size;
254 .LM20:
255 00c2 9093 0000 sts g_bRxdLen,r25
63:main.c **** if(bwait)
257 .LM21:
258 00c6 6623 tst r22
259 00c8 19F0 breq .L11
260 00ca 892F mov r24,r25
261 .L13:
64:main.c **** while(g_bRxdLen>0);
263 .LM22:
264 00cc 8823 tst r24
265 00ce F1F7 brne .L13
266 .L11:
267 00d0 0895 ret
268 /* epilogue: frame size=0 */
269 00d2 0895 ret
270 /* epilogue end (size=1) */
271 /* function RecvFromUart size 12 (11) */
274 .global main
276 main:
65:main.c **** }
66:main.c ****
67:main.c **** int main( void )
68:main.c **** {
278 .LM23:
279 /* prologue: frame size=0 */
280 00d4 C0E0 ldi r28,lo8(__stack - 0)
281 00d6 D0E0 ldi r29,hi8(__stack - 0)
282 00d8 DEBF out __SP_H__,r29
283 00da CDBF out __SP_L__,r28
284 /* prologue end (size=4) */
69:main.c **** uchar i;
70:main.c ****
71:main.c **** //uart初始化
72:main.c **** UCR=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
286 .LM24:
287 00dc 88ED ldi r24,lo8(-40)
288 00de 8AB9 out 42-0x20,r24
73:main.c **** UBRR=38; //UBRR=FCK/(9600*16) -1
290 .LM25:
291 00e0 86E2 ldi r24,lo8(38)
292 00e2 89B9 out 41-0x20,r24
74:main.c ****
75:main.c **** sei();
294 .LM26:
295 /* #APP */
296 00e4 7894 sei
297 /* #NOAPP */
298 .L17:
76:main.c ****
77:main.c **** while(1)
78:main.c **** {
79:main.c **** //异步接收16字节数据
80:main.c **** RecvFromUart(16,0);
300 .LM27:
301 00e6 60E0 ldi r22,lo8(0)
302 00e8 80E1 ldi r24,lo8(16)
303 00ea E8DF rcall RecvFromUart
304 .L19:
81:main.c ****
82:main.c **** //等待接收完成
83:main.c **** while(!IsRecvComplete());
306 .LM28:
307 00ec D1DF rcall IsRecvComplete
308 00ee 8823 tst r24
309 00f0 E9F3 breq .L19
310 00f2 A0E0 ldi r26,lo8(g_aSendBuf)
311 00f4 B0E0 ldi r27,hi8(g_aSendBuf)
312 00f6 E0E0 ldi r30,lo8(g_aRecvBuf)
313 00f8 F0E0 ldi r31,hi8(g_aRecvBuf)
314 00fa 9FE0 ldi r25,lo8(15)
315 .L25:
84:main.c ****
85:main.c **** //将接收到的数据复制到发送缓冲区
86:main.c **** for(i=0;i<16;i++)
87:main.c **** g_aSendBuf[i]=g_aRecvBuf[i];
317 .LM29:
318 00fc 8191 ld r24,Z+
319 00fe 8D93 st X+,r24
321 .LM30:
322 0100 9150 subi r25,lo8(-(-1))
323 0102 97FF sbrs r25,7
324 0104 FBCF rjmp .L25
88:main.c ****
89:main.c **** //发送回接收到的数据
90:main.c **** SendToUart(16);
326 .LM31:
327 0106 80E1 ldi r24,lo8(16)
328 0108 CEDF rcall SendToUart
329 010a EDCF rjmp .L17
330 /* epilogue: frame size=0 */
331 /* epilogue: noreturn */
332 /* epilogue end (size=0) */
333 /* function main size 29 (25) */
336 .comm g_aSendBuf,16,1
337 .comm g_aRecvBuf,16,1
344 .text
346 Letext:
347 /* File "main.c": code 135 = 0x0087 ( 92), prologues 22, epilogues 21 */
DEFINED SYMBOLS
*ABS*:00000000 main.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:56 .bss:00000000 g_bRxdLen
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:62 .bss:00000001 g_bRxdPos
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:68 .bss:00000002 g_bTxdLen
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:74 .bss:00000003 g_bTxdPos
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:80 .text:00000000 __vector_7
*COM*:00000010 g_aRecvBuf
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:136 .text:0000004c __vector_9
*COM*:00000010 g_aSendBuf
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:183 .text:00000090 IsRecvComplete
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:213 .text:000000a6 SendToUart
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:244 .text:000000bc RecvFromUart
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:276 .text:000000d4 main
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccUfaaaa.s:346 .text:0000010c Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__stack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -