📄 rtc.lst
字号:
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 + -