ds1302.lis

来自「该程序是医院用的CPCR记录仪的终端控制程序」· LIS 代码 · 共 794 行 · 第 1/3 页

LIS
794
字号
                        .module ds1302.c
                        .area data(ram, con, rel)
 0000           _code::
 0000                   .blkb 2
                        .area idata
 0000 0102              .byte 1,2
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 0408              .byte 4,8
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 1020              .byte 16,32
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 4080              .byte 64,128
                        .area data(ram, con, rel)
 0008                   .dbfile F:\yyjapp\yymk\software\ds1302.c
 0008                   .dbsym e code _code A[8:8]c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\yyjapp\yymk\software\ds1302.c
 0000                   .dbfunc e W_Byte _W_Byte fV
 0000           ;              i -> R20
 0000           ;           Data -> R22
                        .even
 0000           _W_Byte::
 0000 0E940000          xcall push_gset2
 0004 602F              mov R22,R16
 0006                   .dbline -1
 0006                   .dbline 14
 0006           ; #include <f:\yyjapp\yymk\software\main.h>
 0006           ; #include <f:\yyjapp\yymk\software\ds1302.h>
 0006           ; #include <iom128v.h>
 0006           ; #include <macros.h>
 0006           ; unsigned char code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
 0006           ; /******************************************************************** 
 0006           ;  函 数 名:W_Byte()
 0006           ;  功    能:实时时钟写入一字节
 0006           ;  说    明:往DS1302写入1Byte数据
 0006           ;  入口参数:Data 写入的数据 
 0006           ;  返 回 值:无  
 0006           ; ***********************************************************************/
 0006           ; void W_Byte(unsigned char Data) 
 0006           ; { 
 0006                   .dbline 16
 0006           ;     unsigned char i;
 0006           ;     for(i=0;i<8;i++)
 0006 4427              clr R20
 0008 08C0              xjmp L5
 000A           L2:
 000A                   .dbline 17
 000A           ;     {
 000A                   .dbline 18
 000A           ;               if(Data&0x01)      //相当于汇编的RRC命令
 000A 60FF              sbrs R22,0
 000C 02C0              rjmp L6
 000E                   .dbline 19
 000E           ;               SET_IO();
 000E 1598              cbi 0x2,5
 0010 01C0              xjmp L7
 0012           L6:
 0012                   .dbline 21
 0012           ;               else
 0012           ;               CLEAR_IO();
 0012 159A              sbi 0x2,5
 0014           L7:
 0014                   .dbline 22
 0014 6695              lsr R22
 0016                   .dbline 23
 0016 DCD0              xcall _CLOCK
 0018                   .dbline 24
 0018           L3:
 0018                   .dbline 16
 0018 4395              inc R20
 001A           L5:
 001A                   .dbline 16
 001A 4830              cpi R20,8
 001C B0F3              brlo L2
 001E                   .dbline -2
 001E           L1:
 001E 0E940000          xcall pop_gset2
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbsym r i 20 c
 0024                   .dbsym r Data 22 c
 0024                   .dbend
 0024                   .dbfunc e R_Byte _R_Byte fc
 0024           ;           data -> R20
 0024           ;              i -> R22
                        .even
 0024           _R_Byte::
 0024 0E940000          xcall push_gset2
 0028                   .dbline -1
 0028                   .dbline 35
 0028           ;               Data>>=1;
 0028           ;               CLOCK();
 0028           ;     } 
 0028           ; }
 0028           ; /******************************************************************** 
 0028           ; 
 0028           ;  函 数 名:R_Byte()
 0028           ;  功    能:实时时钟读取一字节
 0028           ;  说    明:从DS1302读取1Byte数据
 0028           ;  入口参数:无  
 0028           ;  返 回 值:data
 0028           ; ***********************************************************************/
 0028           ; unsigned char R_Byte(void) 
 0028           ; { 
 0028                   .dbline 36
 0028           ;     unsigned char i,data=0;
 0028 4427              clr R20
 002A                   .dbline 37
 002A           ;       for(i=0;i<8;i++)
 002A 6627              clr R22
 002C 0CC0              xjmp L12
 002E           L9:
 002E                   .dbline 38
 002E           ;     {
 002E                   .dbline 39
 002E           ;               if(PINE&0x20)
 002E 0D9B              sbis 0x1,5
 0030 08C0              rjmp L13
 0032                   .dbline 40
 0032           ;               data|=code[i];
 0032 80E0              ldi R24,<_code
 0034 90E0              ldi R25,>_code
 0036 E62F              mov R30,R22
 0038 FF27              clr R31
 003A E80F              add R30,R24
 003C F91F              adc R31,R25
 003E 2080              ldd R2,z+0
 0040 4229              or R20,R2
 0042           L13:
 0042                   .dbline 41
 0042 C6D0              xcall _CLOCK
 0044                   .dbline 42
 0044           L10:
 0044                   .dbline 37
 0044 6395              inc R22
 0046           L12:
 0046                   .dbline 37
 0046 6830              cpi R22,8
 0048 90F3              brlo L9
 004A                   .dbline 43
 004A           ;               CLOCK();
 004A           ;     } 
 004A           ;     return data; 
 004A 042F              mov R16,R20
 004C                   .dbline -2
 004C           L8:
 004C 0E940000          xcall pop_gset2
 0050                   .dbline 0 ; func end
 0050 0895              ret
 0052                   .dbsym r data 20 c
 0052                   .dbsym r i 22 c
 0052                   .dbend
 0052                   .dbfunc e W_1302 _W_1302 fV
 0052           ;           Data -> R20
 0052           ;           Addr -> R22
                        .even
 0052           _W_1302::
 0052 0E940000          xcall push_gset2
 0056 422F              mov R20,R18
 0058 602F              mov R22,R16
 005A                   .dbline -1
 005A                   .dbline 55
 005A           ; }
 005A           ; /******************************************************************** 
 005A           ; 
 005A           ;  函 数 名:W_1302()
 005A           ;  功    能:往DS1302写入数据
 005A           ;  说    明:先写地址,后写命令/数据
 005A           ;  调    用:W_Byte() , R_Byte()
 005A           ;  入口参数:Addr: DS1302地址, Data: 要写的数据
 005A           ;  返 回 值:无
 005A           ; ***********************************************************************/
 005A           ; void W_1302(unsigned char Addr, unsigned char Data)
 005A           ; {
 005A                   .dbline 56
 005A           ;       CLEAR_RST();
 005A 169A              sbi 0x2,6
 005C                   .dbline 57
 005C           ;       CLEAR_CLK();
 005C 149A              sbi 0x2,4
 005E                   .dbline 58
 005E           ;       SET_RST();
 005E 1698              cbi 0x2,6
 0060                   .dbline 59
 0060           ;       SET_IO();
 0060 1598              cbi 0x2,5
 0062                   .dbline 60
 0062           ;     W_Byte(Addr);       /* 地址,命令 */
 0062 062F              mov R16,R22
 0064 CDDF              xcall _W_Byte
 0066                   .dbline 61
 0066           ;     W_Byte(Data);       /* 写1Byte数据*/
 0066 042F              mov R16,R20
 0068 CBDF              xcall _W_Byte
 006A                   .dbline 62
 006A           ;     SET_CLK();
 006A 1498              cbi 0x2,4
 006C                   .dbline 63
 006C           ;     CLEAR_RST();
 006C 169A              sbi 0x2,6
 006E                   .dbline -2
 006E           L15:
 006E 0E940000          xcall pop_gset2
 0072                   .dbline 0 ; func end
 0072 0895              ret
 0074                   .dbsym r Data 20 c
 0074                   .dbsym r Addr 22 c
 0074                   .dbend
 0074                   .dbfunc e R_1302 _R_1302 fc
 0074           ;          Data1 -> R20
 0074           ;           Addr -> R20
                        .even
 0074           _R_1302::
 0074 0E940000          xcall push_gset1
 0078 402F              mov R20,R16
 007A                   .dbline -1
 007A                   .dbline 75
 007A           ; } 
 007A           ; /******************************************************************** 
 007A           ; 
 007A           ;  函 数 名:R_1302()
 007A           ;  功    能:读取DS1302某地址的数据
 007A           ;  说    明:先写地址,后读命令/数据
 007A           ;  调    用:W_Byte() , R_Byte()
 007A           ;  入口参数:ucAddr: DS1302地址
 007A           ;  返 回 值:ucData :读取的数据
 007A           ; ***********************************************************************/
 007A           ; unsigned char R_1302(unsigned char Addr)
 007A           ; {
 007A                   .dbline 77
 007A           ;     unsigned char Data1;
 007A           ;       CLEAR_RST();
 007A 169A              sbi 0x2,6
 007C                   .dbline 78
 007C           ;       CLEAR_CLK();
 007C 149A              sbi 0x2,4
 007E                   .dbline 79
 007E           ;     SET_RST();
 007E 1698              cbi 0x2,6
 0080                   .dbline 80
 0080           ;     W_Byte(Addr);             /* 地址,命令 */
 0080 042F              mov R16,R20
 0082 BEDF              xcall _W_Byte
 0084                   .dbline 81
 0084           ;     Data1 = R_Byte();         /* 读1Byte数据 */
 0084 CFDF              xcall _R_Byte
 0086 402F              mov R20,R16
 0088                   .dbline 82
 0088           ;     SET_CLK();
 0088 1498              cbi 0x2,4
 008A                   .dbline 83
 008A           ;     CLEAR_RST();
 008A 169A              sbi 0x2,6
 008C                   .dbline 84
 008C           ;     return Data1;
 008C                   .dbline -2
 008C           L16:
 008C 0E940000          xcall pop_gset1
 0090                   .dbline 0 ; func end

⌨️ 快捷键说明

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