📄 rtc.lis
字号:
0480 .dbline 183
0480 ; return exist;
0480 042F mov R16,R20
0482 .dbline -2
0482 L107:
0482 0E940000 xcall pop_gset1
0486 .dbline 0 ; func end
0486 0895 ret
0488 .dbsym r exist 20 c
0488 .dbend
0488 .dbfunc e DS1302_init _DS1302_init fV
.even
0488 _DS1302_init::
0488 .dbline -1
0488 .dbline 192
0488 ; }
0488 ; /*******************************************
0488 ; 函数名称: DS1302_init
0488 ; 功 能: 初始化DS1302
0488 ; 参 数: 无
0488 ; 返回值 : 无
0488 ; /********************************************/
0488 ; void DS1302_init(void)
0488 ; {
0488 .dbline 193
0488 ; DS1302_writeD(C_WP|WR,UPROTECT); //写入写允许命令
0488 2227 clr R18
048A 0EE8 ldi R16,142
048C 77DF xcall _DS1302_writeD
048E .dbline 194
048E ; DS1302_writeD(C_SEC|WR,CLK_START); //启动振荡器,DS1302开始工作
048E 2227 clr R18
0490 00E8 ldi R16,128
0492 74DF xcall _DS1302_writeD
0494 .dbline 195
0494 ; DS1302_writeD(C_WP|WR,PROTECT); //控制命令,WP位为1,不允许写操作
0494 20E8 ldi R18,128
0496 0EE8 ldi R16,142
0498 .dbline -2
0498 .dbline 196
0498 ; }
0498 L110:
0498 .dbline 0 ; func end
0498 71CF xjmp _DS1302_writeD
049A .dbend
049A .dbfunc e BCD_ASCII _BCD_ASCII fV
049A ; ptasc -> R20,R21
049A ; BCD -> R22
.even
049A _BCD_ASCII::
049A 0E940000 xcall push_gset2
049E A901 movw R20,R18
04A0 602F mov R22,R16
04A2 .dbline -1
04A2 .dbline 205
04A2 ; /*******************************************
04A2 ; 函数名称: BCD_ASCII
04A2 ; 功 能: 将压缩BCD码转换成ascii码
04A2 ; 参 数: BCD--将要转换的压缩BCD码
04A2 ; ptasc--转换后的ASCII码数组指针
04A2 ; 返回值 : 无
04A2 ; /********************************************/
04A2 ; void BCD_ASCII(uchar BCD,uchar *ptasc)
04A2 ; {
04A2 .dbline 206
04A2 ; *ptasc=BCD/16|0x30; //转换十位
04A2 10E1 ldi R17,16
04A4 062F mov R16,R22
04A6 0E940000 xcall div8u
04AA 802F mov R24,R16
04AC 8063 ori R24,48
04AE FA01 movw R30,R20
04B0 8083 std z+0,R24
04B2 .dbline 207
04B2 ; *(ptasc+1)=BCD&0x0F|0x30; //转换个位
04B2 862F mov R24,R22
04B4 8F70 andi R24,15
04B6 8063 ori R24,48
04B8 8183 std z+1,R24
04BA .dbline -2
04BA .dbline 208
04BA ; }
04BA L111:
04BA 0E940000 xcall pop_gset2
04BE .dbline 0 ; func end
04BE 0895 ret
04C0 .dbsym r ptasc 20 pc
04C0 .dbsym r BCD 22 c
04C0 .dbend
.area lit(rom, con, rel)
0000 L113:
0000 0000 .byte 0,0
0002 2D00 .byte 45,0
0004 002D .byte 0,45
0006 0000 .byte 0,0
0008 2000 .byte 32,0
000A 00 .byte 0
000B L114:
000B 0000 .byte 0,0
000D 3A00 .byte 58,0
000F 003A .byte 0,58
0011 0000 .byte 0,0
0013 00 .byte 0
.area text(rom, con, rel)
04C0 .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
04C0 .dbfunc e Disp_time _Disp_time fV
04C0 ; line1 -> y+11
04C0 ; line2 -> y+2
04C0 ; asc -> y+0
04C0 ; i -> R20
04C0 ; time -> R22,R23
.even
04C0 _Disp_time::
04C0 0E940000 xcall push_gset2
04C4 B801 movw R22,R16
04C6 6697 sbiw R28,22
04C8 .dbline -1
04C8 .dbline 216
04C8 ; /*******************************************
04C8 ; 函数名称: Disp_time
04C8 ; 功 能: 在1602液晶上显示当前时间(第1行格式:年-月-日 星期;第2行格式:时-分-秒)
04C8 ; 参 数: time[]--时间数组
04C8 ; 返回值 : 无
04C8 ; /********************************************/
04C8 ; void Disp_time(uchar time[])
04C8 ; {
04C8 .dbline 218
04C8 ; uchar i,asc[2];
04C8 ; uchar line1[11]={0,0,'-',0,0,'-',0,0,' ',0,'\0'};//显示第1行的字符数组
04C8 80E0 ldi R24,<L113
04CA 90E0 ldi R25,>L113
04CC FE01 movw R30,R28
04CE 3B96 adiw R30,11
04D0 0BE0 ldi R16,11
04D2 10E0 ldi R17,0
04D4 FA93 st -y,R31
04D6 EA93 st -y,R30
04D8 9A93 st -y,R25
04DA 8A93 st -y,R24
04DC 0E940000 xcall asgncblk
04E0 .dbline 219
04E0 ; uchar line2[9]={0,0,':',0,0,':',0,0,'\0'}; //显示第2行的字符数组
04E0 80E0 ldi R24,<L114
04E2 90E0 ldi R25,>L114
04E4 FE01 movw R30,R28
04E6 3296 adiw R30,2
04E8 09E0 ldi R16,9
04EA 10E0 ldi R17,0
04EC FA93 st -y,R31
04EE EA93 st -y,R30
04F0 9A93 st -y,R25
04F2 8A93 st -y,R24
04F4 0E940000 xcall asgncblk
04F8 .dbline 220
04F8 ; for(i=0;i<3;i++) //为第2行的字符数组赋值
04F8 4427 clr R20
04FA 1FC0 xjmp L118
04FC L115:
04FC .dbline 221
04FC .dbline 222
04FC 9E01 movw R18,R28
04FE 242E mov R2,R20
0500 3324 clr R3
0502 E2E0 ldi R30,2
0504 F0E0 ldi R31,0
0506 E219 sub R30,R2
0508 F309 sbc R31,R3
050A E60F add R30,R22
050C F71F adc R31,R23
050E 0081 ldd R16,z+0
0510 C4DF xcall _BCD_ASCII
0512 .dbline 223
0512 83E0 ldi R24,3
0514 849F mul R24,R20
0516 F001 movw R30,R0
0518 CE01 movw R24,R28
051A 0296 adiw R24,2
051C E80F add R30,R24
051E F91F adc R31,R25
0520 8881 ldd R24,y+0
0522 8F77 andi R24,127
0524 8083 std z+0,R24
0526 .dbline 224
0526 83E0 ldi R24,3
0528 849F mul R24,R20
052A F001 movw R30,R0
052C CE01 movw R24,R28
052E 0396 adiw R24,3
0530 E80F add R30,R24
0532 F91F adc R31,R25
0534 2980 ldd R2,y+1
0536 2082 std z+0,R2
0538 .dbline 225
0538 L116:
0538 .dbline 220
0538 4395 inc R20
053A L118:
053A .dbline 220
053A 4330 cpi R20,3
053C F8F2 brlo L115
053E .dbline 226
053E ; {
053E ; BCD_ASCII(time[2-i],asc);
053E ; line2[i*3]=asc[0]&0x7F;
053E ; line2[i*3+1]=asc[1];
053E ; }
053E ; BCD_ASCII(time[6],asc); //为第1行的年赋值
053E 9E01 movw R18,R28
0540 FB01 movw R30,R22
0542 0681 ldd R16,z+6
0544 AADF xcall _BCD_ASCII
0546 .dbline 227
0546 ; line1[0]=asc[0];
0546 2880 ldd R2,y+0
0548 2B86 std y+11,R2
054A .dbline 228
054A ; line1[1]=asc[1];
054A 2980 ldd R2,y+1
054C 2C86 std y+12,R2
054E .dbline 229
054E ; BCD_ASCII(time[4],asc); //为第1行的月赋值
054E 9E01 movw R18,R28
0550 FB01 movw R30,R22
0552 0481 ldd R16,z+4
0554 A2DF xcall _BCD_ASCII
0556 .dbline 230
0556 ; line1[3]=asc[0];
0556 2880 ldd R2,y+0
0558 2E86 std y+14,R2
055A .dbline 231
055A ; line1[4]=asc[1];
055A 2980 ldd R2,y+1
055C 2F86 std y+15,R2
055E .dbline 232
055E ; BCD_ASCII(time[3],asc); //为第1行的日赋值
055E 9E01 movw R18,R28
0560 FB01 movw R30,R22
0562 0381 ldd R16,z+3
0564 9ADF xcall _BCD_ASCII
0566 .dbline 233
0566 ; line1[6]=asc[0];
0566 2880 ldd R2,y+0
0568 298A std y+17,R2
056A .dbline 234
056A ; line1[7]=asc[1];
056A 2980 ldd R2,y+1
056C 2A8A std y+18,R2
056E .dbline 235
056E ; BCD_ASCII(time[5],asc); //为第1行的星期赋值
056E 9E01 movw R18,R28
0570 FB01 movw R30,R22
0572 0581 ldd R16,z+5
0574 92DF xcall _BCD_ASCII
0576 .dbline 236
0576 ; line1[9]=asc[1];
0576 2980 ldd R2,y+1
0578 2C8A std y+20,R2
057A L131:
057A .dbline 238
057A L132:
057A .dbline 238
057A ;
057A ; while(LCD1602_readBF());
057A DEDD xcall _LCD1602_readBF
057C 0023 tst R16
057E E9F7 brne L131
0580 .dbline 239
0580 ; LCD1602_gotoXY(1,2); //第1行从第3个位置开始显示
0580 22E0 ldi R18,2
0582 01E0 ldi R16,1
0584 E7DD xcall _LCD1602_gotoXY
0586 .dbline 240
0586 ; LCD1602_sendstr("20"); //将07年显示为2007的形式
0586 00E0 ldi R16,<L134
0588 10E0 ldi R17,>L134
058A C0DD xcall _LCD1602_sendstr
058C .dbline 241
058C ; LCD1602_sendstr(line1); //第1行显示
058C 8E01 movw R16,R28
058E 055F subi R16,245 ; offset = 11
0590 1F4F sbci R17,255
0592 BCDD xcall _LCD1602_sendstr
0594 L135:
0594 .dbline 242
0594 L136:
0594 .dbline 242
0594 ; while(LCD1602_readBF());
0594 D1DD xcall _LCD1602_readBF
0596 0023 tst R16
0598 E9F7 brne L135
059A .dbline 243
059A ; LCD1602_gotoXY(2,4); //第2行从第5个位置开始显示
059A 24E0 ldi R18,4
059C 02E0 ldi R16,2
059E DADD xcall _LCD1602_gotoXY
05A0 .dbline 244
05A0 ; LCD1602_sendstr(line2); //第2行显示
05A0 8E01 movw R16,R28
05A2 0E5F subi R16,254 ; offset = 2
05A4 1F4F sbci R17,255
05A6 B2DD xcall _LCD1602_sendstr
05A8 .dbline -2
05A8 .dbline 245
05A8 ; }
05A8 L112:
05A8 6696 adiw R28,22
05AA 0E940000 xcall pop_gset2
05AE .dbline 0 ; func end
05AE 0895 ret
05B0 .dbsym l line1 11 A[11:11]c
05B0 .dbsym l line2 2 A[9:9]c
05B0 .dbsym l asc 0 A[2:2]c
05B0 .dbsym r i 20 c
05B0 .dbsym r time 22 pc
05B0 .dbend
.area lit(rom, con, rel)
0014 L139:
0014 1558 .byte 21,'X
0016 1301 .byte 19,1
0018 0106 .byte 1,6
001A 07 .byte 7
001B L140:
001B 0000 .byte 0,0
001D 0000 .byte 0,0
001F 0000 .byte 0,0
0021 00 .byte 0
.area text(rom, con, rel)
05B0 .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\RTC.C
05B0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -