⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1307.lis

📁 mega128+时实时钟日期芯片ds1307的例子
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -