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

📄 rtc.s

📁 在AVR开发板驱动时钟芯片DS1302
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbline 397
; 		 setdat=setdat>>shift|setdat<<shift;
	mov R17,R10
	xcall lsl8
	mov R2,R16
	ldd R16,y+14
	mov R17,R10
	xcall lsr8
	mov R3,R16
	or R3,R2
	std y+14,R3
	.dbline 398
; 		 setdat&=0xF0;
	ldd R24,y+14
	andi R24,240
	std y+14,R24
	.dbline 399
; 		 setdat|=7;
	ori R24,7
	std y+14,R24
	.dbline 400
; 		 setdat=setdat>>shift|setdat<<shift;
	ldd R16,y+14
	mov R17,R10
	xcall lsl8
	mov R2,R16
	ldd R16,y+14
	mov R17,R10
	xcall lsr8
	mov R3,R16
	or R3,R2
	std y+14,R3
	.dbline 401
; 		 DS1302_writeD(C_WP|WR,UPROTECT);
	clr R18
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 402
; 		 DS1302_writeD(setadd|WR,setdat);
	ldd R18,y+14
	mov R16,R20
	xcall _DS1302_writeD
	.dbline 403
; 		 DS1302_writeD(C_WP|WR,PROTECT);
	ldi R18,128
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 404
; 		 LCD1602_gotoXY(dis_x,dis_y);
	mov R18,R14
	mov R16,R22
	xcall _LCD1602_gotoXY
	.dbline 405
; 		 LCD1602_sendstr("7");
	ldi R16,<L182
	ldi R17,>L182
	xcall _LCD1602_sendstr
	.dbline 406
; 		 LCD1602_gotoXY(dis_x,dis_y);
	mov R18,R14
	mov R16,R22
	xcall _LCD1602_gotoXY
	.dbline 407
; 		}		 
	.dbline 408
; 		break;
	xjmp L149
L183:
	.dbline 410
; 	case 0x8:    //过程和0键相同,只是将当前设置位设置成8并更新显示
; 		if(RD_TFLAG==0)
	ldd R0,y+15
	tst R0
	breq X37
	xjmp L149
X37:
	.dbline 411
; 		{
	.dbline 412
; 		 setdat=DS1302_readD(setadd|RD);
	mov R16,R20
	ori R16,1
	xcall _DS1302_readD
	std y+14,R16
	.dbline 413
; 		 setdat=setdat>>shift|setdat<<shift;
	mov R17,R10
	xcall lsl8
	mov R2,R16
	ldd R16,y+14
	mov R17,R10
	xcall lsr8
	mov R3,R16
	or R3,R2
	std y+14,R3
	.dbline 414
; 		 setdat&=0xF0;
	ldd R24,y+14
	andi R24,240
	std y+14,R24
	.dbline 415
; 		 setdat|=8;
	ori R24,8
	std y+14,R24
	.dbline 416
; 		 setdat=setdat>>shift|setdat<<shift;
	ldd R16,y+14
	mov R17,R10
	xcall lsl8
	mov R2,R16
	ldd R16,y+14
	mov R17,R10
	xcall lsr8
	mov R3,R16
	or R3,R2
	std y+14,R3
	.dbline 417
; 		 DS1302_writeD(C_WP|WR,UPROTECT);
	clr R18
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 418
; 		 DS1302_writeD(setadd|WR,setdat);
	ldd R18,y+14
	mov R16,R20
	xcall _DS1302_writeD
	.dbline 419
; 		 DS1302_writeD(C_WP|WR,PROTECT);
	ldi R18,128
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 420
; 		 LCD1602_gotoXY(dis_x,dis_y);
	mov R18,R14
	mov R16,R22
	xcall _LCD1602_gotoXY
	.dbline 421
; 		 LCD1602_sendstr("8");
	ldi R16,<L186
	ldi R17,>L186
	xcall _LCD1602_sendstr
	.dbline 422
; 		 LCD1602_gotoXY(dis_x,dis_y);
	mov R18,R14
	mov R16,R22
	xcall _LCD1602_gotoXY
	.dbline 423
; 		}		 
	.dbline 424
; 		break;
	xjmp L149
L187:
	.dbline 426
