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

📄 uart.lst

📁 串口转发IIC程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 287               	.LM19:
 288 0178 E981      		ldd r30,Y+1
 289 017a FA81      		ldd r31,Y+2
 290 017c 8081      		ld r24,Z
 291 017e 8823      		tst r24
 292 0180 59F0      		breq .L10
 102:UART.c        ****       PutByte(*puts); 
 294               	.LM20:
 295 0182 E981      		ldd r30,Y+1
 296 0184 FA81      		ldd r31,Y+2
 297 0186 8081      		ld r24,Z
 298 0188 0E94 0000 		call PutByte
 300               	.LM21:
 301 018c 8981      		ldd r24,Y+1
 302 018e 9A81      		ldd r25,Y+2
 303 0190 0196      		adiw r24,1
 304 0192 8983      		std Y+1,r24
 305 0194 9A83      		std Y+2,r25
 306 0196 F0CF      		rjmp .L11
 307               	.L10:
 308               	/* epilogue: frame size=2 */
 309 0198 2296      		adiw r28,2
 310 019a 0FB6      		in __tmp_reg__,__SREG__
 311 019c F894      		cli
 312 019e DEBF      		out __SP_H__,r29
 313 01a0 0FBE      		out __SREG__,__tmp_reg__
 314 01a2 CDBF      		out __SP_L__,r28
 315 01a4 DF91      		pop r29
 316 01a6 CF91      		pop r28
 317 01a8 0895      		ret
 318               	/* epilogue end (size=9) */
 319               	/* function PutString size 37 (18) */
 324               	.global	PutBytes
 326               	PutBytes:
 103:UART.c        ****    } 
 104:UART.c        **** 
 105:UART.c        **** //********************************************************************** 
 106:UART.c        **** //函 数 名:     void PutBytes(U8 *outplace,U8 j) 
 107:UART.c        **** //功    能:   放一串数据到发送缓冲区,需要定义发送的字节数 
 108:UART.c        **** //说    明:      
 109:UART.c        **** //参    数:     *outplace:发送的字节数据首地址指针 j:发送的字节数量 
 110:UART.c        **** //返 回 值: 
 111:UART.c        **** //*********************************************************************** 
 112:UART.c        ****     void PutBytes(U8 *outplace,U8 j) 
 113:UART.c        ****     {    int i; 
 328               	.LM22:
 329               	/* prologue: frame size=5 */
 330 01aa CF93      		push r28
 331 01ac DF93      		push r29
 332 01ae CDB7      		in r28,__SP_L__
 333 01b0 DEB7      		in r29,__SP_H__
 334 01b2 2597      		sbiw r28,5
 335 01b4 0FB6      		in __tmp_reg__,__SREG__
 336 01b6 F894      		cli
 337 01b8 DEBF      		out __SP_H__,r29
 338 01ba 0FBE      		out __SREG__,__tmp_reg__
 339 01bc CDBF      		out __SP_L__,r28
 340               	/* prologue end (size=10) */
 341 01be 8983      		std Y+1,r24
 342 01c0 9A83      		std Y+2,r25
 343 01c2 6B83      		std Y+3,r22
 114:UART.c        ****        for(i=0;i<j;i++) 
 345               	.LM23:
 346 01c4 1C82      		std Y+4,__zero_reg__
 347 01c6 1D82      		std Y+5,__zero_reg__
 348               	.L15:
 350               	.LM24:
 351 01c8 8B81      		ldd r24,Y+3
 352 01ca 282F      		mov r18,r24
 353 01cc 3327      		clr r19
 354 01ce 8C81      		ldd r24,Y+4
 355 01d0 9D81      		ldd r25,Y+5
 356 01d2 8217      		cp r24,r18
 357 01d4 9307      		cpc r25,r19
 358 01d6 84F4      		brge .L14
 115:UART.c        ****        { 
 116:UART.c        ****           PutByte(*outplace); 
 360               	.LM25:
 361 01d8 E981      		ldd r30,Y+1
 362 01da FA81      		ldd r31,Y+2
 363 01dc 8081      		ld r24,Z
 364 01de 0E94 0000 		call PutByte
 117:UART.c        ****           outplace++; 
 366               	.LM26:
 367 01e2 8981      		ldd r24,Y+1
 368 01e4 9A81      		ldd r25,Y+2
 369 01e6 0196      		adiw r24,1
 370 01e8 8983      		std Y+1,r24
 371 01ea 9A83      		std Y+2,r25
 373               	.LM27:
 374 01ec 8C81      		ldd r24,Y+4
 375 01ee 9D81      		ldd r25,Y+5
 376 01f0 0196      		adiw r24,1
 377 01f2 8C83      		std Y+4,r24
 378 01f4 9D83      		std Y+5,r25
 379 01f6 E8CF      		rjmp .L15
 380               	.L14:
 381               	/* epilogue: frame size=5 */
 382 01f8 2596      		adiw r28,5
 383 01fa 0FB6      		in __tmp_reg__,__SREG__
 384 01fc F894      		cli
 385 01fe DEBF      		out __SP_H__,r29
 386 0200 0FBE      		out __SREG__,__tmp_reg__
 387 0202 CDBF      		out __SP_L__,r28
 388 0204 DF91      		pop r29
 389 0206 CF91      		pop r28
 390 0208 0895      		ret
 391               	/* epilogue end (size=9) */
 392               	/* function PutBytes size 48 (29) */
 395               	.global	hex_
 396               		.data
 399               	hex_:
 400 0008 3031 3233 		.string	"0123456789ABCDEF"
 400      3435 3637 
 400      3839 4142 
 400      4344 4546 
 400      00
 401               		.text
 404               	.global	PutHEX
 406               	PutHEX:
 118:UART.c        ****        } 
 119:UART.c        ****     } 
 120:UART.c        **** 
 121:UART.c        **** //********************************************************************** 
 122:UART.c        **** //函 数 名:   PutHEX(unsigned char c) 
 123:UART.c        **** //功    能:   发送一个字节的hex码,分成两个字节发。 
 124:UART.c        **** //说    明:   发送ASSIC码 
 125:UART.c        **** //参    数:   发送的数据 
 126:UART.c        **** //返 回 值:   无 
 127:UART.c        **** //示    范:   PutHEX(i); 
 128:UART.c        **** //*********************************************************************** 
 129:UART.c        ****    const U8 hex_[]={"0123456789ABCDEF"}; 
 130:UART.c        ****     void PutHEX(U8 c) 
 131:UART.c        ****     { 
 408               	.LM28:
 409               	/* prologue: frame size=3 */
 410 020a CF93      		push r28
 411 020c DF93      		push r29
 412 020e CDB7      		in r28,__SP_L__
 413 0210 DEB7      		in r29,__SP_H__
 414 0212 2397      		sbiw r28,3
 415 0214 0FB6      		in __tmp_reg__,__SREG__
 416 0216 F894      		cli
 417 0218 DEBF      		out __SP_H__,r29
 418 021a 0FBE      		out __SREG__,__tmp_reg__
 419 021c CDBF      		out __SP_L__,r28
 420               	/* prologue end (size=10) */
 421 021e 8983      		std Y+1,r24
 132:UART.c        ****        U16 ch; 
 133:UART.c        ****        ch=(c>>4)&0x0f; 
 423               	.LM29:
 424 0220 8981      		ldd r24,Y+1
 425 0222 8295      		swap r24
 426 0224 8F70      		andi r24,0x0f
 427 0226 9927      		clr r25
 428 0228 8F70      		andi r24,lo8(15)
 429 022a 9070      		andi r25,hi8(15)
 430 022c 8A83      		std Y+2,r24
 431 022e 9B83      		std Y+3,r25
 134:UART.c        ****        PutByte(hex_[ch]); 
 433               	.LM30:
 434 0230 8A81      		ldd r24,Y+2
 435 0232 9B81      		ldd r25,Y+3
 436 0234 FC01      		movw r30,r24
 437 0236 E050      		subi r30,lo8(-(hex_))
 438 0238 F040      		sbci r31,hi8(-(hex_))
 439 023a 8081      		ld r24,Z
 440 023c 0E94 0000 		call PutByte
 135:UART.c        ****        ch=c&0x0f; 
 442               	.LM31:
 443 0240 8981      		ldd r24,Y+1
 444 0242 9927      		clr r25
 445 0244 8F70      		andi r24,lo8(15)
 446 0246 9070      		andi r25,hi8(15)
 447 0248 8A83      		std Y+2,r24
 448 024a 9B83      		std Y+3,r25
 136:UART.c        ****        PutByte(hex_[ch]); 
 450               	.LM32:
 451 024c 8A81      		ldd r24,Y+2
 452 024e 9B81      		ldd r25,Y+3
 453 0250 FC01      		movw r30,r24
 454 0252 E050      		subi r30,lo8(-(hex_))
 455 0254 F040      		sbci r31,hi8(-(hex_))
 456 0256 8081      		ld r24,Z
 457 0258 0E94 0000 		call PutByte
 458               	/* epilogue: frame size=3 */
 459 025c 2396      		adiw r28,3
 460 025e 0FB6      		in __tmp_reg__,__SREG__
 461 0260 F894      		cli
 462 0262 DEBF      		out __SP_H__,r29
 463 0264 0FBE      		out __SREG__,__tmp_reg__
 464 0266 CDBF      		out __SP_L__,r28
 465 0268 DF91      		pop r29
 466 026a CF91      		pop r28
 467 026c 0895      		ret
 468               	/* epilogue end (size=9) */
 469               	/* function PutHEX size 50 (31) */
 473               	.global	GetByte
 475               	GetByte:
 137:UART.c        **** //        SPACE; 
 138:UART.c        ****     } 
 139:UART.c        **** 
 140:UART.c        **** //********************************************************************** 
 141:UART.c        **** //函 数 名:   U8 GetByte (void) 
 142:UART.c        **** //功    能:   从接收缓冲区取一个U8 
 143:UART.c        **** //说    明:   如不想等待则在调用前检测inbufsign是否为1 
 144:UART.c        **** //参    数:   无 
 145:UART.c        **** //返 回 值:   接收到的数据 
 146:UART.c        **** //示    范:   i=GetByte(); 
 147:UART.c        **** //*********************************************************************** 
 148:UART.c        ****     U8 GetByte (void) 
 149:UART.c        ****     { 
 477               	.LM33:
 478               	/* prologue: frame size=1 */
 479 026e CF93      		push r28
 480 0270 DF93      		push r29
 481 0272 CDB7      		in r28,__SP_L__
 482 0274 DEB7      		in r29,__SP_H__
 483 0276 2197      		sbiw r28,1
 484 0278 0FB6      		in __tmp_reg__,__SREG__
 485 027a F894      		cli
 486 027c DEBF      		out __SP_H__,r29
 487 027e 0FBE      		out __SREG__,__tmp_reg__
 488 0280 CDBF      		out __SP_L__,r28
 489               	/* prologue end (size=10) */
 490               	.L20:
 150:UART.c        ****        char c ; 
 151:UART.c        ****        while (!inbufsign);    //缓冲区空等待 
 492               	.LM34:
 493 0282 8091 0000 		lds r24,inbufsign
 494 0286 8823      		tst r24
 495 0288 09F4      		brne .L21
 497               	.LM35:
 498 028a FBCF      		rjmp .L20
 499               	.L21:
 152:UART.c        ****       cli(); 
 501               	.LM36:
 502               	/* #APP */
 503 028c F894      		cli
 153:UART.c        ****        c=*getlast;            //取数据 
 505               	.LM37:
 506               	/* #NOAPP */
 507 028e E091 0000 		lds r30,getlast
 508 0292 F091 0000 		lds r31,(getlast)+1
 509 0296 8081      		ld r24,Z
 510 0298 8983      		std Y+1,r24
 154:UART.c        ****        getlast++;             //最后取走的数据位置加1 
 512               	.LM38:
 513 029a 8091 0000 		lds r24,getlast
 514 029e 9091 0000 		lds r25,(getlast)+1
 515 02a2 0196      		adiw r24,1
 516 02a4 9093 0000 		sts (getlast)+1,r25
 517 02a8 8093 0000 		sts getlast,r24
 155:UART.c        ****        inbufful=0;            //输入缓冲区的满标志清零 
 519               	.LM39:
 520 02ac 8091 0000 		lds r24,bit_flag
 521 02b0 8B7F      		andi r24,lo8(-5)
 522 02b2 8093 0000 		sts bit_flag,r24
 156:UART.c        ****        if (getlast==inbuf+ILEN) getlast=inbuf; //地址到顶部回到底部 
 524               	.LM40:
 525 02b6 8091 0000 		lds r24,getlast
 526 02ba 9091 0000 		lds r25,(getlast)+1
 527 02be 20E0      		ldi r18,hi8(inbuf+12)
 528 02c0 8030      		cpi r24,lo8(inbuf+12)
 529 02c2 9207      		cpc r25,r18
 530 02c4 31F4      		brne .L22
 531 02c6 80E0      		ldi r24,lo8(inbuf)
 532 02c8 90E0      		ldi r25,hi8(inbuf)
 533 02ca 9093 0000 		sts (getlast)+1,r25
 534 02ce 8093 0000 		sts getlast,r24
 535               	.L22:
 157:UART.c        ****        if (getlast==inlast) inbufsign=0;       //地址相等置接收缓冲区空空标志,再取数前要检该标志 
 537               	.LM41:
 538 02d2 2091 0000 		lds r18,getlast
 539 02d6 3091 0000 		lds r19,(getlast)+1
 540 02da 8091 0000 		lds r24,inlast
 541 02de 9091 0000 		lds r25,(inlast)+1
 542 02e2 2817      		cp r18,r24
 543 02e4 3907      		cpc r19,r25
 544 02e6 11F4      		brne .L23
 545 02e8 1092 0000 		sts inbufsign,__zero_reg__
 546               	.L23:
 158:UART.c        ****        sei(); 
 548               	.LM42:
 549               	/* #APP */
 550 02ec 7894      		sei
 159:UART.c        ****        return (c);        //取回数据 
 552               	.LM43:
 553               	/* #NOAPP */
 554 02ee 8981      		ldd r24,Y+1
 555 02f0 9927      		clr r25
 556               	/* epilogue: frame size=1 */
 557 02f2 2196      		adiw r28,1
 558 02f4 0FB6      		in __tmp_reg__,__SREG__
 559 02f6 F894      		cli
 560 02f8 DEBF      		out __SP_H__,r29
 561 02fa 0FBE      		out __SREG__,__tmp_reg__
 562 02fc CDBF      		out __SP_L__,r28
 563 02fe DF91      		pop r29
 564 0300 CF91      		pop r28
 565 0302 0895      		ret
 566               	/* epilogue end (size=9) */
 567               	/* function GetByte size 77 (58) */
 571               	.global	__vector_13
 573               	__vector_13:
 160:UART.c        ****     } 
 161:UART.c        **** 
 162:UART.c        **** //********************************************************************** 
 163:UART.c        **** //函 数 名:   void SerialSend_handler (void) 
 164:UART.c        **** //功    能:   串口发送中断处理 
 165:UART.c        **** //说    明: 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -