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

📄 rtc.lst

📁 在AVR开发板驱动时钟芯片DS1302
💻 LST
📖 第 1 页 / 共 5 页
字号:
    03A3 3086      CPI	R24,6
    03A4 E0E0      LDI	R30,0
    03A5 079E      CPC	R25,R30
    03A6 F409      BNE	0x03A8
    03A7 C162      RJMP	0x050A
    03A8 3087      CPI	R24,7
    03A9 E0E0      LDI	R30,0
    03AA 079E      CPC	R25,R30
    03AB F409      BNE	0x03AD
    03AC C194      RJMP	0x0541
    03AD 3088      CPI	R24,0x8
    03AE E0E0      LDI	R30,0
    03AF 079E      CPC	R25,R30
    03B0 F409      BNE	0x03B2
    03B1 C1C6      RJMP	0x0578
    03B2 3089      CPI	R24,0x9
    03B3 E0E0      LDI	R30,0
    03B4 079E      CPC	R25,R30
    03B5 F409      BNE	0x03B7
    03B6 C1F8      RJMP	0x05AF
    03B7 308C      CPI	R24,0xC
    03B8 E0E0      LDI	R30,0
    03B9 079E      CPC	R25,R30
    03BA F409      BNE	0x03BC
    03BB C22A      RJMP	0x05E6
    03BC 308D      CPI	R24,0xD
    03BD E0E0      LDI	R30,0
    03BE 079E      CPC	R25,R30
    03BF F409      BNE	0x03C1
    03C0 C25A      RJMP	0x061B
    03C1 C2FF      RJMP	0x06C1