; 	case 0x9:    //过程和0键相同,只是将当前设置位设置成9并更新显示
; 		if(RD_TFLAG==0)
	ldd R0,y+15
	tst R0
	breq X38
	xjmp L149
X38:
	.dbline 427
; 		{
	.dbline 428
; 		 setdat=DS1302_readD(setadd|RD);
	mov R16,R20
	ori R16,1
	xcall _DS1302_readD
	std y+14,R16
	.dbline 429
; 		 setdat=setdat>>shift|setdat<<shift;
	mov R17,R10
	xcall lsl8
	mov R2,R16
	ldd R16,y+14
	mov R17,R10
	xcall lsr8
	mov R3,R16
	or R3,R2
	std y+14,R3
	.dbline 430
; 		 setdat&=0xF0;
	ldd R24,y+14
	andi R24,240
	std y+14,R24
	.dbline 431
; 		 setdat|=9;
	ori R24,9
	std y+14,R24
	.dbline 432
; 		 setdat=setdat>>shift|setdat<<shift;
	ldd R16,y+14
	mov R17,R10
	xcall lsl8
	mov R2,R16
	ldd R16,y+14
	mov R17,R10
	xcall lsr8
	mov R3,R16
	or R3,R2
	std y+14,R3
	.dbline 433
; 		 DS1302_writeD(C_WP|WR,UPROTECT);
	clr R18
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 434
; 		 DS1302_writeD(setadd|WR,setdat);
	ldd R18,y+14
	mov R16,R20
	xcall _DS1302_writeD
	.dbline 435
; 		 DS1302_writeD(C_WP|WR,PROTECT);
	ldi R18,128
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 436
; 		 LCD1602_gotoXY(dis_x,dis_y);
	mov R18,R14
	mov R16,R22
	xcall _LCD1602_gotoXY
	.dbline 437
; 		 LCD1602_sendstr("9");
	ldi R16,<L190
	ldi R17,>L190
	xcall _LCD1602_sendstr
	.dbline 438
; 		 LCD1602_gotoXY(dis_x,dis_y);
	mov R18,R14
	mov R16,R22
	xcall _LCD1602_gotoXY
	.dbline 439
; 		}		 
	.dbline 440
; 		break;
	xjmp L149
L191:
	.dbline 442
; 	case 0xC: 	 					 //模式选择按键,更换设置模式和显示模式(每按一下,交替设置和显示模式)
; 		 RD_TFLAG^=0x01;			 //改变模式标志,RD_TFLAG为0是设置模式,RD_TFLAG为1是显示模式
	ldi R24,1
	ldd R0,y+15
	eor R0,R24
	std y+15,R0
	.dbline 443
; 		 if(RD_TFLAG==0)			 //如果进入设置模式,做以下工作
	tst R0
	brne L192
	.dbline 444
; 		 {		  
	.dbline 445
; 		  setdat=DS1302_readD(C_SEC|RD);			//读出秒寄存器的内容
	ldi R16,129
	xcall _DS1302_readD
	std y+14,R16
	.dbline 446
; 		  DS1302_writeD(C_WP|WR,UPROTECT);			//解除写保护
	clr R18
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 447
; 		  DS1302_writeD(C_SEC|WR,CLK_HALT|setdat);	//进入设置模式就停止振荡器,但不改变秒寄存器的内容	
	ldd R18,y+14
	ori R18,128
	ldi R16,128
	xcall _DS1302_writeD
	.dbline 448
; 		  DS1302_writeD(C_WP|WR,PROTECT);			//写保护
	ldi R18,128
	ldi R16,142
	xcall _DS1302_writeD
L194:
	.dbline 449
L195:
	.dbline 449
; 		  while(LCD1602_readBF());					//更新1602
	xcall _LCD1602_readBF
	tst R16
	brne L194
	.dbline 450
;  		  LCD1602_sendbyte(iCmd, LCDa_CURFLA);		//启动光标闪烁功能
	ldi R18,15
	clr R16
	xcall _LCD1602_sendbyte
	.dbline 451
; 		  LCD1602_gotoXY(2,11);	 					//光标定位在秒个位(进入设置模式默认设置秒个位)
	ldi R18,11
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 452
; 		  setadd=C_SEC;								//将设置地址指向秒寄存器
	ldi R20,128
	.dbline 453
; 		  shift=0;									//设置秒个位
	clr R10
	.dbline 454
; 		  dis_x=2;									//1602第2行
	ldi R22,2
	.dbline 455
; 		  dis_y=11;									//1602第11列
	ldi R24,11
	mov R14,R24
	.dbline 456
; 		 }
	xjmp L149
