ds1302.lis
来自「该程序是医院用的CPCR记录仪的终端控制程序」· LIS 代码 · 共 794 行 · 第 1/3 页
LIS
794 行
0090 0895 ret
0092 .dbsym r Data1 20 c
0092 .dbsym r Addr 20 c
0092 .dbend
0092 .dbfunc e BurstW1302T _BurstW1302T fV
0092 ; i -> R20
0092 ; Cdata -> R22,R23
.even
0092 _BurstW1302T::
0092 0E940000 xcall push_gset2
0096 B801 movw R22,R16
0098 .dbline -1
0098 .dbline 97
0098 ; }
0098 ; /********************************************************************
0098 ;
0098 ; 函 数 名:BurstW1302T()
0098 ; 功 能:往DS1302写入时钟数据(多字节方式)
0098 ; 说 明:先写地址,后写命令/数据
0098 ; 调 用:W_Byte()
0098 ; 入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
0098 ; 8Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 1B
0098 ; 返 回 值:无
0098 ; ***********************************************************************/
0098 ; void BurstW1302T(unsigned char *Cdata)
0098 ; {
0098 .dbline 99
0098 ; unsigned char i;
0098 ; W_1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
0098 2227 clr R18
009A 0EE8 ldi R16,142
009C DADF xcall _W_1302
009E .dbline 100
009E ; CLEAR_RST();
009E 169A sbi 0x2,6
00A0 .dbline 101
00A0 ; CLEAR_CLK();
00A0 149A sbi 0x2,4
00A2 .dbline 102
00A2 ; SET_RST();
00A2 1698 cbi 0x2,6
00A4 .dbline 103
00A4 ; W_Byte(0xbe); /* 0xbe:时钟多字节写命令 */
00A4 0EEB ldi R16,190
00A6 ACDF xcall _W_Byte
00A8 .dbline 104
00A8 ; for (i=0;i<8;i++) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
00A8 4427 clr R20
00AA 06C0 xjmp L21
00AC L18:
00AC .dbline 105
00AC .dbline 106
00AC FB01 movw R30,R22
00AE 0081 ldd R16,z+0
00B0 A7DF xcall _W_Byte
00B2 .dbline 107
00B2 6F5F subi R22,255 ; offset = 1
00B4 7F4F sbci R23,255
00B6 .dbline 108
00B6 L19:
00B6 .dbline 104
00B6 4395 inc R20
00B8 L21:
00B8 .dbline 104
00B8 4830 cpi R20,8
00BA C0F3 brlo L18
00BC .dbline 109
00BC ; {
00BC ; W_Byte(*Cdata); /* 写1Byte数据*/
00BC ; Cdata++;
00BC ; }
00BC ; SET_CLK();
00BC 1498 cbi 0x2,4
00BE .dbline 110
00BE ; CLEAR_RST();
00BE 169A sbi 0x2,6
00C0 .dbline -2
00C0 L17:
00C0 0E940000 xcall pop_gset2
00C4 .dbline 0 ; func end
00C4 0895 ret
00C6 .dbsym r i 20 c
00C6 .dbsym r Cdata 22 pc
00C6 .dbend
00C6 .dbfunc e BurstR1302T _BurstR1302T fV
00C6 ; i -> R20
00C6 ; Cdata -> R22,R23
.even
00C6 _BurstR1302T::
00C6 0E940000 xcall push_gset2
00CA B801 movw R22,R16
00CC .dbline -1
00CC .dbline 123
00CC ; }
00CC ; /********************************************************************
00CC ;
00CC ; 函 数 名:BurstR1302T()
00CC ; 功 能:读取DS1302时钟数据
00CC ; 说 明:先写地址/命令,后读数据(时钟多字节方式)
00CC ; 调 用:W_Byte() , R_Byte()
00CC ; 入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
00CC ; 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
00CC ; 返 回 值:无
00CC ; ***********************************************************************/
00CC ; void BurstR1302T(unsigned char *Cdata)
00CC ; {
00CC .dbline 125
00CC ; unsigned char i;
00CC ; CLEAR_RST();
00CC 169A sbi 0x2,6
00CE .dbline 126
00CE ; CLEAR_CLK();
00CE 149A sbi 0x2,4
00D0 .dbline 127
00D0 ; SET_RST();
00D0 1698 cbi 0x2,6
00D2 .dbline 128
00D2 ; W_Byte(0xbf); /* 0xbf:时钟多字节读命令 */
00D2 0FEB ldi R16,191
00D4 95DF xcall _W_Byte
00D6 .dbline 129
00D6 ; for (i=0;i<8;i++)
00D6 4427 clr R20
00D8 06C0 xjmp L26
00DA L23:
00DA .dbline 130
00DA .dbline 131
00DA A4DF xcall _R_Byte
00DC FB01 movw R30,R22
00DE 0083 std z+0,R16
00E0 .dbline 132
00E0 6F5F subi R22,255 ; offset = 1
00E2 7F4F sbci R23,255
00E4 .dbline 133
00E4 L24:
00E4 .dbline 129
00E4 4395 inc R20
00E6 L26:
00E6 .dbline 129
00E6 4830 cpi R20,8
00E8 C0F3 brlo L23
00EA .dbline 134
00EA ; {
00EA ; *Cdata = R_Byte(); /* 读1Byte数据 */
00EA ; Cdata++;
00EA ; }
00EA ; SET_CLK();
00EA 1498 cbi 0x2,4
00EC .dbline 135
00EC ; CLEAR_RST();
00EC 169A sbi 0x2,6
00EE .dbline -2
00EE L22:
00EE 0E940000 xcall pop_gset2
00F2 .dbline 0 ; func end
00F2 0895 ret
00F4 .dbsym r i 20 c
00F4 .dbsym r Cdata 22 pc
00F4 .dbend
00F4 .dbfunc e BurstW1302R _BurstW1302R fV
00F4 ; i -> R20
00F4 ; Cdata -> R22,R23
.even
00F4 _BurstW1302R::
00F4 0E940000 xcall push_gset2
00F8 B801 movw R22,R16
00FA .dbline -1
00FA .dbline 147
00FA ; }
00FA ; /********************************************************************
00FA ;
00FA ; 函 数 名:BurstW1302R()
00FA ; 功 能:往DS1302寄存器数写入数据(多字节方式)
00FA ; 说 明:先写地址,后写数据(寄存器多字节方式)
00FA ; 调 用:W_Byte()
00FA ; 入口参数:pWReg: 寄存器数据地址
00FA ; 返 回 值:无
00FA ; ***********************************************************************/
00FA ; void BurstW1302R(unsigned char *Cdata)
00FA ; {
00FA .dbline 149
00FA ; unsigned char i;
00FA ; W_1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/
00FA 2227 clr R18
00FC 0EE8 ldi R16,142
00FE A9DF xcall _W_1302
0100 .dbline 150
0100 ; CLEAR_RST();
0100 169A sbi 0x2,6
0102 .dbline 151
0102 ; CLEAR_CLK();
0102 149A sbi 0x2,4
0104 .dbline 152
0104 ; SET_RST();
0104 1698 cbi 0x2,6
0106 .dbline 153
0106 ; W_Byte(0xfe); /* 0xbe:时钟多字节写命令 */
0106 0EEF ldi R16,254
0108 7BDF xcall _W_Byte
010A .dbline 154
010A ; for (i=31; i>0; i--) /* 31Byte 寄存器数据 */
010A 4FE1 ldi R20,31
010C 06C0 xjmp L31
010E L28:
010E .dbline 155
010E .dbline 156
010E FB01 movw R30,R22
0110 0081 ldd R16,z+0
0112 76DF xcall _W_Byte
0114 .dbline 157
0114 6F5F subi R22,255 ; offset = 1
0116 7F4F sbci R23,255
0118 .dbline 158
0118 L29:
0118 .dbline 154
0118 4A95 dec R20
011A L31:
011A .dbline 154
011A 2224 clr R2
011C 2416 cp R2,R20
011E B8F3 brlo L28
0120 .dbline 159
0120 ; {
0120 ; W_Byte(*Cdata); /* 写1Byte数据*/
0120 ; Cdata++;
0120 ; }
0120 ; SET_CLK();
0120 1498 cbi 0x2,4
0122 .dbline 160
0122 ; CLEAR_RST();
0122 169A sbi 0x2,6
0124 .dbline -2
0124 L27:
0124 0E940000 xcall pop_gset2
0128 .dbline 0 ; func end
0128 0895 ret
012A .dbsym r i 20 c
012A .dbsym r Cdata 22 pc
012A .dbend
012A .dbfunc e BurstR1302R _BurstR1302R fV
012A ; i -> R20
012A ; Cdata -> R22,R23
.even
012A _BurstR1302R::
012A 0E940000 xcall push_gset2
012E B801 movw R22,R16
0130 .dbline -1
0130 .dbline 172
0130 ; }
0130 ; /********************************************************************
0130 ;
0130 ; 函 数 名:BurstR1302R()
0130 ; 功 能:读取DS1302寄存器数据
0130 ; 说 明:先写地址,后读命令/数据(寄存器多字节方式)
0130 ; 调 用:W_Byte() , R_Byte()
0130 ; 入口参数:pRReg: 寄存器数据地址
0130 ; 返 回 值:无
0130 ; ***********************************************************************/
0130 ; void BurstR1302R(unsigned char *Cdata)
0130 ; {
0130 .dbline 174
0130 ; unsigned char i;
0130 ; CLEAR_RST();
0130 169A sbi 0x2,6
0132 .dbline 175
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?