(0280)    {
(0281)    	case 0x0:				//将当前设置位设置成0
(0282) 		if(RD_TFLAG==0)		//检测是否是设置模式(为0就是设置模式)
    03C2 840F      LDD	R0,15+Y
    03C3 2000      TST	R0
    03C4 F009      BEQ	0x03C6
    03C5 C2FB      RJMP	0x06C1
(0283) 		{
(0284) 		 setdat=DS1302_readD(setadd|RD);		//读出当前时间				   
    03C6 2F04      MOV	R16,R20
    03C7 6001      ORI	R16,1
    03C8 DE90      RCALL	_DS1302_readD
    03C9 870E      STD	R16,14+Y
(0285) 		 setdat=setdat>>shift|setdat<<shift;	//根据shift值来设置DS1302寄存器的十位还是个位(shift为0设置的是个位,为4设置的是十位)
    03CA 2D1A      MOV	R17,R10
    03CB 940E0726  CALL	lsl8
    03CD 2E20      MOV	R2,R16
    03CE 850E      LDD	R16,14+Y
    03CF 2D1A      MOV	R17,R10
    03D0 940E072C  CALL	lsr8
    03D2 2E30      MOV	R3,R16
    03D3 2832      OR	R3,R2
    03D4 863E      STD	R3,14+Y
(0286) 		 setdat&=0xF0;							//保留高位不变(设置十位则个位不变,设置个位则十位不变,因为上条语句已经根据shift的值把需要设置的位移动到低位了)
    03D5 858E      LDD	R24,14+Y
    03D6 7F80      ANDI	R24,0xF0
    03D7 878E      STD	R24,14+Y
(0287) 		 setdat|=0;								//按下的是0键,所以把当前设置位设置成0
(0288) 		 setdat=setdat>>shift|setdat<<shift;	//把十位和个位还原成正确值
    03D8 850E      LDD	R16,14+Y
    03D9 2D1A      MOV	R17,R10
    03DA 940E0726  CALL	lsl8
    03DC 2E20      MOV	R2,R16
    03DD 850E      LDD	R16,14+Y
    03DE 2D1A      MOV	R17,R10
    03DF 940E072C  CALL	lsr8
    03E1 2E30      MOV	R3,R16
    03E2 2832      OR	R3,R2
    03E3 863E      STD	R3,14+Y
(0289) 		 DS1302_writeD(C_WP|WR,UPROTECT);		//解除写保护
    03E4 2722      CLR	R18
    03E5 E80E      LDI	R16,0x8E
    03E6 DE52      RCALL	_DS1302_writeD
(0290) 		 DS1302_writeD(setadd|WR,setdat);		//写入设置值
    03E7 852E      LDD	R18,14+Y
    03E8 2F04      MOV	R16,R20
    03E9 DE4F      RCALL	_DS1302_writeD
(0291) 		 DS1302_writeD(C_WP|WR,PROTECT);		//写保护
    03EA E820      LDI	R18,0x80
    03EB E80E      LDI	R16,0x8E
    03EC DE4C      RCALL	_DS1302_writeD
(0292) 		 LCD1602_gotoXY(dis_x,dis_y);			//将当前设置位在1602液晶上对应的位置显示更新
    03ED 2D2E      MOV	R18,R14
    03EE 2F06      MOV	R16,R22
    03EF DD35      RCALL	_LCD1602_gotoXY
(0293) 		 LCD1602_sendstr("0");					//向1602写入0字符并显示
    03F0 E702      LDI	R16,0x72
    03F1 E010      LDI	R17,0
    03F2 DD0E      RCALL	_LCD1602_sendstr
(0294) 		 LCD1602_gotoXY(dis_x,dis_y);			//将光标保持在当前设置位上
    03F3 2D2E      MOV	R18,R14
    03F4 2F06      MOV	R16,R22
    03F5 DD2F      RCALL	_LCD1602_gotoXY
(0295) 		}
(0296) 		break;		 
    03F6 C2CA      RJMP	0x06C1
(0297) 	case 0x1:	//过程和0键相同,只是将当前设置位设置成1并更新显示
(0298) 	    if(RD_TFLAG==0)
    03F7 840F      LDD	R0,15+Y
    03F8 2000      TST	R0
    03F9 F009      BEQ	0x03FB
    03FA C2C6      RJMP	0x06C1
(0299) 		{
(0300) 		 setdat=DS1302_readD(setadd|RD);
    03FB 2F04      MOV	R16,R20
    03FC 6001      ORI	R16,1
    03FD DE5B      RCALL	_DS1302_readD
    03FE 870E      STD	R16,14+Y
(0301) 		 setdat=setdat>>shift|setdat<<shift;
    03FF 2D1A      MOV	R17,R10
    0400 940E0726  CALL	lsl8
    0402 2E20      MOV	R2,R16
    0403 850E      LDD	R16,14+Y
    0404 2D1A      MOV	R17,R10
    0405 940E072C  CALL	lsr8
    0407 2E30      MOV	R3,R16
    0408 2832      OR	R3,R2
    0409 863E      STD	R3,14+Y
(0302) 		 setdat&=0xF0;
    040A 858E      LDD	R24,14+Y
    040B 7F80      ANDI	R24,0xF0
    040C 878E      STD	R24,14+Y
(0303) 		 setdat|=1;
    040D 6081      ORI	R24,1
    040E 878E      STD	R24,14+Y
(0304) 		 setdat=setdat>>shift|setdat<<shift;
    040F 850E      LDD	R16,14+Y
    0410 2D1A      MOV	R17,R10
    0411 940E0726  CALL	lsl8
    0413 2E20      MOV	R2,R16
    0414 850E      LDD	R16,14+Y
    0415 2D1A      MOV	R17,R10
    0416 940E072C  CALL	lsr8
    0418 2E30      MOV	R3,R16
    0419 2832      OR	R3,R2
    041A 863E      STD	R3,14+Y
(0305) 		 DS1302_writeD(C_WP|WR,UPROTECT);
    041B 2722      CLR	R18
    041C E80E      LDI	R16,0x8E
    041D DE1B      RCALL	_DS1302_writeD
(0306) 		 DS1302_writeD(setadd|WR,setdat);
    041E 852E      LDD	R18,14+Y
    041F 2F04      MOV	R16,R20
    0420 DE18      RCALL	_DS1302_writeD
(0307) 		 DS1302_writeD(C_WP|WR,PROTECT);
    0421 E820      LDI	R18,0x80
    0422 E80E      LDI	R16,0x8E
    0423 DE15      RCALL	_DS1302_writeD
(0308) 		 LCD1602_gotoXY(dis_x,dis_y);
    0424 2D2E      MOV	R18,R14
    0425 2F06      MOV	R16,R22
    0426 DCFE      RCALL	_LCD1602_gotoXY
(0309) 		 LCD1602_sendstr("1");
    0427 E700      LDI	R16,0x70
    0428 E010      LDI	R17,0
    0429 DCD7      RCALL	_LCD1602_sendstr
(0310) 		 LCD1602_gotoXY(dis_x,dis_y);
    042A 2D2E      MOV	R18,R14
    042B 2F06      MOV	R16,R22
    042C DCF8      RCALL	_LCD1602_gotoXY
(0311) 		}		 
(0312) 		break;
    042D C293      RJMP	0x06C1
(0313) 	case 0x2: 	 //过程和0键相同,只是将当前设置位设置成2并更新显示
(0314) 		if(RD_TFLAG==0)
    042E 840F      LDD	R0,15+Y
    042F 2000      TST	R0
    0430 F009      BEQ	0x0432
    0431 C28F      RJMP	0x06C1
(0315) 		{
(0316) 		 setdat=DS1302_readD(setadd|RD);
    0432 2F04      MOV	R16,R20
    0433 6001      ORI	R16,1
    0434 DE24      RCALL	_DS1302_readD
    0435 870E      STD	R16,14+Y
(0317) 		 setdat=setdat>>shift|setdat<<shift;
    0436 2D1A      MOV	R17,R10
    0437 940E0726  CALL	lsl8
    0439 2E20      MOV	R2,R16
    043A 850E      LDD	R16,14+Y
    043B 2D1A      MOV	R17,R10
    043C 940E072C  CALL	lsr8
    043E 2E30      MOV	R3,R16
    043F 2832      OR	R3,R2
    0440 863E      STD	R3,14+Y
(0318) 		 setdat&=0xF0;
    0441 858E      LDD	R24,14+Y
    0442 7F80      ANDI	R24,0xF0
    0443 878E      STD	R24,14+Y
(0319) 		 setdat|=2;
    0444 6082      ORI	R24,2
    0445 878E      STD	R24,14+Y
(0320) 		 setdat=setdat>>shift|setdat<<shift;
    0446 850E      LDD	R16,14+Y
    0447 2D1A      MOV	R17,R10
    0448 940E0726  CALL	lsl8
    044A 2E20      MOV	R2,R16
    044B 850E      LDD	R16,14+Y
    044C 2D1A      MOV	R17,R10
    044D 940E072C  CALL	lsr8
    044F 2E30      MOV	R3,R16
    0450 2832      OR	R3,R2
    0451 863E      STD	R3,14+Y
(0321) 		 DS1302_writeD(C_WP|WR,UPROTECT);
    0452 2722      CLR	R18
    0453 E80E      LDI	R16,0x8E
    0454 DDE4      RCALL	_DS1302_writeD
(0322) 		 DS1302_writeD(setadd|WR,setdat);
    0455 852E      LDD	R18,14+Y
    0456 2F04      MOV	R16,R20
    0457 DDE1      RCALL	_DS1302_writeD
(0323) 		 DS1302_writeD(C_WP|WR,PROTECT);
    0458 E820      LDI	R18,0x80
    0459 E80E      LDI	R16,0x8E
    045A DDDE      RCALL	_DS1302_writeD
(0324) 		 LCD1602_gotoXY(dis_x,dis_y);
    045B 2D2E      MOV	R18,R14
    045C 2F06      MOV	R16,R22
    045D DCC7      RCALL	_LCD1602_gotoXY
(0325) 		 LCD1602_sendstr("2");
    045E E60E      LDI	R16,0x6E
    045F E010      LDI	R17,0
    0460 DCA0      RCALL	_LCD1602_sendstr
(0326) 		 LCD1602_gotoXY(dis_x,dis_y);
    0461 2D2E      MOV	R18,R14
    0462 2F06      MOV	R16,R22
    0463 DCC1      RCALL	_LCD1602_gotoXY
(0327) 		}		 
(0328) 		break;
    0464 C25C      RJMP	0x06C1
(0329) 	case 0x3:   //过程和0键相同,只是将当前设置位设置成3并更新显示
(0330) 		if(RD_TFLAG==0)
    0465 840F      LDD	R0,15+Y
    0466 2000      TST	R0
    0467 F009      BEQ	0x0469
    0468 C258      RJMP	0x06C1
(0331) 		{
(0332) 		 setdat=DS1302_readD(setadd|RD);
    0469 2F04      MOV	R16,R20
    046A 6001      ORI	R16,1
    046B DDED      RCALL	_DS1302_readD
    046C 870E      STD	R16,14+Y
(0333) 		 setdat=setdat>>shift|setdat<<shift;
    046D 2D1A      MOV	R17,R10
    046E 940E0726  CALL	lsl8
    0470 2E20      MOV	R2,R16
    0471 850E      LDD	R16,14+Y
    0472 2D1A      MOV	R17,R10
    0473 940E072C  CALL	lsr8
    0475 2E30      MOV	R3,R16
    0476 2832      OR	R3,R2
    0477 863E      STD	R3,14+Y
(0334) 		 setdat&=0xF0;
    0478 858E      LDD	R24,14+Y
    0479 7F80      ANDI	R24,0xF0
    047A 878E      STD	R24,14+Y
(0335) 		 setdat|=3;
    047B 6083      ORI	R24,3
    047C 878E      STD	R24,14+Y
(0336) 		 setdat=setdat>>shift|setdat<<shift;
    047D 850E      LDD	R16,14+Y
    047E 2D1A      MOV	R17,R10
    047F 940E0726  CALL	lsl8
    0481 2E20      MOV	R2,R16
    0482 850E      LDD	R16,14+Y
    0483 2D1A      MOV	R17,R10
    0484 940E072C  CALL	lsr8
    0486 2E30      MOV	R3,R16
    0487 2832      OR	R3,R2
    0488 863E      STD	R3,14+Y
(0337) 		 DS1302_writeD(C_WP|WR,UPROTECT);
    0489 2722      CLR	R18
    048A E80E      LDI	R16,0x8E
    048B DDAD      RCALL	_DS1302_writeD
(0338) 		 DS1302_writeD(setadd|WR,setdat);
    048C 852E      LDD	R18,14+Y
    048D 2F04      MOV	R16,R20
    048E DDAA      RCALL	_DS1302_writeD
(0339) 		 DS1302_writeD(C_WP|WR,PROTECT);
    048F E820      LDI	R18,0x80
    0490 E80E      LDI	R16,0x8E
    0491 DDA7      RCALL	_DS1302_writeD
(0340) 		 LCD1602_gotoXY(dis_x,dis_y);
    0492 2D2E      MOV	R18,R14
    0493 2F06      MOV	R16,R22
    0494 DC90      RCALL	_LCD1602_gotoXY
(0341) 		 LCD1602_sendstr("3");
    0495 E60C      LDI	R16,0x6C
    0496 E010      LDI	R17,0
    0497 DC69      RCALL	_LCD1602_sendstr
(0342) 		 LCD1602_gotoXY(dis_x,dis_y);
    0498 2D2E      MOV	R18,R14
    0499 2F06      MOV	R16,R22
    049A DC8A      RCALL	_LCD1602_gotoXY
(0343) 		}		 
(0344) 		break;
    049B C225      RJMP	0x06C1
(0345) 	case 0x4:   //过程和0键相同,只是将当前设置位设置成4并更新显示
(0346) 		if(RD_TFLAG==0)
    049C 840F      LDD	R0,15+Y
    049D 2000      TST	R0
    049E F009      BEQ	0x04A0
    049F C221      RJMP	0x06C1
(0347) 		{
(0348) 		 setdat=DS1302_readD(setadd|RD);
    04A0 2F04      MOV	R16,R20
    04A1 6001      ORI	R16,1
    04A2 DDB6      RCALL	_DS1302_readD
    04A3 870E      STD	R16,14+Y
(0349) 		 setdat=setdat>>shift|setdat<<shift;
    04A4 2D1A      MOV	R17,R10
    04A5 940E0726  CALL	lsl8
    04A7 2E20      MOV	R2,R16
    04A8 850E      LDD	R16,14+Y
    04A9 2D1A      MOV	R17,R10
    04AA 940E072C  CALL	lsr8
    04AC 2E30      MOV	R3,R16
    04AD 2832      OR	R3,R2
    04AE 863E      STD	R3,14+Y
(0350) 		 setdat&=0xF0;
    04AF 858E      LDD	R24,14+Y
    04B0 7F80      ANDI	R24,0xF0
    04B1 878E      STD	R24,14+Y
(0351) 		 setdat|=4;
    04B2 6084      ORI	R24,4
    04B3 878E      STD	R24,14+Y
(0352) 		 setdat=setdat>>shift|setdat<<shift;
    04B4 850E      LDD	R16,14+Y
    04B5 2D1A      MOV	R17,R10
    04B6 940E0726  CALL	lsl8
    04B8 2E20      MOV	R2,R16
    04B9 850E      LDD	R16,14+Y
    04BA 2D1A      MOV	R17,R10
    04BB 940E072C  CALL	lsr8
    04BD 2E30      MOV	R3,R16
    04BE 2832      OR	R3,R2
    04BF 863E      STD	R3,14+Y
(0353) 		 DS1302_writeD(C_WP|WR,UPROTECT);
    04C0 2722      CLR	R18
    04C1 E80E      LDI	R16,0x8E
    04C2 DD76      RCALL	_DS1302_writeD
(0354) 		 DS1302_writeD(setadd|WR,setdat);
    04C3 852E      LDD	R18,14+Y
    04C4 2F04      MOV	R16,R20
    04C5 DD73      RCALL	_DS1302_writeD
(0355) 		 DS1302_writeD(C_WP|WR,PROTECT);
    04C6 E820      LDI	R18,0x80
    04C7 E80E      LDI	R16,0x8E
    04C8 DD70      RCALL	_DS1302_writeD
(0356) 		 LCD1602_gotoXY(dis_x,dis_y);
    04C9 2D2E      MOV	R18,R14
    04CA 2F06      MOV	R16,R22
    04CB DC59      RCALL	_LCD1602_gotoXY
(0357) 		 LCD1602_sendstr("4");
    04CC E60A      LDI	R16,0x6A
    04CD E010      LDI	R17,0
    04CE DC32      RCALL	_LCD1602_sendstr
(0358) 		 LCD1602_gotoXY(dis_x,dis_y);
    04CF 2D2E      MOV	R18,R14
    04D0 2F06      MOV	R16,R22
    04D1 DC53      RCALL	_LCD1602_gotoXY
(0359) 		}		 
(0360) 		break;
    04D2 C1EE      RJMP	0x06C1
(0361) 	case 0x5:    //过程和0键相同,只是将当前设置位设置成5并更新显示
(0362) 		if(RD_TFLAG==0)
    04D3 840F      LDD	R0,15+Y
    04D4 2000      TST	R0
    04D5 F009      BEQ	0x04D7
    04D6 C1EA      RJMP	0x06C1
(0363) 		{
(0364) 		 setdat=DS1302_rea

⌨️ 快捷键说明

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