L192:
	.dbline 458
; 		 else
; 		 {	 										//显示模式应做以下工作
	.dbline 459
; 		  setdat=DS1302_readD(C_SEC|RD);			//读出秒寄存器的内容 		  
	ldi R16,129
	xcall _DS1302_readD
	std y+14,R16
	.dbline 460
; 		  DS1302_writeD(C_WP|WR,UPROTECT);			//解除写保护
	clr R18
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 461
; 		  DS1302_writeD(C_SEC|WR,0x7F&setdat);		//进入显示模式就启动振荡器,但不改变秒寄存器的内容	
	ldd R18,y+14
	andi R18,127
	ldi R16,128
	xcall _DS1302_writeD
	.dbline 462
; 		  DS1302_writeD(C_WP|WR,PROTECT);			//写保护
	ldi R18,128
	ldi R16,142
	xcall _DS1302_writeD
	.dbline 463
; 		  LCD1602_sendbyte(iCmd, LCDa_ON);			//将光标闪烁关闭
	ldi R18,12
	clr R16
	xcall _LCD1602_sendbyte
	.dbline 464
; 		  set_num=0;			 					//将当前设置位改为默认的秒寄存器
	clr R0
	std y+17,R0
	.dbline 465
; 		 }
	.dbline 466
; 		 break;
	xjmp L149
L197:
	.dbline 468
; 	case 0xD:  							//当前设置位选择按键(按动此键,将循环改变设置位为:秒-分-时-星期-日-月-年,先个位后十位)			
; 		 if(RD_TFLAG==0)				//设置模式此键生效,显示模式此键不响应
	ldd R0,y+15
	tst R0
	breq X39
	xjmp L149
X39:
	.dbline 469
