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

📄 main.lst

📁 avr单片机的一些实际应用源码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 298               	.LM34:
 299               	.L30:
 300 0084 06B6      		in __tmp_reg__,86-0x20
 301 0086 07FE      		sbrs __tmp_reg__,7
 302 0088 FDCF      		rjmp .L30
  93:main.c        **** 	return TW_STATUS;
 304               	.LM35:
 305 008a 81B1      		in r24,33-0x20
 306 008c 9927      		clr r25
 307 008e 887F      		andi r24,lo8(248)
 308 0090 9070      		andi r25,hi8(248)
  94:main.c        **** }
 310               	.LM36:
 311               	/* epilogue: frame size=0 */
 312 0092 0895      		ret
 313               	/* epilogue end (size=1) */
 314               	/* function twi_writebyte size 11 (10) */
 319               	.global	twi_readbyte
 321               	twi_readbyte:
  95:main.c        **** 
  96:main.c        **** //读一字节 ack: true时发ACK,false时发NACK
  97:main.c        **** uchar twi_readbyte(uchar *c ,uchar ack)
  98:main.c        **** {
 323               	.LM37:
 324               	/* prologue: frame size=0 */
 325               	/* prologue end (size=0) */
 326 0094 FC01      		movw r30,r24
  99:main.c        **** 	uchar tmp=_BV(TWINT)|_BV(TWEN);
 328               	.LM38:
 329               	.LBB4:
 330 0096 94E8      		ldi r25,lo8(-124)
 100:main.c        **** 		
 101:main.c        **** 	if(ack)
 332               	.LM39:
 333 0098 6111      		cpse r22,__zero_reg__
 102:main.c        **** 		tmp|=_BV(TWEA); 	
 335               	.LM40:
 336 009a 94EC      		ldi r25,lo8(-60)
 337               	.L35:
 103:main.c        **** 	TWCR=tmp;
 339               	.LM41:
 340 009c 96BF      		out 86-0x20,r25
 104:main.c        **** 	while ((TWCR & _BV(TWINT)) == 0) ;
 342               	.LM42:
 343               	.L36:
 344 009e 06B6      		in __tmp_reg__,86-0x20
 345 00a0 07FE      		sbrs __tmp_reg__,7
 346 00a2 FDCF      		rjmp .L36
 105:main.c        **** 
 106:main.c        **** 	*c=TWDR;
 348               	.LM43:
 349 00a4 83B1      		in r24,35-0x20
 350 00a6 8083      		st Z,r24
 107:main.c        **** 
 108:main.c        **** 	return TW_STATUS;
 352               	.LM44:
 353 00a8 81B1      		in r24,33-0x20
 354 00aa 9927      		clr r25
 355 00ac 887F      		andi r24,lo8(248)
 356 00ae 9070      		andi r25,hi8(248)
 109:main.c        **** }
 358               	.LM45:
 359               	.LBE4:
 360               	/* epilogue: frame size=0 */
 361 00b0 0895      		ret
 362               	/* epilogue end (size=1) */
 363               	/* function twi_readbyte size 16 (15) */
 372               	.global	rtc_write
 374               	rtc_write:
 110:main.c        **** /*************主模式TWI操作部分*************结束**************/
 111:main.c        **** 
 112:main.c        **** /*************DS1307操作**************开始**************/
 113:main.c        **** //对DS1307内存连续的写操作
 114:main.c        **** uchar rtc_write(uchar addr,uchar *buf,uchar len)
 115:main.c        **** {
 376               	.LM46:
 377               	/* prologue: frame size=0 */
 378 00b2 0F93      		push r16
 379 00b4 1F93      		push r17
 380 00b6 CF93      		push r28
 381 00b8 DF93      		push r29
 382               	/* prologue end (size=4) */
 383 00ba 182F      		mov r17,r24
 384 00bc EB01      		movw r28,r22
 385 00be 042F      		mov r16,r20
 116:main.c        **** 	uchar i;
 117:main.c        **** 	
 118:main.c        **** 	twi_start();
 387               	.LM47:
 388               	.LBB5:
 389 00c0 D4DF      		rcall twi_start
 119:main.c        **** 	twi_writebyte(DS1307_ADDR|TW_WRITE);
 391               	.LM48:
 392 00c2 80ED      		ldi r24,lo8(-48)
 393 00c4 DCDF      		rcall twi_writebyte
 120:main.c        **** 	twi_writebyte(addr);//write address
 395               	.LM49:
 396 00c6 812F      		mov r24,r17
 397 00c8 DADF      		rcall twi_writebyte
 121:main.c        **** 	for(i=0;i<len;i++)
 399               	.LM50:
 400 00ca 10E0      		ldi r17,lo8(0)
 401 00cc 1017      		cp r17,r16
 402 00ce 40F4      		brsh .L47
 403               	.L45:
 122:main.c        **** 		twi_writebyte(buf[i]);
 405               	.LM51:
 406 00d0 FE01      		movw r30,r28
 407 00d2 E10F      		add r30,r17
 408 00d4 F11D      		adc r31,__zero_reg__
 409 00d6 8081      		ld r24,Z
 410 00d8 D2DF      		rcall twi_writebyte
 412               	.LM52:
 413 00da 1F5F      		subi r17,lo8(-(1))
 414 00dc 1017      		cp r17,r16
 415 00de C0F3      		brlo .L45
 416               	.L47:
 123:main.c        **** 	twi_stop();
 418               	.LM53:
 419 00e0 C1DF      		rcall twi_stop
 124:main.c        **** 	return 0;
 125:main.c        **** }
 421               	.LM54:
 422               	.LBE5:
 423 00e2 80E0      		ldi r24,lo8(0)
 424 00e4 90E0      		ldi r25,hi8(0)
 425               	/* epilogue: frame size=0 */
 426 00e6 DF91      		pop r29
 427 00e8 CF91      		pop r28
 428 00ea 1F91      		pop r17
 429 00ec 0F91      		pop r16
 430 00ee 0895      		ret
 431               	/* epilogue end (size=5) */
 432               	/* function rtc_write size 31 (22) */
 441               	.global	rtc_read
 443               	rtc_read:
 126:main.c        **** 
 127:main.c        **** //对DS1307内存连续的读操作
 128:main.c        **** uchar rtc_read(uchar addr,uchar *buf,uchar len)
 129:main.c        **** {
 445               	.LM55:
 446               	/* prologue: frame size=0 */
 447 00f0 FF92      		push r15
 448 00f2 0F93      		push r16
 449 00f4 1F93      		push r17
 450 00f6 CF93      		push r28
 451 00f8 DF93      		push r29
 452               	/* prologue end (size=5) */
 453 00fa EB01      		movw r28,r22
 454 00fc 142F      		mov r17,r20
 130:main.c        **** 	uchar i;
 131:main.c        **** 	
 132:main.c        **** 	rtc_write(addr,0,0);//set address
 456               	.LM56:
 457               	.LBB6:
 458 00fe 40E0      		ldi r20,lo8(0)
 459 0100 60E0      		ldi r22,lo8(0)
 460 0102 70E0      		ldi r23,hi8(0)
 461 0104 D6DF      		rcall rtc_write
 133:main.c        **** 	
 134:main.c        **** 	DelayMs(10);
 463               	.LM57:
 464 0106 8AE0      		ldi r24,lo8(10)
 465 0108 90E0      		ldi r25,hi8(10)
 466 010a 7ADF      		rcall DelayMs
 135:main.c        **** 	
 136:main.c        **** 	twi_start();
 468               	.LM58:
 469 010c AEDF      		rcall twi_start
 137:main.c        **** 	twi_writebyte(DS1307_ADDR|TW_READ);
 471               	.LM59:
 472 010e 81ED      		ldi r24,lo8(-47)
 473 0110 B6DF      		rcall twi_writebyte
 138:main.c        **** 	for(i=0;i<len-1;i++)
 475               	.LM60:
 476 0112 FF24      		clr r15
 477 0114 012F      		mov r16,r17
 478 0116 1127      		clr r17
 479 0118 C801      		movw r24,r16
 480 011a 0197      		sbiw r24,1
 481 011c 1816      		cp __zero_reg__,r24
 482 011e 1906      		cpc __zero_reg__,r25
 483 0120 6CF4      		brge .L55
 484               	.L53:
 139:main.c        **** 		twi_readbyte(buf+i,TW_ACK);
 486               	.LM61:
 487 0122 CE01      		movw r24,r28
 488 0124 8F0D      		add r24,r15
 489 0126 911D      		adc r25,__zero_reg__
 490 0128 61E0      		ldi r22,lo8(1)
 491 012a B4DF      		rcall twi_readbyte
 493               	.LM62:
 494 012c F394      		inc r15
 495 012e 2F2D      		mov r18,r15
 496 0130 3327      		clr r19
 497 0132 C801      		movw r24,r16
 498 0134 0197      		sbiw r24,1
 499 0136 2817      		cp r18,r24
 500 0138 3907      		cpc r19,r25
 501 013a 9CF3      		brlt .L53
 502               	.L55:
 140:main.c        **** 	twi_readbyte(buf+i,TW_NACK);
 504               	.LM63:
 505 013c CF0D      		add r28,r15
 506 013e D11D      		adc r29,__zero_reg__
 507 0140 60E0      		ldi r22,lo8(0)
 508 0142 CE01      		movw r24,r28
 509 0144 A7DF      		rcall twi_readbyte
 141:main.c        **** 
 142:main.c        **** 	twi_stop();
 511               	.LM64:
 512 0146 8EDF      		rcall twi_stop
 143:main.c        **** 	return 0;
 144:main.c        **** }
 514               	.LM65:
 515               	.LBE6:
 516 0148 80E0      		ldi r24,lo8(0)
 517 014a 90E0      		ldi r25,hi8(0)
 518               	/* epilogue: frame size=0 */
 519 014c DF91      		pop r29
 520 014e CF91      		pop r28
 521 0150 1F91      		pop r17
 522 0152 0F91      		pop r16
 523 0154 FF90      		pop r15
 524 0156 0895      		ret
 525               	/* epilogue end (size=6) */
 526               	/* function rtc_read size 52 (41) */
 532               	.global	RtcInit
 534               	RtcInit:
 145:main.c        **** /*************DS1307操作**************结束**************/
 146:main.c        **** 
 147:main.c        **** /*************接口部分****************开始**************/
 148:main.c        **** 
 149:main.c        **** //初始化TWI功能
 150:main.c        **** void RtcInit(void)
 151:main.c        **** {
 536               	.LM66:
 537               	/* prologue: frame size=0 */
 538               	/* prologue end (size=0) */
 152:main.c        **** 	TWBR=73;
 540               	.LM67:
 541 0158 89E4      		ldi r24,lo8(73)
 542 015a 80B9      		out 32-0x20,r24
 153:main.c        **** }
 544               	.LM68:
 545               	/* epilogue: frame size=0 */
 546 015c 0895      		ret
 547               	/* epilogue end (size=1) */
 548               	/* function RtcInit size 3 (2) */
 552               	.global	RtcUpdateData
 554               	RtcUpdateData:
 154:main.c        **** 
 155:main.c        **** //更新或读取DS1307日历/时间数据
 156:main.c        **** uchar RtcUpdateData(uchar direction)
 157:main.c        **** {
 556               	.LM69:
 557               	/* prologue: frame size=0 */
 558               	/* prologue end (size=0) */
 158:main.c        **** 	uchar ret;
 159:main.c        **** 	if(direction)	//读
 560               	.LM70:
 561               	.LBB7:
 562 015e 8823      		tst r24
 563 0160 31F0      		breq .L58
 160:main.c        **** 	{
 161:main.c        **** 		ret=rtc_read(0,g_aTimeBuf,7);
 565               	.LM71:
 566 0162 47E0      		ldi r20,lo8(7)
 567 0164 60E0      		ldi r22,lo8(g_aTimeBuf)
 568 0166 70E0      		ldi r23,hi8(g_aTimeBuf)
 569 0168 80E0      		ldi r24,lo8(0)
 570 016a C2DF      		rcall rtc_read
 571 016c 04C0      		rjmp .L59
 572               	.L58:
 162:main.c        **** 	}
 163:main.c        **** 	else			//写
 164:main.c        **** 	{
 165:main.c        **** 		ret=rtc_write(0,g_aTimeBuf,7);	
 574               	.LM72:
 575 016e 47E0      		ldi r20,lo8(7)
 576 0170 60E0      		ldi r22,lo8(g_aTimeBuf)
 577 0172 70E0      		ldi r23,hi8(g_aTimeBuf)
 578 0174 9EDF      		rcall rtc_write
 579               	.L59:
 166:main.c        **** 	}
 167:main.c        **** 	return ret;
 581               	.LM73:
 582 0176 9927      		clr r25
 168:main.c        **** }
 584               	.LM74:
 585               	.LBE7:
 586               	/* epilogue: frame size=0 */
 587 0178 0895      		ret
 588               	/* epilogue end (size=1) */
 589               	/* function RtcUpdateData size 14 (13) */
 598               	.global	RtcReadRAM
 600               	RtcReadRAM:
 169:main.c        **** //读DS1307用户RAM
 170:main.c        **** uchar RtcReadRAM(uchar addr,uchar *buf,uchar len)
 171:main.c        **** {
 602               	.LM75:
 603               	/* prologue: frame size=0 */
 604               	/* prologue end (size=0) */
 172:main.c        **** 	addr+=8;
 606               	.LM76:
 607 017a 885F      		subi r24,lo8(-(8))
 173:main.c        **** 	return rtc_read(addr,buf,len);
 609               	.LM77:
 610 017c B9DF      		rcall rtc_read
 611 017e 9927      		clr r25
 174:main.c        **** }

⌨️ 快捷键说明

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