📄 ds1302.lis
字号:
.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 + -