; 		 {
	.dbline 470
; 		   set_num+=1;					//当前设置位加1
	ldd R0,y+17
	inc R0
	std y+17,R0
	.dbline 471
; 		   if(set_num==13)				//当前设置位为年十位的时候,再按此键将当前设置位改为秒个位
	ldd R24,y+17
	cpi R24,13
	brne L200
	.dbline 472
; 		   {
	.dbline 473
; 		   set_num=0;
	clr R0
	std y+17,R0
	.dbline 474
; 		   }
L200:
	.dbline 475
; 		   switch(set_num)				//根据set_num来判断当前设置位,并做相应工作
	ldd R2,y+17
	clr R3
	std y+18,R2
	std y+19,R3
	ldd R24,y+18
	ldd R25,y+19
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge X40
	xjmp L149
X40:
	ldi R24,12
	ldi R25,0
	ldd R0,y+18
	ldd R1,y+19
	cp R24,R0
	cpc R25,R1
	brge X41
	xjmp L149
X41:
	ldi R16,2
	ldi R17,0
	ldd R18,y+18
	ldd R19,y+19
	xcall empy16s
	movw R30,R16
	ldi R24,<L218
	ldi R25,>L218
	add R30,R24
	adc R31,R25
	lpm R0,Z+
	lpm R1,Z
	movw R30,R0
	ijmp
X14:
	.dbline 476
; 		   {
L205:
	.dbline 478
; 		   	case 0:						//设置秒个位
; 		  	   LCD1602_gotoXY(2,11);	//更新1602的光标位置
	ldi R18,11
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 479
; 			   setadd=C_SEC;			//设置地址指向秒寄存器
	ldi R20,128
	.dbline 480
; 			   shift=0;					//设置个位标志
	clr R10
	.dbline 481
; 			   dis_x=2;					//1602第2行
	ldi R22,2
	.dbline 482
; 			   dis_y=11;				//1602第11列
	ldi R24,11
	mov R14,R24
	.dbline 483
; 			   break;
	xjmp L149
L206:
	.dbline 485
; 		  	case 1:	 					//设置秒十位
; 		  	   LCD1602_gotoXY(2,10);	//更新1602的光标位置
	ldi R18,10
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 486
; 			   setadd=C_SEC;			//设置地址指向秒寄存器
	ldi R20,128
	.dbline 487
; 			   shift=4;					//设置十位标志
	ldi R24,4
	mov R10,R24
	.dbline 488
; 			   dis_x=2;					//1602第2行
	ldi R22,2
	.dbline 489
; 			   dis_y=10;				//1602第10列
	ldi R24,10
	mov R14,R24
	.dbline 490
; 			   break;
	xjmp L149
L207:
	.dbline 492
; 		    case 2:
; 		  	   LCD1602_gotoXY(2,8);
	ldi R18,8
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 493
; 			   setadd=C_MIN;	   		//设置地址指向分寄存器
	ldi R20,130
	.dbline 494
; 			   shift=0;					//设置个位标志
	clr R10
	.dbline 495
; 			   dis_x=2;
	ldi R22,2
	.dbline 496
; 			   dis_y=8;
	ldi R24,8
	mov R14,R24
	.dbline 497
; 			   break;
	xjmp L149
L208:
	.dbline 499
; 		    case 3:
; 		  	   LCD1602_gotoXY(2,7);
	ldi R18,7
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 500
; 			   setadd=C_MIN;	   		//设置地址指向分寄存器
	ldi R20,130
	.dbline 501
; 			   shift=4;					//设置十位标志
	ldi R24,4
	mov R10,R24
	.dbline 502
; 			   dis_x=2;
	ldi R22,2
	.dbline 503
; 			   dis_y=7;
	ldi R24,7
	mov R14,R24
	.dbline 504
; 			   break;
	xjmp L149
L209:
	.dbline 506
; 		    case 4:
; 		  	   LCD1602_gotoXY(2,5);
	ldi R18,5
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 507
; 			   setadd=C_HR;		   		//设置地址指向小时寄存器
	ldi R20,132
	.dbline 508
; 			   shift=0;					//设置个位标志
	clr R10
	.dbline 509
; 			   dis_x=2;
	ldi R22,2
	.dbline 510
; 			   dis_y=5;
	ldi R24,5
	mov R14,R24
	.dbline 511
; 			   break;
	xjmp L149
L210:
	.dbline 513
; 		    case 5:
; 		  	   LCD1602_gotoXY(2,4);
	ldi R18,4
	ldi R16,2
	xcall _LCD1602_gotoXY
	.dbline 514
; 			   setadd=C_HR;		   		//设置地址指向小时寄存器
	ldi R20,132
	.dbline 515
; 			   shift=4;					//设置十位标志
	ldi R24,4
	mov R10,R24
	.dbline 516
; 			   dis_x=2;
	ldi R22,2
	.dbline 517
; 			   dis_y=4;
	mov R14,R24
	.dbline 518
; 			   break;
	xjmp L149
L211:
	.dbline 520
; 		    case 6:
; 		  	   LCD1602_gotoXY(1,13);
	ldi R18,13
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 521
; 			   setadd=C_WK;				//设置地址指向星期寄存器
	ldi R20,138
	.dbline 522
; 			   shift=0;					//设置个位标志
	clr R10
	.dbline 523
; 			   dis_x=1;
	ldi R22,1
	.dbline 524
; 			   dis_y=13;
	ldi R24,13
	mov R14,R24
	.dbline 525
; 			   break; 
	xjmp L149
L212:
	.dbline 527
; 			case 7:
; 		  	   LCD1602_gotoXY(1,11);
	ldi R18,11
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 528
; 			   setadd=C_DAY;			//设置地址指向日寄存器
	ldi R20,134
	.dbline 529
; 			   shift=0;					//设置个位标志
	clr R10
	.dbline 530
; 			   dis_x=1;
	ldi R22,1
	.dbline 531
; 			   dis_y=11;
	ldi R24,11
	mov R14,R24
	.dbline 532
; 			   break; 
	xjmp L149
L213:
	.dbline 534
; 			case 8:
; 		  	   LCD1602_gotoXY(1,10);
	ldi R18,10
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 535
; 			   setadd=C_DAY;			//设置地址指向日寄存器
	ldi R20,134
	.dbline 536
; 			   shift=4;					//设置十位标志
	ldi R24,4
	mov R10,R24
	.dbline 537
; 			   dis_x=1;
	ldi R22,1
	.dbline 538
; 			   dis_y=10;
	ldi R24,10
	mov R14,R24
	.dbline 539
; 			   break; 
	xjmp L149
L214:
	.dbline 541
; 			case 9:
; 		  	   LCD1602_gotoXY(1,8);
	ldi R18,8
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 542
; 			   setadd=C_MTH;	   		//设置地址指向月寄存器
	ldi R20,136
	.dbline 543
; 			   shift=0;					//设置个位标志
	clr R10
	.dbline 544
; 			   dis_x=1;
	ldi R22,1
	.dbline 545
; 			   dis_y=8;
	ldi R24,8
	mov R14,R24
	.dbline 546
; 			   break; 
	xjmp L149
L215:
	.dbline 548
; 			case 10:
; 		  	   LCD1602_gotoXY(1,7);
	ldi R18,7
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 549
; 			   setadd=C_MTH;	   		//设置地址指向月寄存器
	ldi R20,136
	.dbline 550
; 			   shift=4;					//设置十位标志
	ldi R24,4
	mov R10,R24
	.dbline 551
; 			   dis_x=1;
	ldi R22,1
	.dbline 552
; 			   dis_y=7;
	ldi R24,7
	mov R14,R24
	.dbline 553
; 			   break;   
	xjmp L149
L216:
	.dbline 555
; 			case 11:
; 		  	   LCD1602_gotoXY(1,5);
	ldi R18,5
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 556
; 			   setadd=C_YR;		   		//设置地址指向年寄存器
	ldi R20,140
	.dbline 557
; 			   shift=0;					//设置个位标志
	clr R10
	.dbline 558
; 			   dis_x=1;
	ldi R22,1
	.dbline 559
; 			   dis_y=5;
	ldi R24,5
	mov R14,R24
	.dbline 560
; 			   break; 
	xjmp L149
L217:
	.dbline 562
; 			case 12:
; 		  	   LCD1602_gotoXY(1,4);
	ldi R18,4
	ldi R16,1
	xcall _LCD1602_gotoXY
	.dbline 563
; 			   setadd=C_YR;		   		//设置地址指向年寄存器
	ldi R20,140
	.dbline 564
; 			   shift=4;					//设置十位标志
	ldi R24,4
	mov R10,R24
	.dbline 565
; 			   dis_x=1;
	ldi R22,1
	.dbline 566
; 			   dis_y=4;
	mov R14,R24
	.dbline 567
; 			   break; 
	.dbline 569
; 		   }
; 		 break;
	.dbline 572
; 		 }
; 	default:		 
; 		 break;		
L149:
	.dbline 574
