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