⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slave.lst

📁 avr单片机的一些实际应用源码
💻 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 + -