;    }
;   }
L146:
	.dbline 575
L142:
	.dbline 269
	xjmp L141
X15:
	.dbline -2
	.dbline 576
;  }
; }
L138:
	adiw R28,20
	.dbline 0 ; func end
	ret
	.dbsym l settime 7 A[7:7]c
	.dbsym l set_num 17 c
	.dbsym r dis_y 14 c
	.dbsym r dis_x 22 c
	.dbsym r setadd 20 c
	.dbsym l i 16 c
	.dbsym r shift 10 c
	.dbsym l gettime 0 A[7:7]c
	.dbsym l RD_TFLAG 15 c
	.dbsym l setdat 14 c
	.dbend
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L190:
	.blkb 2
	.area idata
	.byte 57,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L186:
	.blkb 2
	.area idata
	.byte 56,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L182:
	.blkb 2
	.area idata
	.byte 55,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L178:
	.blkb 2
	.area idata
	.byte 54,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L174:
	.blkb 2
	.area idata
	.byte 53,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L170:
	.blkb 2
	.area idata
	.byte 52,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L166:
	.blkb 2
	.area idata
	.byte 51,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L162:
	.blkb 2
	.area idata
	.byte 50,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L158:
	.blkb 2
	.area idata
	.byte 49,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L154:
	.blkb 2
	.area idata
	.byte 48,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
L134:
	.blkb 3
	.area idata
	.byte 50,48,0
	.area data(ram, con, rel)
	.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C

⌨️ 快捷键说明

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