⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.lis

📁 程序控制TFT全彩LCD显示屏
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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:\yinhui\avr_tft\soft\ds1302.c
 0008                   .dbsym e code _code A[8:8]c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\yinhui\avr_tft\soft\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:\yinhui\avr_tft\soft\main.h>
 0006           ; #include <f:\yinhui\avr_tft\soft\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 0AC0              xjmp L5
 000A           L2:
 000A                   .dbline 17
 000A           ;     {
 000A                   .dbline 18
 000A           ;               if(Data&0x01)      //相当于汇编的RRC命令
 000A 60FF              sbrs R22,0
 000C 03C0              rjmp L6
 000E                   .dbline 19
 000E           ;               SET_IO();
 000E 0E940000          xcall _SET_IO
 0012 02C0              xjmp L7
 0014           L6:
 0014                   .dbline 21
 0014           ;               else
 0014           ;               CLEAR_IO();
 0014 0E940000          xcall _CLEAR_IO
 0018           L7:
 0018                   .dbline 22
 0018 6695              lsr R22
 001A                   .dbline 23
 001A FCD0              xcall _CLOCK
 001C                   .dbline 24
 001C           L3:
 001C                   .dbline 16
 001C 4395              inc R20
 001E           L5:
 001E                   .dbline 16
 001E 4830              cpi R20,8
 0020 A0F3              brlo L2
 0022                   .dbline -2
 0022           L1:
 0022 0E940000          xcall pop_gset2
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r i 20 c
 0028                   .dbsym r Data 22 c
 0028                   .dbend
 0028                   .dbfunc e R_Byte _R_Byte fc
 0028           ;           data -> R20
 0028           ;              i -> R22
                        .even
 0028           _R_Byte::
 0028 0E940000          xcall push_gset2
 002C                   .dbline -1
 002C                   .dbline 35
 002C           ;               Data>>=1;
 002C           ;               CLOCK();
 002C           ;     } 
 002C           ; }
 002C           ; /******************************************************************** 
 002C           ; 
 002C           ;  函 数 名:R_Byte()
 002C           ;  功    能:实时时钟读取一字节
 002C           ;  说    明:从DS1302读取1Byte数据
 002C           ;  入口参数:无  
 002C           ;  返 回 值:data
 002C           ; ***********************************************************************/
 002C           ; unsigned char R_Byte(void) 
 002C           ; { 
 002C                   .dbline 36
 002C           ;     unsigned char i,data=0;
 002C 4427              clr R20
 002E                   .dbline 37
 002E           ;       for(i=0;i<8;i++)
 002E 6627              clr R22
 0030 0CC0              xjmp L12
 0032           L9:
 0032                   .dbline 38
 0032           ;     {
 0032                   .dbline 39
 0032           ;               if(PINE&0x20)
 0032 0D9B              sbis 0x1,5
 0034 08C0              rjmp L13
 0036                   .dbline 40
 0036           ;               data|=code[i];
 0036 80E0              ldi R24,<_code
 0038 90E0              ldi R25,>_code
 003A E62F              mov R30,R22
 003C FF27              clr R31
 003E E80F              add R30,R24
 0040 F91F              adc R31,R25
 0042 2080              ldd R2,z+0
 0044 4229              or R20,R2
 0046           L13:
 0046                   .dbline 41
 0046 E6D0              xcall _CLOCK
 0048                   .dbline 42
 0048           L10:
 0048                   .dbline 37
 0048 6395              inc R22
 004A           L12:
 004A                   .dbline 37
 004A 6830              cpi R22,8
 004C 90F3              brlo L9
 004E                   .dbline 43
 004E           ;               CLOCK();
 004E           ;     } 
 004E           ;     return data; 
 004E 042F              mov R16,R20
 0050                   .dbline -2
 0050           L8:
 0050 0E940000          xcall pop_gset2
 0054                   .dbline 0 ; func end
 0054 0895              ret
 0056                   .dbsym r data 20 c
 0056                   .dbsym r i 22 c
 0056                   .dbend
 0056                   .dbfunc e W_1302 _W_1302 fV
 0056           ;           Data -> R20
 0056           ;           Addr -> R22
                        .even
 0056           _W_1302::
 0056 0E940000          xcall push_gset2
 005A 422F              mov R20,R18
 005C 602F              mov R22,R16
 005E                   .dbline -1
 005E                   .dbline 55
 005E           ; }
 005E           ; /******************************************************************** 
 005E           ; 
 005E           ;  函 数 名:W_1302()
 005E           ;  功    能:往DS1302写入数据
 005E           ;  说    明:先写地址,后写命令/数据
 005E           ;  调    用:W_Byte() , R_Byte()
 005E           ;  入口参数:Addr: DS1302地址, Data: 要写的数据
 005E           ;  返 回 值:无
 005E           ; ***********************************************************************/
 005E           ; void W_1302(unsigned char Addr, unsigned char Data)
 005E           ; {
 005E                   .dbline 56
 005E           ;       CLEAR_RST();
 005E 0E940000          xcall _CLEAR_RST
 0062                   .dbline 57
 0062           ;       CLEAR_CLK();
 0062 0E940000          xcall _CLEAR_CLK
 0066                   .dbline 58
 0066           ;       SET_RST();
 0066 0E940000          xcall _SET_RST
 006A                   .dbline 59
 006A           ;       SET_IO();
 006A 0E940000          xcall _SET_IO
 006E                   .dbline 60
 006E           ;     W_Byte(Addr);       /* 地址,命令 */
 006E 062F              mov R16,R22
 0070 C7DF              xcall _W_Byte
 0072                   .dbline 61
 0072           ;     W_Byte(Data);       /* 写1Byte数据*/
 0072 042F              mov R16,R20
 0074 C5DF              xcall _W_Byte
 0076                   .dbline 62
 0076           ;     SET_CLK();
 0076 0E940000          xcall _SET_CLK
 007A                   .dbline 63
 007A           ;     CLEAR_RST();
 007A 0E940000          xcall _CLEAR_RST
 007E                   .dbline -2
 007E           L15:
 007E 0E940000          xcall pop_gset2
 0082                   .dbline 0 ; func end
 0082 0895              ret
 0084                   .dbsym r Data 20 c
 0084                   .dbsym r Addr 22 c
 0084                   .dbend
 0084                   .dbfunc e R_1302 _R_1302 fc
 0084           ;          Data1 -> R20
 0084           ;           Addr -> R20
                        .even
 0084           _R_1302::
 0084 0E940000          xcall push_gset1
 0088 402F              mov R20,R16
 008A                   .dbline -1
 008A                   .dbline 75
 008A           ; } 
 008A           ; /******************************************************************** 
 008A           ; 
 008A           ;  函 数 名:R_1302()
 008A           ;  功    能:读取DS1302某地址的数据
 008A           ;  说    明:先写地址,后读命令/数据
 008A           ;  调    用:W_Byte() , R_Byte()
 008A           ;  入口参数:ucAddr: DS1302地址
 008A           ;  返 回 值:ucData :读取的数据
 008A           ; ***********************************************************************/
 008A           ; unsigned char R_1302(unsigned char Addr)
 008A           ; {
 008A                   .dbline 77
 008A           ;     unsigned char Data1;
 008A           ;       CLEAR_RST();
 008A 0E940000          xcall _CLEAR_RST
 008E                   .dbline 78
 008E           ;       CLEAR_CLK();
 008E 0E940000          xcall _CLEAR_CLK
 0092                   .dbline 79
 0092           ;     SET_RST();
 0092 0E940000          xcall _SET_RST
 0096                   .dbline 80
 0096           ;     W_Byte(Addr);             /* 地址,命令 */
 0096 042F              mov R16,R20
 0098 B3DF              xcall _W_Byte
 009A                   .dbline 81
 009A           ;     Data1 = R_Byte();         /* 读1Byte数据 */
 009A C6DF              xcall _R_Byte
 009C 402F              mov R20,R16
 009E                   .dbline 82
 009E           ;     SET_CLK();
 009E 0E940000          xcall _SET_CLK
 00A2                   .dbline 83
 00A2           ;     CLEAR_RST();
 00A2 0E940000          xcall _CLEAR_RST
 00A6                   .dbline 84
 00A6           ;     return Data1;
 00A6 042F              mov R16,R20
 00A8                   .dbline -2
 00A8           L16:
 00A8 0E940000          xcall pop_gset1

⌨️ 快捷键说明

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