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

📄 main.lst

📁 单片机源代码
💻 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 + -