📄 ds1302.lis
字号:
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbsym r Data1 20 c
00AE .dbsym r Addr 20 c
00AE .dbend
00AE .dbfunc e BurstW1302T _BurstW1302T fV
00AE ; i -> R20
00AE ; Cdata -> R22,R23
.even
00AE _BurstW1302T::
00AE 0E940000 xcall push_gset2
00B2 B801 movw R22,R16
00B4 .dbline -1
00B4 .dbline 97
00B4 ; }
00B4 ; /********************************************************************
00B4 ;
00B4 ; 函 数 名:BurstW1302T()
00B4 ; 功 能:往DS1302写入时钟数据(多字节方式)
00B4 ; 说 明:先写地址,后写命令/数据
00B4 ; 调 用:W_Byte()
00B4 ; 入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
00B4 ; 8Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 1B
00B4 ; 返 回 值:无
00B4 ; ***********************************************************************/
00B4 ; void BurstW1302T(unsigned char *Cdata)
00B4 ; {
00B4 .dbline 99
00B4 ; unsigned char i;
00B4 ; W_1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
00B4 2227 clr R18
00B6 0EE8 ldi R16,142
00B8 CEDF xcall _W_1302
00BA .dbline 100
00BA ; CLEAR_RST();
00BA 0E940000 xcall _CLEAR_RST
00BE .dbline 101
00BE ; CLEAR_CLK();
00BE 0E940000 xcall _CLEAR_CLK
00C2 .dbline 102
00C2 ; SET_RST();
00C2 0E940000 xcall _SET_RST
00C6 .dbline 103
00C6 ; W_Byte(0xbe); /* 0xbe:时钟多字节写命令 */
00C6 0EEB ldi R16,190
00C8 9BDF xcall _W_Byte
00CA .dbline 104
00CA ; for (i=0;i<8;i++) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
00CA 4427 clr R20
00CC 06C0 xjmp L21
00CE L18:
00CE .dbline 105
00CE .dbline 106
00CE FB01 movw R30,R22
00D0 0081 ldd R16,z+0
00D2 96DF xcall _W_Byte
00D4 .dbline 107
00D4 6F5F subi R22,255 ; offset = 1
00D6 7F4F sbci R23,255
00D8 .dbline 108
00D8 L19:
00D8 .dbline 104
00D8 4395 inc R20
00DA L21:
00DA .dbline 104
00DA 4830 cpi R20,8
00DC C0F3 brlo L18
00DE .dbline 109
00DE ; {
00DE ; W_Byte(*Cdata); /* 写1Byte数据*/
00DE ; Cdata++;
00DE ; }
00DE ; SET_CLK();
00DE 0E940000 xcall _SET_CLK
00E2 .dbline 110
00E2 ; CLEAR_RST();
00E2 0E940000 xcall _CLEAR_RST
00E6 .dbline -2
00E6 L17:
00E6 0E940000 xcall pop_gset2
00EA .dbline 0 ; func end
00EA 0895 ret
00EC .dbsym r i 20 c
00EC .dbsym r Cdata 22 pc
00EC .dbend
00EC .dbfunc e BurstR1302T _BurstR1302T fV
00EC ; i -> R20
00EC ; Cdata -> R22,R23
.even
00EC _BurstR1302T::
00EC 0E940000 xcall push_gset2
00F0 B801 movw R22,R16
00F2 .dbline -1
00F2 .dbline 123
00F2 ; }
00F2 ; /********************************************************************
00F2 ;
00F2 ; 函 数 名:BurstR1302T()
00F2 ; 功 能:读取DS1302时钟数据
00F2 ; 说 明:先写地址/命令,后读数据(时钟多字节方式)
00F2 ; 调 用:W_Byte() , R_Byte()
00F2 ; 入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
00F2 ; 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
00F2 ; 返 回 值:无
00F2 ; ***********************************************************************/
00F2 ; void BurstR1302T(unsigned char *Cdata)
00F2 ; {
00F2 .dbline 125
00F2 ; unsigned char i;
00F2 ; CLEAR_RST();
00F2 0E940000 xcall _CLEAR_RST
00F6 .dbline 126
00F6 ; CLEAR_CLK();
00F6 0E940000 xcall _CLEAR_CLK
00FA .dbline 127
00FA ; SET_RST();
00FA 0E940000 xcall _SET_RST
00FE .dbline 128
00FE ; W_Byte(0xbf); /* 0xbf:时钟多字节读命令 */
00FE 0FEB ldi R16,191
0100 7FDF xcall _W_Byte
0102 .dbline 129
0102 ; for (i=0;i<8;i++)
0102 4427 clr R20
0104 06C0 xjmp L26
0106 L23:
0106 .dbline 130
0106 .dbline 131
0106 90DF xcall _R_Byte
0108 FB01 movw R30,R22
010A 0083 std z+0,R16
010C .dbline 132
010C 6F5F subi R22,255 ; offset = 1
010E 7F4F sbci R23,255
0110 .dbline 133
0110 L24:
0110 .dbline 129
0110 4395 inc R20
0112 L26:
0112 .dbline 129
0112 4830 cpi R20,8
0114 C0F3 brlo L23
0116 .dbline 134
0116 ; {
0116 ; *Cdata = R_Byte(); /* 读1Byte数据 */
0116 ; Cdata++;
0116 ; }
0116 ; SET_CLK();
0116 0E940000 xcall _SET_CLK
011A .dbline 135
011A ; CLEAR_RST();
011A 0E940000 xcall _CLEAR_RST
011E .dbline -2
011E L22:
011E 0E940000 xcall pop_gset2
0122 .dbline 0 ; func end
0122 0895 ret
0124 .dbsym r i 20 c
0124 .dbsym r Cdata 22 pc
0124 .dbend
0124 .dbfunc e BurstW1302R _BurstW1302R fV
0124 ; i -> R20
0124 ; Cdata -> R22,R23
.even
0124 _BurstW1302R::
0124 0E940000 xcall push_gset2
0128 B801 movw R22,R16
012A .dbline -1
012A .dbline 147
012A ; }
012A ; /********************************************************************
012A ;
012A ; 函 数 名:BurstW1302R()
012A ; 功 能:往DS1302寄存器数写入数据(多字节方式)
012A ; 说 明:先写地址,后写数据(寄存器多字节方式)
012A ; 调 用:W_Byte()
012A ; 入口参数:pWReg: 寄存器数据地址
012A ; 返 回 值:无
012A ; ***********************************************************************/
012A ; void BurstW1302R(unsigned char *Cdata)
012A ; {
012A .dbline 149
012A ; unsigned char i;
012A ; W_1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/
012A 2227 clr R18
012C 0EE8 ldi R16,142
012E 93DF xcall _W_1302
0130 .dbline 150
0130 ; CLEAR_RST();
0130 0E940000 xcall _CLEAR_RST
0134 .dbline 151
0134 ; CLEAR_CLK();
0134 0E940000 xcall _CLEAR_CLK
0138 .dbline 152
0138 ; SET_RST();
0138 0E940000 xcall _SET_RST
013C .dbline 153
013C ; W_Byte(0xfe); /* 0xbe:时钟多字节写命令 */
013C 0EEF ldi R16,254
013E 60DF xcall _W_Byte
0140 .dbline 154
0140 ; for (i=31; i>0; i--) /* 31Byte 寄存器数据 */
0140 4FE1 ldi R20,31
0142 06C0 xjmp L31
0144 L28:
0144 .dbline 155
0144 .dbline 156
0144 FB01 movw R30,R22
0146 0081 ldd R16,z+0
0148 5BDF xcall _W_Byte
014A .dbline 157
014A 6F5F subi R22,255 ; offset = 1
014C 7F4F sbci R23,255
014E .dbline 158
014E L29:
014E .dbline 154
014E 4A95 dec R20
0150 L31:
0150 .dbline 154
0150 2224 clr R2
0152 2416 cp R2,R20
0154 B8F3 brlo L28
0156 .dbline 159
0156 ; {
0156 ; W_Byte(*Cdata); /* 写1Byte数据*/
0156 ; Cdata++;
0156 ; }
0156 ; SET_CLK();
0156 0E940000 xcall _SET_CLK
015A .dbline 160
015A ; CLEAR_RST();
015A 0E940000 xcall _CLEAR_RST
015E .dbline -2
015E L27:
015E 0E940000 xcall pop_gset2
0162 .dbline 0 ; func end
0162 0895 ret
0164 .dbsym r i 20 c
0164 .dbsym r Cdata 22 pc
0164 .dbend
0164 .dbfunc e BurstR1302R _BurstR1302R fV
0164 ; i -> R20
0164 ; Cdata -> R22,R23
.even
0164 _BurstR1302R::
0164 0E940000 xcall push_gset2
0168 B801 movw R22,R16
016A .dbline -1
016A .dbline 172
016A ; }
016A ; /********************************************************************
016A ;
016A ; 函 数 名:BurstR1302R()
016A ; 功 能:读取DS1302寄存器数据
016A ; 说 明:先写地址,后读命令/数据(寄存器多字节方式)
016A ; 调 用:W_Byte() , R_Byte()
016A ; 入口参数:pRReg: 寄存器数据地址
016A ; 返 回 值:无
016A ; ***********************************************************************/
016A ; void BurstR1302R(unsigned char *Cdata)
016A ; {
016A .dbline 174
016A ; unsigned char i;
016A ; CLEAR_RST();
016A 0E940000 xcall _CLEAR_RST
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -