📄 ds1307.lis
字号:
0134 .dbline 77
0134 ; addr+=8;
0134 485F subi R20,248 ; addi 8
0136 .dbline 78
0136 ; return rtc_write(addr,buf,len);
0136 0D80 ldd R0,y+5
0138 0882 std y+0,R0
013A 9B01 movw R18,R22
013C 042F mov R16,R20
013E 60DF xcall _rtc_write
0140 .dbline -2
0140 L15:
0140 2196 adiw R28,1
0142 0E940000 xcall pop_gset2
0146 .dbline 0 ; func end
0146 0895 ret
0148 .dbsym l len 5 c
0148 .dbsym r buf 22 pc
0148 .dbsym r addr 20 c
0148 .dbend
0148 .dbfunc e byte_bintobcd _byte_bintobcd fc
0148 ; ret -> R20
0148 ; bin -> R22
.even
0148 _byte_bintobcd::
0148 0E940000 xcall push_gset2
014C 602F mov R22,R16
014E .dbline -1
014E .dbline 82
014E ; }
014E ;
014E ; unsigned char byte_bintobcd(unsigned char bin)
014E ; {
014E .dbline 84
014E ; unsigned char ret;
014E ; bin&=0x7f;
014E 6F77 andi R22,127
0150 .dbline 85
0150 ; bin%=100;
0150 14E6 ldi R17,100
0152 062F mov R16,R22
0154 0E940000 xcall mod8u
0158 602F mov R22,R16
015A .dbline 86
015A ; ret=bin/10;
015A 1AE0 ldi R17,10
015C 0E940000 xcall div8u
0160 402F mov R20,R16
0162 .dbline 87
0162 ; ret <<=4;
0162 842F mov R24,R20
0164 8F70 andi R24,#0x0F
0166 8295 swap R24
0168 482F mov R20,R24
016A .dbline 88
016A ; ret|=bin%10;
016A 1AE0 ldi R17,10
016C 062F mov R16,R22
016E 0E940000 xcall mod8u
0172 402B or R20,R16
0174 .dbline 89
0174 ; return ret;
0174 042F mov R16,R20
0176 .dbline -2
0176 L16:
0176 0E940000 xcall pop_gset2
017A .dbline 0 ; func end
017A 0895 ret
017C .dbsym r ret 20 c
017C .dbsym r bin 22 c
017C .dbend
017C .dbfunc e byte_bcdtobin _byte_bcdtobin fc
017C ; ret -> R20
017C ; bcd -> R16
.even
017C _byte_bcdtobin::
017C 0E940000 xcall push_gset1
0180 .dbline -1
0180 .dbline 92
0180 ; }
0180 ; unsigned char byte_bcdtobin(unsigned char bcd)
0180 ; {
0180 .dbline 94
0180 ; unsigned char ret;
0180 ; ret=bcd & 0x0f;
0180 402F mov R20,R16
0182 4F70 andi R20,15
0184 .dbline 95
0184 ; ret+=(bcd>>4)*10;
0184 802F mov R24,R16
0186 8295 swap R24
0188 8F70 andi R24,#0x0F
018A 9AE0 ldi R25,10
018C 989F mul R25,R24
018E 400D add R20,R0
0190 .dbline 96
0190 ; return ret;
0190 042F mov R16,R20
0192 .dbline -2
0192 L17:
0192 0E940000 xcall pop_gset1
0196 .dbline 0 ; func end
0196 0895 ret
0198 .dbsym r ret 20 c
0198 .dbsym r bcd 16 c
0198 .dbend
0198 .dbfunc e RtcBinToBCD _RtcBinToBCD fV
0198 ; i -> R20
.even
0198 _RtcBinToBCD::
0198 0E940000 xcall push_gset1
019C .dbline -1
019C .dbline 101
019C ; }
019C ;
019C ; //将二进制格式缓冲区(g_aTimeBin)内容转换成BCD格式后保存到BCD格式缓冲区(g_aTimeBuf)
019C ; void RtcBinToBCD(void)
019C ; {
019C .dbline 103
019C ; unsigned char i;
019C ; g_aTimeBin[0]&=0x7f;
019C 80910000 lds R24,_g_aTimeBin
01A0 8F77 andi R24,127
01A2 80930000 sts _g_aTimeBin,R24
01A6 .dbline 104
01A6 ; g_aTimeBin[1]&=0x7f;
01A6 80910100 lds R24,_g_aTimeBin+1
01AA 8F77 andi R24,127
01AC 80930100 sts _g_aTimeBin+1,R24
01B0 .dbline 106
01B0 ;
01B0 ; g_aTimeBin[2]&=0x3f;
01B0 80910200 lds R24,_g_aTimeBin+2
01B4 8F73 andi R24,63
01B6 80930200 sts _g_aTimeBin+2,R24
01BA .dbline 109
01BA ;
01BA ;
01BA ; g_aTimeBin[3]&=0x07;
01BA 80910300 lds R24,_g_aTimeBin+3
01BE 8770 andi R24,7
01C0 80930300 sts _g_aTimeBin+3,R24
01C4 .dbline 112
01C4 ;
01C4 ;
01C4 ; g_aTimeBin[4]&=0x3f;
01C4 80910400 lds R24,_g_aTimeBin+4
01C8 8F73 andi R24,63
01CA 80930400 sts _g_aTimeBin+4,R24
01CE .dbline 113
01CE ; g_aTimeBin[5]&=0x1f;
01CE 80910500 lds R24,_g_aTimeBin+5
01D2 8F71 andi R24,31
01D4 80930500 sts _g_aTimeBin+5,R24
01D8 .dbline 114
01D8 ; g_aTimeBin[6]&=0xff;
01D8 80910600 lds R24,_g_aTimeBin+6
01DC 8F7F andi R24,255
01DE 80930600 sts _g_aTimeBin+6,R24
01E2 .dbline 116
01E2 ;
01E2 ; for(i=0;i<7;i++)
01E2 4427 clr R20
01E4 10C0 xjmp L28
01E6 L25:
01E6 .dbline 117
01E6 80E0 ldi R24,<_g_aTimeBin
01E8 90E0 ldi R25,>_g_aTimeBin
01EA E42F mov R30,R20
01EC FF27 clr R31
01EE E80F add R30,R24
01F0 F91F adc R31,R25
01F2 0081 ldd R16,z+0
01F4 A9DF xcall _byte_bintobcd
01F6 80E0 ldi R24,<_g_aTimeBuf
01F8 90E0 ldi R25,>_g_aTimeBuf
01FA E42F mov R30,R20
01FC FF27 clr R31
01FE E80F add R30,R24
0200 F91F adc R31,R25
0202 0083 std z+0,R16
0204 L26:
0204 .dbline 116
0204 4395 inc R20
0206 L28:
0206 .dbline 116
0206 4730 cpi R20,7
0208 70F3 brlo L25
020A .dbline -2
020A L18:
020A 0E940000 xcall pop_gset1
020E .dbline 0 ; func end
020E 0895 ret
0210 .dbsym r i 20 c
0210 .dbend
0210 .dbfunc e RtcBCDToBin _RtcBCDToBin fV
0210 ; i -> R20
.even
0210 _RtcBCDToBin::
0210 0E940000 xcall push_gset1
0214 .dbline -1
0214 .dbline 122
0214 ; g_aTimeBuf[i]=byte_bintobcd(g_aTimeBin[i]);
0214 ; }
0214 ;
0214 ; //将BCD格式缓冲区(g_aTimeBuf)内容转换成二进制格式后保存到二进制格式缓冲区(g_aTimeBin)
0214 ; void RtcBCDToBin(void)
0214 ; {
0214 .dbline 124
0214 ; unsigned char i;
0214 ; for(i=0;i<7;i++)
0214 4427 clr R20
0216 10C0 xjmp L33
0218 L30:
0218 .dbline 125
0218 80E0 ldi R24,<_g_aTimeBuf
021A 90E0 ldi R25,>_g_aTimeBuf
021C E42F mov R30,R20
021E FF27 clr R31
0220 E80F add R30,R24
0222 F91F adc R31,R25
0224 0081 ldd R16,z+0
0226 AADF xcall _byte_bcdtobin
0228 80E0 ldi R24,<_g_aTimeBin
022A 90E0 ldi R25,>_g_aTimeBin
022C E42F mov R30,R20
022E FF27 clr R31
0230 E80F add R30,R24
0232 F91F adc R31,R25
0234 0083 std z+0,R16
0236 L31:
0236 .dbline 124
0236 4395 inc R20
0238 L33:
0238 .dbline 124
0238 4730 cpi R20,7
023A 70F3 brlo L30
023C .dbline -2
023C L29:
023C 0E940000 xcall pop_gset1
0240 .dbline 0 ; func end
0240 0895 ret
0242 .dbsym r i 20 c
0242 .dbend
0242 .dbfunc e RtcSetSQWOutput _RtcSetSQWOutput fV
0242 ; c -> y+1
0242 ; level -> R20
0242 ; en -> R22
.even
0242 _RtcSetSQWOutput::
0242 0E940000 xcall push_gset2
0246 422F mov R20,R18
0248 602F mov R22,R16
024A 2297 sbiw R28,2
024C .dbline -1
024C .dbline 130
024C ; g_aTimeBin[i]=byte_bcdtobin(g_aTimeBuf[i]);
024C ; }
024C ;
024C ; //写DS1307配置字节
024C ; void RtcSetSQWOutput(unsigned char en,unsigned char level)
024C ; {
024C .dbline 132
024C ; //en:方波输出允许 TRUE 有效 level:如果输出禁止 OUT口的逻辑电平
024C ; unsigned char c=0;
024C 2224 clr R2
024E 2982 std y+1,R2
0250 .dbline 133
0250 ; if(en) //enable
0250 6623 tst R22
0252 19F0 breq L35
0254 .dbline 134
0254 ; c=0x10;
0254 80E1 ldi R24,16
0256 8983 std y+1,R24
0258 04C0 xjmp L36
025A L35:
025A .dbline 136
025A ; else //disable
025A ; {
025A .dbline 137
025A ; if(level)
025A 4423 tst R20
025C 11F0 breq L37
025E .dbline 138
025E ; c=0x80;
025E 80E8 ldi R24,128
0260 8983 std y+1,R24
0262 L37:
0262 .dbline 139
0262 ; }
0262 L36:
0262 .dbline 140
0262 ; rtc_write(7,&c,1);
0262 81E0 ldi R24,1
0264 8883 std y+0,R24
0266 9E01 movw R18,R28
0268 2F5F subi R18,255 ; offset = 1
026A 3F4F sbci R19,255
026C 07E0 ldi R16,7
026E C8DE xcall _rtc_write
0270 .dbline -2
0270 L34:
0270 2296 adiw R28,2
0272 0E940000 xcall pop_gset2
0276 .dbline 0 ; func end
0276 0895 ret
0278 .dbsym l c 1 c
0278 .dbsym r level 20 c
0278 .dbsym r en 22 c
0278 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\cdy笔记本资料\E\工程\五星\设计文档\程序设计\ds1307\ds1307.c
0000 _g_aTimeBin::
0000 .blkb 7
0007 .dbsym e g_aTimeBin _g_aTimeBin A[7:7]c
0007 _g_aTimeBuf::
0007 .blkb 7
000E .dbsym e g_aTimeBuf _g_aTimeBuf A[7:7]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -