ds1302.lis
来自「该程序是医院用的CPCR记录仪的终端控制程序」· LIS 代码 · 共 794 行 · 第 1/3 页
LIS
794 行
0132 ; CLEAR_CLK();
0132 149A sbi 0x2,4
0134 .dbline 176
0134 ; SET_RST();
0134 1698 cbi 0x2,6
0136 .dbline 177
0136 ; W_Byte(0xff); /* 0xff:时钟多字节读命令 */
0136 0FEF ldi R16,255
0138 63DF xcall _W_Byte
013A .dbline 178
013A ; for (i=31; i>0; i--) /*31Byte 寄存器数据 */
013A 4FE1 ldi R20,31
013C 06C0 xjmp L36
013E L33:
013E .dbline 179
013E .dbline 180
013E 72DF xcall _R_Byte
0140 FB01 movw R30,R22
0142 0083 std z+0,R16
0144 .dbline 181
0144 6F5F subi R22,255 ; offset = 1
0146 7F4F sbci R23,255
0148 .dbline 182
0148 L34:
0148 .dbline 178
0148 4A95 dec R20
014A L36:
014A .dbline 178
014A 2224 clr R2
014C 2416 cp R2,R20
014E B8F3 brlo L33
0150 .dbline 183
0150 ; {
0150 ; *Cdata = R_Byte(); /* 读1Byte数据 */
0150 ; Cdata++;
0150 ; }
0150 ; SET_CLK();
0150 1498 cbi 0x2,4
0152 .dbline 184
0152 ; CLEAR_RST();
0152 169A sbi 0x2,6
0154 .dbline -2
0154 L32:
0154 0E940000 xcall pop_gset2
0158 .dbline 0 ; func end
0158 0895 ret
015A .dbsym r i 20 c
015A .dbsym r Cdata 22 pc
015A .dbend
015A .dbfunc e Set_1302 _Set_1302 fV
015A ; Addr -> R20
015A ; i -> R22
015A ; pClock -> R10,R11
.even
015A _Set_1302::
015A 0E940000 xcall push_gset3
015E 5801 movw R10,R16
0160 .dbline -1
0160 .dbline 197
0160 ; }
0160 ; /********************************************************************
0160 ;
0160 ; 函 数 名:Set_1302()
0160 ; 功 能:设置初始时间
0160 ; 说 明:先写地址,后读命令/数据(寄存器多字节方式)
0160 ; 调 用:W1302()
0160 ; 入口参数:pClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
0160 ; 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
0160 ; 返 回 值:无
0160 ; ***********************************************************************/
0160 ; void Set_1302(unsigned char *pClock)
0160 ; {
0160 .dbline 199
0160 ; unsigned char i;
0160 ; unsigned char Addr = 0x80;
0160 40E8 ldi R20,128
0162 .dbline 200
0162 ; W_1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
0162 2227 clr R18
0164 0EE8 ldi R16,142
0166 75DF xcall _W_1302
0168 .dbline 201
0168 ; for(i=0;i<7;i++)
0168 6627 clr R22
016A 09C0 xjmp L41
016C L38:
016C .dbline 202
016C .dbline 203
016C F501 movw R30,R10
016E 2081 ldd R18,z+0
0170 042F mov R16,R20
0172 6FDF xcall _W_1302
0174 .dbline 204
0174 C501 movw R24,R10
0176 0196 adiw R24,1
0178 5C01 movw R10,R24
017A .dbline 205
017A 4E5F subi R20,254 ; addi 2
017C .dbline 206
017C L39:
017C .dbline 201
017C 6395 inc R22
017E L41:
017E .dbline 201
017E 6730 cpi R22,7
0180 A8F3 brlo L38
0182 .dbline 207
0182 ; {
0182 ; W_1302(Addr,*pClock); /* 秒 分 时 日 月 星期 年 */
0182 ; pClock++;
0182 ; Addr +=2;
0182 ; }
0182 ; W_1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
0182 20E8 ldi R18,128
0184 0EE8 ldi R16,142
0186 65DF xcall _W_1302
0188 .dbline -2
0188 L37:
0188 0E940000 xcall pop_gset3
018C .dbline 0 ; func end
018C 0895 ret
018E .dbsym r Addr 20 c
018E .dbsym r i 22 c
018E .dbsym r pClock 10 pc
018E .dbend
018E .dbfunc e Get_1302 _Get_1302 fV
018E ; Addr -> R20
018E ; i -> R22
018E ; Pclock -> R10,R11
.even
018E _Get_1302::
018E 0E940000 xcall push_gset3
0192 5801 movw R10,R16
0194 .dbline -1
0194 .dbline 220
0194 ; }
0194 ; /********************************************************************
0194 ;
0194 ; 函 数 名:Get_1302()
0194 ; 功 能:读取DS1302当前时间
0194 ; 说 明:
0194 ; 调 用:R1302()
0194 ; 入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
0194 ; 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
0194 ; 返 回 值:无
0194 ; ***********************************************************************/
0194 ; void Get_1302(unsigned char *Pclock)
0194 ; {
0194 .dbline 222
0194 ; unsigned char i;
0194 ; unsigned char Addr = 0x81;
0194 41E8 ldi R20,129
0196 .dbline 223
0196 ; for (i=0; i<7; i++)
0196 6627 clr R22
0198 07C0 xjmp L46
019A L43:
019A .dbline 224
019A .dbline 225
019A 042F mov R16,R20
019C 6BDF xcall _R_1302
019E F501 movw R30,R10
01A0 0193 st Z+,R16
01A2 5F01 movw R10,R30
01A4 .dbline 226
01A4 4E5F subi R20,254 ; addi 2
01A6 .dbline 227
01A6 L44:
01A6 .dbline 223
01A6 6395 inc R22
01A8 L46:
01A8 .dbline 223
01A8 6730 cpi R22,7
01AA B8F3 brlo L43
01AC .dbline -2
01AC L42:
01AC 0E940000 xcall pop_gset3
01B0 .dbline 0 ; func end
01B0 0895 ret
01B2 .dbsym r Addr 20 c
01B2 .dbsym r i 22 c
01B2 .dbsym r Pclock 10 pc
01B2 .dbend
01B2 .dbfunc e Set_charge _Set_charge fV
01B2 ; Addr -> R20
.even
01B2 _Set_charge::
01B2 0E940000 xcall push_gset1
01B6 .dbline -1
01B6 .dbline 230
01B6 ; {
01B6 ; *Pclock++ = R_1302(Addr);/*格式为: 秒 分 时 日 月 星期 年 */
01B6 ; Addr += 2;
01B6 ; }
01B6 ; }
01B6 ; void Set_charge(void)
01B6 ; {
01B6 .dbline 231
01B6 ; unsigned char Addr=0x90;
01B6 40E9 ldi R20,144
01B8 .dbline 232
01B8 ; W_1302(Addr,0xA6); //10100110 diode is one resistor is 4K
01B8 26EA ldi R18,166
01BA 042F mov R16,R20
01BC 4ADF xcall _W_1302
01BE .dbline -2
01BE L47:
01BE 0E940000 xcall pop_gset1
01C2 .dbline 0 ; func end
01C2 0895 ret
01C4 .dbsym r Addr 20 c
01C4 .dbend
01C4 .dbfunc e delay_1 _delay_1 fV
01C4 ; i -> R16
.even
01C4 _delay_1::
01C4 .dbline -1
01C4 .dbline 235
01C4 ; }
01C4 ; void delay_1(void)
01C4 ; {
01C4 .dbline 237
01C4 0027 clr R16
01C6 01C0 xjmp L52
01C8 L49:
01C8 .dbline 237
01C8 L50:
01C8 .dbline 237
01C8 0395 inc R16
01CA L52:
01CA .dbline 237
01CA ; unsigned char i;
01CA ; for(i=0;i<5;i++);
01CA 0530 cpi R16,5
01CC E8F3 brlo L49
01CE .dbline -2
01CE L48:
01CE .dbline 0 ; func end
01CE 0895 ret
01D0 .dbsym r i 16 c
01D0 .dbend
01D0 .dbfunc e CLOCK _CLOCK fV
.even
01D0 _CLOCK::
01D0 .dbline -1
01D0 .dbline 240
01D0 ; }
01D0 ; void CLOCK(void)
01D0 ; {
01D0 .dbline 241
01D0 ; SET_CLK();
01D0 1498 cbi 0x2,4
01D2 .dbline 242
01D2 ; delay_1();
01D2 F8DF xcall _delay_1
01D4 .dbline 243
01D4 ; CLEAR_CLK();
01D4 149A sbi 0x2,4
01D6 .dbline -2
01D6 L53:
01D6 .dbline 0 ; func end
01D6 0895 ret
01D8 .dbend
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?