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 + -
显示快捷键?