📄 slave.lst
字号:
1 .file "slave.c"
2 .arch atmega8
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:
62 .global usart_putchar
64 usart_putchar:
1:slave.c **** /*
2:slave.c **** slave:
3:slave.c **** main.c
4:slave.c ****
5:slave.c **** 芯艺 2004-09-02
6:slave.c **** */
7:slave.c ****
8:slave.c **** #include <avr/io.h>
9:slave.c **** #include <avr/twi.h>
10:slave.c **** #include <stdio.h>
11:slave.c ****
12:slave.c **** #define uint unsigned int
13:slave.c **** #define uchar unsigned char
14:slave.c ****
15:slave.c **** #define TWI_ADDRESS 0X32
16:slave.c ****
17:slave.c **** //标准I/O输出函数
18:slave.c **** int usart_putchar(char c)
19:slave.c **** {
66 .LM1:
67 /* prologue: frame size=0 */
68 0000 CF93 push r28
69 /* prologue end (size=1) */
70 0002 C82F mov r28,r24
20:slave.c **** if(c=='\n')
72 .LM2:
73 0004 8A30 cpi r24,lo8(10)
74 0006 11F4 brne .L4
21:slave.c **** usart_putchar('\r');
76 .LM3:
77 0008 8DE0 ldi r24,lo8(13)
78 000a FADF rcall usart_putchar
79 .L4:
22:slave.c **** loop_until_bit_is_set(UCSRA,UDRE);
81 .LM4:
82 000c 5D9B sbis 43-0x20,5
83 000e FECF rjmp .L4
23:slave.c **** UDR=c;
85 .LM5:
86 0010 CCB9 out 44-0x20,r28
24:slave.c **** return 0;
25:slave.c **** }
88 .LM6:
89 0012 80E0 ldi r24,lo8(0)
90 0014 90E0 ldi r25,hi8(0)
91 /* epilogue: frame size=0 */
92 0016 CF91 pop r28
93 0018 0895 ret
94 /* epilogue end (size=2) */
95 /* function usart_putchar size 13 (10) */
98 .global IoInit
100 IoInit:
26:slave.c ****
27:slave.c **** //初始化
28:slave.c **** void IoInit(void)
29:slave.c **** {
102 .LM7:
103 /* prologue: frame size=0 */
104 /* prologue end (size=0) */
30:slave.c **** //串行口初始化
31:slave.c **** UCSRB=_BV(RXEN)|_BV(TXEN);/*(1<<RXCIE)|(1<<TXCIE)|*/
106 .LM8:
107 001a 88E1 ldi r24,lo8(24)
108 001c 8AB9 out 42-0x20,r24
32:slave.c **** UBRRL=25; //9600 baud 6MHz:38 4MHz:25
110 .LM9:
111 001e 89E1 ldi r24,lo8(25)
112 0020 89B9 out 41-0x20,r24
33:slave.c ****
34:slave.c **** //UART用于标准I/O输入输出
35:slave.c **** fdevopen(usart_putchar,0,0);
114 .LM10:
115 0022 40E0 ldi r20,lo8(0)
116 0024 50E0 ldi r21,hi8(0)
117 0026 BA01 movw r22,r20
118 0028 80E0 ldi r24,lo8(pm(usart_putchar))
119 002a 90E0 ldi r25,hi8(pm(usart_putchar))
120 002c 00D0 rcall fdevopen
36:slave.c ****
37:slave.c **** //TWI接口初始化,从器件模式
38:slave.c **** TWAR=TWI_ADDRESS | _BV(TWGCE);
122 .LM11:
123 002e 83E3 ldi r24,lo8(51)
124 0030 82B9 out 34-0x20,r24
39:slave.c **** TWCR=_BV(TWEA) | _BV(TWEN);
126 .LM12:
127 0032 84E4 ldi r24,lo8(68)
128 0034 86BF out 86-0x20,r24
129 /* epilogue: frame size=0 */
130 0036 0895 ret
131 /* epilogue end (size=1) */
132 /* function IoInit size 15 (14) */
134 .data
135 .LC0:
136 0000 5354 4152 .string "START\nSLA+W"
136 540A 534C
136 412B 5700
137 .LC1:
138 000c CAD5 B5BD .string "\312\325\265\275:%d"
138 3A25 6400
139 .LC2:
140 0014 2025 6400 .string " %d"
141 .LC3:
142 0018 3B0A 5354 .string ";\nSTOP\n"
142 4F50 0A00
143 .LC4:
144 0020 6572 726F .string "error:%x"
144 723A 2578
144 00
145 .text
147 .global main
149 main:
40:slave.c **** }
41:slave.c ****
42:slave.c **** int main(void)
43:slave.c **** {
151 .LM13:
152 /* prologue: frame size=0 */
153 0038 C0E0 ldi r28,lo8(__stack - 0)
154 003a D0E0 ldi r29,hi8(__stack - 0)
155 003c DEBF out __SP_H__,r29
156 003e CDBF out __SP_L__,r28
157 /* prologue end (size=4) */
44:slave.c **** uchar i,j=0;
159 .LM14:
160 0040 C0E0 ldi r28,lo8(0)
45:slave.c ****
46:slave.c **** IoInit();
162 .LM15:
163 0042 EBDF rcall IoInit
164 .L26:
47:slave.c ****
48:slave.c **** while(1)
49:slave.c **** {
50:slave.c **** while ((TWCR & _BV(TWINT)) == 0);
166 .LM16:
167 0044 06B6 in __tmp_reg__,86-0x20
168 0046 07FE sbrs __tmp_reg__,7
169 0048 FDCF rjmp .L26
51:slave.c **** i=TW_STATUS;
171 .LM17:
172 004a 81B1 in r24,33-0x20
173 004c 887F andi r24,lo8(-8)
52:slave.c ****
53:slave.c **** switch(i)
175 .LM18:
176 004e 9927 clr r25
177 0050 8038 cpi r24,128
178 0052 9105 cpc r25,__zero_reg__
179 0054 79F0 breq .L16
180 0056 8138 cpi r24,129
181 0058 9105 cpc r25,__zero_reg__
182 005a 24F4 brge .L21
183 005c 8036 cpi r24,96
184 005e 9105 cpc r25,__zero_reg__
185 0060 29F0 breq .L15
186 0062 25C0 rjmp .L20
187 .L21:
188 0064 803A cpi r24,160
189 0066 9105 cpc r25,__zero_reg__
190 0068 E9F0 breq .L19
191 006a 21C0 rjmp .L20
192 .L15:
54:slave.c **** {
55:slave.c **** case TW_SR_SLA_ACK:
56:slave.c **** printf("START\nSLA+W\n");
194 .LM19:
195 006c 80E0 ldi r24,lo8(.LC0)
196 006e 90E0 ldi r25,hi8(.LC0)
197 0070 00D0 rcall puts
57:slave.c **** break;
199 .LM20:
200 0072 28C0 rjmp .L14
201 .L16:
58:slave.c **** case TW_SR_DATA_ACK:
59:slave.c **** if(j==0)
203 .LM21:
204 0074 CC23 tst r28
205 0076 39F4 brne .L17
60:slave.c **** printf("收到:%d",TWDR);
207 .LM22:
208 0078 83B1 in r24,35-0x20
209 007a 9927 clr r25
210 007c 9F93 push r25
211 007e 8F93 push r24
212 0080 80E0 ldi r24,lo8(.LC1)
213 0082 90E0 ldi r25,hi8(.LC1)
214 0084 06C0 rjmp .L25
215 .L17:
61:slave.c **** else
62:slave.c **** printf(" %d",TWDR);
217 .LM23:
218 0086 83B1 in r24,35-0x20
219 0088 9927 clr r25
220 008a 9F93 push r25
221 008c 8F93 push r24
222 008e 80E0 ldi r24,lo8(.LC2)
223 0090 90E0 ldi r25,hi8(.LC2)
224 .L25:
225 0092 9F93 push r25
226 0094 8F93 push r24
227 0096 00D0 rcall printf
228 0098 0F90 pop __tmp_reg__
229 009a 0F90 pop __tmp_reg__
230 009c 0F90 pop __tmp_reg__
231 009e 0F90 pop __tmp_reg__
63:slave.c **** j++;
233 .LM24:
234 00a0 CF5F subi r28,lo8(-(1))
64:slave.c **** break;
236 .LM25:
237 00a2 10C0 rjmp .L14
238 .L19:
65:slave.c **** case TW_SR_STOP:
66:slave.c **** printf(";\nSTOP\n\n");
240 .LM26:
241 00a4 80E0 ldi r24,lo8(.LC3)
242 00a6 90E0 ldi r25,hi8(.LC3)
243 00a8 00D0 rcall puts
67:slave.c **** j=0;
245 .LM27:
246 00aa C0E0 ldi r28,lo8(0)
68:slave.c **** break;
248 .LM28:
249 00ac 0BC0 rjmp .L14
250 .L20:
69:slave.c **** default:
70:slave.c **** printf("error:%x",(int)i);
252 .LM29:
253 00ae 9F93 push r25
254 00b0 8F93 push r24
255 00b2 80E0 ldi r24,lo8(.LC4)
256 00b4 90E0 ldi r25,hi8(.LC4)
257 00b6 9F93 push r25
258 00b8 8F93 push r24
259 00ba 00D0 rcall printf
71:slave.c **** break;
261 .LM30:
262 00bc 0F90 pop __tmp_reg__
263 00be 0F90 pop __tmp_reg__
264 00c0 0F90 pop __tmp_reg__
265 00c2 0F90 pop __tmp_reg__
266 .L14:
72:slave.c **** }
73:slave.c **** TWCR=_BV(TWEA) | _BV(TWEN)|_BV(TWINT); //清除TWINT位
268 .LM31:
269 00c4 84EC ldi r24,lo8(-60)
270 00c6 86BF out 86-0x20,r24
271 00c8 BDCF rjmp .L26
272 /* epilogue: frame size=0 */
273 /* epilogue: noreturn */
274 /* epilogue end (size=0) */
275 /* function main size 73 (69) */
278 .text
280 Letext:
281 /* File "slave.c": code 101 = 0x0065 ( 93), prologues 5, epilogues 3 */
DEFINED SYMBOLS
*ABS*:00000000 slave.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/ccMvaaaa.s:64 .text:00000000 usart_putchar
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccMvaaaa.s:100 .text:0000001a IoInit
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccMvaaaa.s:149 .text:00000038 main
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccMvaaaa.s:280 .text:000000ca Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
fdevopen
__stack
puts
printf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -