📄 rtc.lis
字号:
035A .dbline 67
035A C798 cbi 0x18,7
035C .dbline 68
035C 0AE0 ldi R16,10
035E 10E0 ldi R17,0
0360 4FDE xcall _Delayus
0362 .dbline 69
0362 B59B sbis 0x16,5
0364 02C0 rjmp L93
0366 .dbline 70
0366 .dbline 71
0366 6068 ori R22,128
0368 .dbline 72
0368 01C0 xjmp L94
036A L93:
036A .dbline 74
036A .dbline 75
036A 6F77 andi R22,127
036C .dbline 76
036C L94:
036C .dbline 77
036C L90:
036C .dbline 62
036C 4395 inc R20
036E L92:
036E .dbline 62
036E 4830 cpi R20,8
0370 78F3 brlo L89
0372 .dbline 78
0372 BD9A sbi 0x17,5
0374 .dbline 79
0374 062F mov R16,R22
0376 .dbline -2
0376 L88:
0376 0E940000 xcall pop_gset2
037A .dbline 0 ; func end
037A 0895 ret
037C .dbsym r i 20 c
037C .dbsym r byte 22 c
037C .dbend
037C .dbfunc e DS1302_writeD _DS1302_writeD fV
037C ; data -> R20
037C ; addr -> R22
.even
037C _DS1302_writeD::
037C 0E940000 xcall push_gset2
0380 422F mov R20,R18
0382 602F mov R22,R16
0384 .dbline -1
0384 .dbline 89
0384 .dbline 90
0384 AF98 cbi 0x15,7
0386 .dbline 91
0386 C798 cbi 0x18,7
0388 .dbline 92
0388 0AE0 ldi R16,10
038A 10E0 ldi R17,0
038C 39DE xcall _Delayus
038E .dbline 93
038E AF9A sbi 0x15,7
0390 .dbline 94
0390 0AE0 ldi R16,10
0392 10E0 ldi R17,0
0394 35DE xcall _Delayus
0396 .dbline 95
0396 062F mov R16,R22
0398 BEDF xcall _DS1302_writeB
039A .dbline 96
039A 0AE0 ldi R16,10
039C 10E0 ldi R17,0
039E 30DE xcall _Delayus
03A0 .dbline 97
03A0 C798 cbi 0x18,7
03A2 .dbline 98
03A2 0AE0 ldi R16,10
03A4 10E0 ldi R17,0
03A6 2CDE xcall _Delayus
03A8 .dbline 99
03A8 042F mov R16,R20
03AA B5DF xcall _DS1302_writeB
03AC .dbline 100
03AC C798 cbi 0x18,7
03AE .dbline 101
03AE 0AE0 ldi R16,10
03B0 10E0 ldi R17,0
03B2 26DE xcall _Delayus
03B4 .dbline 102
03B4 AF98 cbi 0x15,7
03B6 .dbline -2
03B6 .dbline 103
03B6 L95:
03B6 0E940000 xcall pop_gset2
03BA .dbline 0 ; func end
03BA 0895 ret
03BC .dbsym r data 20 c
03BC .dbsym r addr 22 c
03BC .dbend
03BC .dbfunc e DS1302_readD _DS1302_readD fc
03BC ; data -> R20
03BC ; addr -> R20
.even
03BC _DS1302_readD::
03BC 0E940000 xcall push_gset1
03C0 402F mov R20,R16
03C2 .dbline -1
03C2 .dbline 111
03C2 .dbline 113
03C2 AF98 cbi 0x15,7
03C4 .dbline 114
03C4 C798 cbi 0x18,7
03C6 .dbline 115
03C6 0AE0 ldi R16,10
03C8 10E0 ldi R17,0
03CA 1ADE xcall _Delayus
03CC .dbline 116
03CC AF9A sbi 0x15,7
03CE .dbline 117
03CE 0AE0 ldi R16,10
03D0 10E0 ldi R17,0
03D2 16DE xcall _Delayus
03D4 .dbline 118
03D4 042F mov R16,R20
03D6 9FDF xcall _DS1302_writeB
03D8 .dbline 119
03D8 0AE0 ldi R16,10
03DA 10E0 ldi R17,0
03DC 11DE xcall _Delayus
03DE .dbline 120
03DE B1DF xcall _DS1302_readB
03E0 402F mov R20,R16
03E2 .dbline 121
03E2 0AE0 ldi R16,10
03E4 10E0 ldi R17,0
03E6 0CDE xcall _Delayus
03E8 .dbline 122
03E8 C798 cbi 0x18,7
03EA .dbline 123
03EA AF98 cbi 0x15,7
03EC .dbline 124
03EC 042F mov R16,R20
03EE .dbline -2
03EE L96:
03EE 0E940000 xcall pop_gset1
03F2 .dbline 0 ; func end
03F2 0895 ret
03F4 .dbsym r data 20 c
03F4 .dbsym r addr 20 c
03F4 .dbend
03F4 .dbfunc e DS1302_setT _DS1302_setT fV
03F4 ; addr -> R20
03F4 ; i -> R22
03F4 ; ptTimeD -> R10,R11
.even
03F4 _DS1302_setT::
03F4 0E940000 xcall push_gset3
03F8 5801 movw R10,R16
03FA .dbline -1
03FA .dbline 133
03FA .dbline 135
03FA 40E8 ldi R20,128
03FC .dbline 136
03FC 2227 clr R18
03FE 0EE8 ldi R16,142
0400 BDDF xcall _DS1302_writeD
0402 .dbline 137
0402 05E0 ldi R16,5
0404 10E0 ldi R17,0
0406 14DE xcall _Delayms
0408 .dbline 138
0408 6627 clr R22
040A 0CC0 xjmp L101
040C L98:
040C .dbline 139
040C .dbline 140
040C E62F mov R30,R22
040E FF27 clr R31
0410 EA0D add R30,R10
0412 FB1D adc R31,R11
0414 2081 ldd R18,z+0
0416 042F mov R16,R20
0418 B1DF xcall _DS1302_writeD
041A .dbline 141
041A 4E5F subi R20,254 ; addi 2
041C .dbline 142
041C 01E0 ldi R16,1
041E 10E0 ldi R17,0
0420 07DE xcall _Delayms
0422 .dbline 143
0422 L99:
0422 .dbline 138
0422 6395 inc R22
0424 L101:
0424 .dbline 138
0424 6730 cpi R22,7
0426 90F3 brlo L98
0428 .dbline 144
0428 ; }
0428 ; DS1302_writeD(C_WP|WR,PROTECT); //控制命令,WP位为1,不允许写操作
0428 20E8 ldi R18,128
042A 0EE8 ldi R16,142
042C A7DF xcall _DS1302_writeD
042E .dbline -2
042E .dbline 145
042E ; }
042E L97:
042E 0E940000 xcall pop_gset3
0432 .dbline 0 ; func end
0432 0895 ret
0434 .dbsym r addr 20 c
0434 .dbsym r i 22 c
0434 .dbsym r ptTimeD 10 pc
0434 .dbend
0434 .dbfunc e DS1302_getT _DS1302_getT fV
0434 ; addr -> R20
0434 ; i -> R22
0434 ; time -> R10,R11
.even
0434 _DS1302_getT::
0434 0E940000 xcall push_gset3
0438 5801 movw R10,R16
043A .dbline -1
043A .dbline 153
043A ; /*******************************************
043A ; 函数名称: DS1302_getT
043A ; 功 能: 读取DS1302的当前时间
043A ; 参 数: time[]--读取的时间数组
043A ; 返回值 : 无
043A ; /********************************************/
043A ; void DS1302_getT(uchar time[])
043A ; {
043A .dbline 155
043A ; uchar i;
043A ; uchar addr = 0x80; //读取地址从秒寄存器开始
043A 40E8 ldi R20,128
043C .dbline 156
043C ; for(i=0;i<7;i++)
043C 6627 clr R22
043E 0AC0 xjmp L106
0440 L103:
0440 .dbline 157
0440 .dbline 158
0440 042F mov R16,R20
0442 0160 ori R16,1
0444 BBDF xcall _DS1302_readD
0446 E62F mov R30,R22
0448 FF27 clr R31
044A EA0D add R30,R10
044C FB1D adc R31,R11
044E 0083 std z+0,R16
0450 .dbline 159
0450 4E5F subi R20,254 ; addi 2
0452 .dbline 160
0452 L104:
0452 .dbline 156
0452 6395 inc R22
0454 L106:
0454 .dbline 156
0454 6730 cpi R22,7
0456 A0F3 brlo L103
0458 .dbline 161
0458 ; {
0458 ; time[i]=DS1302_readD(addr|RD); // 秒 分 时 日 月 星期 年
0458 ; addr+=2;
0458 ; }
0458 ; PORTB&=~BIT(RTC_CLK); //拉低时钟端(时钟端在不操作时为低)
0458 C798 cbi 0x18,7
045A .dbline -2
045A .dbline 162
045A ; }
045A L102:
045A 0E940000 xcall pop_gset3
045E .dbline 0 ; func end
045E 0895 ret
0460 .dbsym r addr 20 c
0460 .dbsym r i 22 c
0460 .dbsym r time 10 pc
0460 .dbend
0460 .dbfunc e DS1302_check _DS1302_check fc
0460 ; exist -> R20
.even
0460 _DS1302_check::
0460 0E940000 xcall push_gset1
0464 .dbline -1
0464 .dbline 170
0464 ; /*******************************************
0464 ; 函数名称: DS1302_check
0464 ; 功 能: 检测DS1302是否正常工作
0464 ; 参 数: 无
0464 ; 返回值 : exist--为TRUE为检测到DS1302,为FALSE为没检测到
0464 ; /********************************************/
0464 ; uchar DS1302_check(void)
0464 ; {
0464 .dbline 172
0464 ; uchar exist;
0464 ; DS1302_writeD(C_WP|WR,UPROTECT); //写入写允许命令
0464 2227 clr R18
0466 0EE8 ldi R16,142
0468 89DF xcall _DS1302_writeD
046A .dbline 173
046A ; DS1302_writeD(C_RAMBASE|WR,0xA5); //RAM0写入0xA5
046A 25EA ldi R18,165
046C 00EC ldi R16,192
046E 86DF xcall _DS1302_writeD
0470 .dbline 174
0470 ; exist=DS1302_readD(C_RAMBASE|RD); //读取RAM0
0470 01EC ldi R16,193
0472 A4DF xcall _DS1302_readD
0474 402F mov R20,R16
0476 .dbline 175
0476 ; if(exist==0xA5)
0476 053A cpi R16,165
0478 11F4 brne L108
047A .dbline 176
047A ; {
047A .dbline 177
047A ; exist=TRUE; //如果读取值与写入值相等,返回TRUE
047A 41E0 ldi R20,1
047C .dbline 178
047C ; }
047C 01C0 xjmp L109
047E L108:
047E .dbline 180
047E ; else
047E ; {
047E .dbline 181
047E ; exist=FALSE; //如果读取值与写入值不相等,返回FALSE
047E 4427 clr R20
0480 .dbline 182
0480 ; }
0480 L109:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -