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

📄 ds1302.lis

📁 程序控制TFT全彩LCD显示屏
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 016E                   .dbline 175
 016E           ;       CLEAR_CLK();
 016E 0E940000          xcall _CLEAR_CLK
 0172                   .dbline 176
 0172           ;       SET_RST();
 0172 0E940000          xcall _SET_RST
 0176                   .dbline 177
 0176           ;     W_Byte(0xff);            /* 0xff:时钟多字节读命令 */
 0176 0FEF              ldi R16,255
 0178 43DF              xcall _W_Byte
 017A                   .dbline 178
 017A           ;     for (i=31; i>0; i--)          /*31Byte 寄存器数据 */
 017A 4FE1              ldi R20,31
 017C 06C0              xjmp L36
 017E           L33:
 017E                   .dbline 179
 017E                   .dbline 180
 017E 54DF              xcall _R_Byte
 0180 FB01              movw R30,R22
 0182 0083              std z+0,R16
 0184                   .dbline 181
 0184 6F5F              subi R22,255  ; offset = 1
 0186 7F4F              sbci R23,255
 0188                   .dbline 182
 0188           L34:
 0188                   .dbline 178
 0188 4A95              dec R20
 018A           L36:
 018A                   .dbline 178
 018A 2224              clr R2
 018C 2416              cp R2,R20
 018E B8F3              brlo L33
 0190                   .dbline 183
 0190           ;     {
 0190           ;         *Cdata = R_Byte();  /* 读1Byte数据 */
 0190           ;         Cdata++;
 0190           ;     }
 0190           ;     SET_CLK();
 0190 0E940000          xcall _SET_CLK
 0194                   .dbline 184
 0194           ;     CLEAR_RST();
 0194 0E940000          xcall _CLEAR_RST
 0198                   .dbline -2
 0198           L32:
 0198 0E940000          xcall pop_gset2
 019C                   .dbline 0 ; func end
 019C 0895              ret
 019E                   .dbsym r i 20 c
 019E                   .dbsym r Cdata 22 pc
 019E                   .dbend
 019E                   .dbfunc e Set_1302 _Set_1302 fV
 019E           ;           Addr -> R20
 019E           ;              i -> R22
 019E           ;         pClock -> R10,R11
                        .even
 019E           _Set_1302::
 019E 0E940000          xcall push_gset3
 01A2 5801              movw R10,R16
 01A4                   .dbline -1
 01A4                   .dbline 197
 01A4           ; }
 01A4           ; /******************************************************************** 
 01A4           ; 
 01A4           ;  函 数 名:Set_1302()
 01A4           ;  功    能:设置初始时间
 01A4           ;  说    明:先写地址,后读命令/数据(寄存器多字节方式)
 01A4           ;  调    用:W1302()
 01A4           ;  入口参数:pClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 01A4           ;                             7Byte (BCD码)     1B 1B 1B 1B 1B  1B  1B
 01A4           ;  返 回 值:无
 01A4           ; ***********************************************************************/
 01A4           ; void Set_1302(unsigned char *pClock) 
 01A4           ; {
 01A4                   .dbline 199
 01A4           ;     unsigned char i;
 01A4           ;     unsigned char Addr = 0x80; 
 01A4 40E8              ldi R20,128
 01A6                   .dbline 200
 01A6           ;     W_1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
 01A6 2227              clr R18
 01A8 0EE8              ldi R16,142
 01AA 55DF              xcall _W_1302
 01AC                   .dbline 201
 01AC           ;     for(i=0;i<7;i++)
 01AC 6627              clr R22
 01AE 09C0              xjmp L41
 01B0           L38:
 01B0                   .dbline 202
 01B0                   .dbline 203
 01B0 F501              movw R30,R10
 01B2 2081              ldd R18,z+0
 01B4 042F              mov R16,R20
 01B6 4FDF              xcall _W_1302
 01B8                   .dbline 204
 01B8 C501              movw R24,R10
 01BA 0196              adiw R24,1
 01BC 5C01              movw R10,R24
 01BE                   .dbline 205
 01BE 4E5F              subi R20,254    ; addi 2
 01C0                   .dbline 206
 01C0           L39:
 01C0                   .dbline 201
 01C0 6395              inc R22
 01C2           L41:
 01C2                   .dbline 201
 01C2 6730              cpi R22,7
 01C4 A8F3              brlo L38
 01C6                   .dbline 207
 01C6           ;     { 
 01C6           ;         W_1302(Addr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
 01C6           ;         pClock++;
 01C6           ;         Addr +=2;
 01C6           ;     }
 01C6           ;     W_1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
 01C6 20E8              ldi R18,128
 01C8 0EE8              ldi R16,142
 01CA 45DF              xcall _W_1302
 01CC                   .dbline -2
 01CC           L37:
 01CC 0E940000          xcall pop_gset3
 01D0                   .dbline 0 ; func end
 01D0 0895              ret
 01D2                   .dbsym r Addr 20 c
 01D2                   .dbsym r i 22 c
 01D2                   .dbsym r pClock 10 pc
 01D2                   .dbend
 01D2                   .dbfunc e Get_1302 _Get_1302 fV
 01D2           ;           Addr -> R20
 01D2           ;              i -> R22
 01D2           ;         Pclock -> R10,R11
                        .even
 01D2           _Get_1302::
 01D2 0E940000          xcall push_gset3
 01D6 5801              movw R10,R16
 01D8                   .dbline -1
 01D8                   .dbline 220
 01D8           ; }
 01D8           ; /******************************************************************** 
 01D8           ; 
 01D8           ;  函 数 名:Get_1302()
 01D8           ;  功    能:读取DS1302当前时间
 01D8           ;  说    明:
 01D8           ;  调    用:R1302() 
 01D8           ;  入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
 01D8           ;                                         7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
 01D8           ;  返 回 值:无
 01D8           ; ***********************************************************************/
 01D8           ; void Get_1302(unsigned char *Pclock) 
 01D8           ; {
 01D8                   .dbline 222
 01D8           ;     unsigned char i;
 01D8           ;     unsigned char Addr = 0x81;
 01D8 41E8              ldi R20,129
 01DA                   .dbline 223
 01DA           ;     for (i=0; i<7; i++)
 01DA 6627              clr R22
 01DC 07C0              xjmp L46
 01DE           L43:
 01DE                   .dbline 224
 01DE                   .dbline 225
 01DE 042F              mov R16,R20
 01E0 51DF              xcall _R_1302
 01E2 F501              movw R30,R10
 01E4 0193              st Z+,R16
 01E6 5F01              movw R10,R30
 01E8                   .dbline 226
 01E8 4E5F              subi R20,254    ; addi 2
 01EA                   .dbline 227
 01EA           L44:
 01EA                   .dbline 223
 01EA 6395              inc R22
 01EC           L46:
 01EC                   .dbline 223
 01EC 6730              cpi R22,7
 01EE B8F3              brlo L43
 01F0                   .dbline -2
 01F0           L42:
 01F0 0E940000          xcall pop_gset3
 01F4                   .dbline 0 ; func end
 01F4 0895              ret
 01F6                   .dbsym r Addr 20 c
 01F6                   .dbsym r i 22 c
 01F6                   .dbsym r Pclock 10 pc
 01F6                   .dbend
 01F6                   .dbfunc e Set_charge _Set_charge fV
 01F6           ;           Addr -> R20
                        .even
 01F6           _Set_charge::
 01F6 0E940000          xcall push_gset1
 01FA                   .dbline -1
 01FA                   .dbline 230
 01FA           ;     {
 01FA           ;         *Pclock++ = R_1302(Addr);/*格式为: 秒 分 时 日 月 星期 年 */
 01FA           ;         Addr += 2;
 01FA           ;     }
 01FA           ; }
 01FA           ; void Set_charge(void)
 01FA           ; {
 01FA                   .dbline 231
 01FA           ;        unsigned char Addr=0x90;
 01FA 40E9              ldi R20,144
 01FC                   .dbline 232
 01FC           ;        W_1302(Addr,0xA6);    //10100110    diode is one  resistor is 4K
 01FC 26EA              ldi R18,166
 01FE 042F              mov R16,R20
 0200 2ADF              xcall _W_1302
 0202                   .dbline -2
 0202           L47:
 0202 0E940000          xcall pop_gset1
 0206                   .dbline 0 ; func end
 0206 0895              ret
 0208                   .dbsym r Addr 20 c
 0208                   .dbend
 0208                   .dbfunc e delay_1 _delay_1 fV
 0208           ;              i -> R16
                        .even
 0208           _delay_1::
 0208                   .dbline -1
 0208                   .dbline 235
 0208           ; }
 0208           ; void delay_1(void)
 0208           ; {
 0208                   .dbline 237
 0208 0027              clr R16
 020A 01C0              xjmp L52
 020C           L49:
 020C                   .dbline 237
 020C           L50:
 020C                   .dbline 237
 020C 0395              inc R16
 020E           L52:
 020E                   .dbline 237
 020E           ;        unsigned char i;
 020E           ;        for(i=0;i<5;i++);
 020E 0530              cpi R16,5
 0210 E8F3              brlo L49
 0212                   .dbline -2
 0212           L48:
 0212                   .dbline 0 ; func end
 0212 0895              ret
 0214                   .dbsym r i 16 c
 0214                   .dbend
 0214                   .dbfunc e CLOCK _CLOCK fV
                        .even
 0214           _CLOCK::
 0214                   .dbline -1
 0214                   .dbline 240
 0214           ; }
 0214           ; void CLOCK(void)
 0214           ; { 
 0214                   .dbline 241
 0214           ;      SET_CLK();
 0214 0E940000          xcall _SET_CLK
 0218                   .dbline 242
 0218           ;      delay_1();
 0218 F7DF              xcall _delay_1
 021A                   .dbline 243
 021A           ;      CLEAR_CLK();
 021A 0E940000          xcall _CLEAR_CLK
 021E                   .dbline -2
 021E           L53:
 021E                   .dbline 0 ; func end
 021E 0895              ret
 0220                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -