📄 ds1305.lis
字号:
0104 4A95 dec R20
0106 L17:
0106 .dbline 112
0106 2224 clr R2
0108 2416 cp R2,R20
010A 70F3 brlo L14
010C .dbline 126
010C ; asm("nop");
010C ; asm("nop");
010C ; set_ds1305_sclk();
010C ; asm("nop");
010C ; asm("nop");
010C ; clr_ds1305_sclk();
010C ; asm("nop");
010C ; asm("nop");
010C ; data>>=1;
010C ; }
010C ; clr_ds1305_rst();
010C A898 cbi 0x15,0
010E .dbline 127
010E ; asm("nop");
010E 0000 nop
0110 .dbline 128
0110 ; asm("nop");
0110 0000 nop
0112 .dbline 129
0112 ; clr_ds1305_io_ddr();
0112 A298 cbi 0x14,2
0114 .dbline 130
0114 ; asm("nop");
0114 0000 nop
0116 .dbline 131
0116 ; asm("nop");
0116 0000 nop
0118 .dbline -2
0118 L7:
0118 00D0 rcall pop_gset1
011A .dbline 0 ; func end
011A 0895 ret
011C .dbsym r i 20 c
011C .dbsym r data 18 c
011C .dbsym r reg 16 c
011C .dbend
011C .dbfunc e ds1305_read _ds1305_read fc
011C ; data -> R20
011C ; i -> R22
011C ; reg -> R16
.even
011C _ds1305_read::
011C 00D0 rcall push_gset2
011E .dbline -1
011E .dbline 134
011E ; }
011E ; unsigned char ds1305_read(unsigned char reg)
011E ; {
011E .dbline 135
011E ; unsigned char data=0;
011E 4427 clr R20
0120 .dbline 136
0120 ; unsigned char i=0;
0120 6627 clr R22
0122 .dbline 138
0122 ;
0122 ; set_ds1305_io_ddr();
0122 A29A sbi 0x14,2
0124 .dbline 141
0124 ; //asm("nop");
0124 ; //asm("nop");
0124 ; clr_ds1305_rst();
0124 A898 cbi 0x15,0
0126 .dbline 142
0126 ; asm("nop");
0126 0000 nop
0128 .dbline 143
0128 ; asm("nop");
0128 0000 nop
012A .dbline 144
012A ; clr_ds1305_sclk();
012A A998 cbi 0x15,1
012C .dbline 145
012C ; asm("nop");
012C 0000 nop
012E .dbline 146
012E ; asm("nop");
012E 0000 nop
0130 .dbline 147
0130 ; set_ds1305_rst();
0130 A89A sbi 0x15,0
0132 .dbline 148
0132 ; asm("nop");
0132 0000 nop
0134 .dbline 149
0134 ; asm("nop");
0134 0000 nop
0136 .dbline 150
0136 ; for(i=8;i>0;i--)
0136 68E0 ldi R22,8
0138 0FC0 rjmp L24
013A L21:
013A .dbline 151
013A ; {
013A .dbline 153
013A ;
013A ; if(reg&0x01) set_ds1305_io();
013A 00FF sbrs R16,0
013C 02C0 rjmp L25
013E .dbline 153
013E AA9A sbi 0x15,2
0140 01C0 rjmp L26
0142 L25:
0142 .dbline 154
0142 ; else clr_ds1305_io();
0142 AA98 cbi 0x15,2
0144 L26:
0144 .dbline 155
0144 0000 nop
0146 .dbline 156
0146 0000 nop
0148 .dbline 157
0148 A99A sbi 0x15,1
014A .dbline 158
014A 0000 nop
014C .dbline 159
014C 0000 nop
014E .dbline 160
014E A998 cbi 0x15,1
0150 .dbline 161
0150 0000 nop
0152 .dbline 162
0152 0000 nop
0154 .dbline 163
0154 0695 lsr R16
0156 .dbline 164
0156 L22:
0156 .dbline 150
0156 6A95 dec R22
0158 L24:
0158 .dbline 150
0158 2224 clr R2
015A 2616 cp R2,R22
015C 70F3 brlo L21
015E .dbline 165
015E ; asm("nop");
015E ; asm("nop");
015E ; set_ds1305_sclk();
015E ; asm("nop");
015E ; asm("nop");
015E ; clr_ds1305_sclk();
015E ; asm("nop");
015E ; asm("nop");
015E ; reg>>=1;
015E ; }
015E ; clr_ds1305_io_ddr();
015E A298 cbi 0x14,2
0160 .dbline 166
0160 ; asm("nop");
0160 0000 nop
0162 .dbline 167
0162 ; asm("nop");
0162 0000 nop
0164 .dbline 168
0164 ; for(i=8;i>0;i--)
0164 68E0 ldi R22,8
0166 0DC0 rjmp L30
0168 L27:
0168 .dbline 169
0168 ; {
0168 .dbline 170
0168 ; data>>=1;
0168 4695 lsr R20
016A .dbline 171
016A ; if(in_ds1305_io()) data|=0x80;
016A 9A9B sbis 0x13,2
016C 01C0 rjmp L31
016E .dbline 171
016E 4068 ori R20,128
0170 L31:
0170 .dbline 172
0170 0000 nop
0172 .dbline 173
0172 0000 nop
0174 .dbline 174
0174 A99A sbi 0x15,1
0176 .dbline 175
0176 0000 nop
0178 .dbline 176
0178 0000 nop
017A .dbline 177
017A A998 cbi 0x15,1
017C .dbline 178
017C 0000 nop
017E .dbline 179
017E 0000 nop
0180 .dbline 180
0180 L28:
0180 .dbline 168
0180 6A95 dec R22
0182 L30:
0182 .dbline 168
0182 2224 clr R2
0184 2616 cp R2,R22
0186 80F3 brlo L27
0188 .dbline 181
0188 ; asm("nop");
0188 ; asm("nop");
0188 ; set_ds1305_sclk();
0188 ; asm("nop");
0188 ; asm("nop");
0188 ; clr_ds1305_sclk();
0188 ; asm("nop");
0188 ; asm("nop");
0188 ; }
0188 ; clr_ds1305_rst();
0188 A898 cbi 0x15,0
018A .dbline 182
018A ; asm("nop");
018A 0000 nop
018C .dbline 183
018C ; asm("nop");
018C 0000 nop
018E .dbline 184
018E ; return(data);
018E 042F mov R16,R20
0190 .dbline -2
0190 L20:
0190 00D0 rcall pop_gset2
0192 .dbline 0 ; func end
0192 0895 ret
0194 .dbsym r data 20 c
0194 .dbsym r i 22 c
0194 .dbsym r reg 16 c
0194 .dbend
0194 .dbfunc e check_ds1305 _check_ds1305 fc
.even
0194 _check_ds1305::
0194 .dbline -1
0194 .dbline 187
0194 ; }
0194 ; unsigned char check_ds1305(void)
0194 ; {
0194 .dbline 188
0194 ; ds1305_write(ds1305_control_reg,0x40);
0194 20E4 ldi R18,64
0196 0FE0 ldi R16,15
0198 84DF rcall _ds1305_write
019A .dbline 189
019A ; if(ds1305_read(ds1305_control_reg)==0x40) return 1;
019A 0FE0 ldi R16,15
019C BFDF rcall _ds1305_read
019E 0034 cpi R16,64
01A0 11F4 brne L34
01A2 .dbline 189
01A2 01E0 ldi R16,1
01A4 01C0 rjmp L33
01A6 L34:
01A6 .dbline 190
01A6 ; return 0;
01A6 0027 clr R16
01A8 .dbline -2
01A8 L33:
01A8 .dbline 0 ; func end
01A8 0895 ret
01AA .dbend
01AA .dbfunc e ds1305_read_time _ds1305_read_time fV
.even
01AA _ds1305_read_time::
01AA .dbline -1
01AA .dbline 193
01AA ; }
01AA ; void ds1305_read_time(void)
01AA ; {
01AA .dbline 194
01AA ; year=ds1305_read(ds1305_year_reg); //年
01AA 06E0 ldi R16,6
01AC B7DF rcall _ds1305_read
01AE 202E mov R2,R16
01B0 3324 clr R3
01B2 30920100 sts _year+1,R3
01B6 20920000 sts _year,R2
01BA .dbline 195
01BA ; year=((year&0xf0)>>4)*10+(year&0x0F)+2000;
01BA 9101 movw R18,R2
01BC 207F andi R18,240
01BE 3070 andi R19,0
01C0 3695 lsr R19
01C2 2795 ror R18
01C4 3695 lsr R19
01C6 2795 ror R18
01C8 3695 lsr R19
01CA 2795 ror R18
01CC 3695 lsr R19
01CE 2795 ror R18
01D0 0AE0 ldi R16,10
01D2 10E0 ldi R17,0
01D4 00D0 rcall empy16s
01D6 80910000 lds R24,_year
01DA 90910100 lds R25,_year+1
01DE 8F70 andi R24,15
01E0 9070 andi R25,0
01E2 1801 movw R2,R16
01E4 280E add R2,R24
01E6 391E adc R3,R25
01E8 C101 movw R24,R2
01EA 8053 subi R24,48 ; offset = 2000
01EC 984F sbci R25,248
01EE 90930100 sts _year+1,R25
01F2 80930000 sts _year,R24
01F6 .dbline 196
01F6 ; month=ds1305_read(ds1305_month_reg);//月
01F6 05E0 ldi R16,5
01F8 91DF rcall _ds1305_read
01FA 00930700 sts _month,R16
01FE .dbline 197
01FE ; month=((month&0xf0)>>4)*10+(month&0x0F);
01FE 802F mov R24,R16
0200 807F andi R24,240
0202 8295 swap R24
0204 8F70 andi R24,#0x0F
0206 9AE0 ldi R25,10
0208 989F mul R25,R24
020A 802F mov R24,R16
020C 8F70 andi R24,15
020E 202C mov R2,R0
0210 280E add R2,R24
0212 20920700 sts _month,R2
0216 .dbline 198
0216 ; day=ds1305_read(ds1305_date_reg); //日
0216 04E0 ldi R16,4
0218 81DF rcall _ds1305_read
021A 00930500 sts _day,R16
021E .dbline 199
021E ; day=((day&0xf0)>>4)*10+(day&0x0F);
021E 802F mov R24,R16
0220 807F andi R24,240
0222 8295 swap R24
0224 8F70 andi R24,#0x0F
0226 9AE0 ldi R25,10
0228 989F mul R25,R24
022A 802F mov R24,R16
022C 8F70 andi R24,15
022E 202C mov R2,R0
0230 280E add R2,R24
0232 20920500 sts _day,R2
0236 .dbline 200
0236 ; week=ds1305_read(ds1305_day_reg); //周
0236 03E0 ldi R16,3
0238 71DF rcall _ds1305_read
023A 00930600 sts _week,R16
023E .dbline 201
023E ; week=((week&0xf0)>>4)*10+(week&0x0F);
023E 802F mov R24,R16
0240 807F andi R24,240
0242 8295 swap R24
0244 8F70 andi R24,#0x0F
0246 9AE0 ldi R25,10
0248 989F mul R25,R24
024A 802F mov R24,R16
024C 8F70 andi R24,15
024E 202C mov R2,R0
0250 280E add R2,R24
0252 20920600 sts _week,R2
0256 .dbline 202
0256 ; hour=ds1305_read(ds1305_hr_reg); //时
0256 02E0 ldi R16,2
0258 61DF rcall _ds1305_read
025A 00930400 sts _hour,R16
025E .dbline 203
025E ; hour=((hour&0xf0)>>4)*10+(hour&0x0F);
025E 802F mov R24,R16
0260 807F andi R24,240
0262 8295 swap R24
0264 8F70 andi R24,#0x0F
0266 9AE0 ldi R25,10
0268 989F mul R25,R24
026A 802F mov R24,R16
026C 8F70 andi R24,15
026E 202C mov R2,R0
0270 280E add R2,R24
0272 20920400 sts _hour,R2
0276 .dbline 204
0276 ; minute=ds1305_read(ds1305_min_reg); //分
0276 01E0 ldi R16,1
0278 51DF rcall _ds1305_read
027A 00930300 sts _minute,R16
027E .dbline 205
027E ; minute=((minute&0xf0)>>4)*10+(minute&0x0F);
027E 802F mov R24,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -