📄 ds1302.lis
字号:
.module DS1302.C
.area text(rom, con, rel)
0000 .dbfile E:\software\MP3程序\Ds1302\DS1302.C
0000 .dbfunc e ds1302_init _ds1302_init fV
.even
0000 _ds1302_init::
0000 .dbline -1
0000 .dbline 44
0000 ; /*********************************************************************************
0000 ; *移植时一定要注意函数 void Ds1302buf_Write(uchar cmd, uchar data),中的方向和,读PIN引脚
0000 ; *********************************************************************************/
0000 ; #include <iom64v.h>
0000 ; #include <macros.h>
0000 ; #include "./ds1302.h"
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ;
0000 ; #define nop NOP(); \
0000 ; NOP(); \
0000 ; NOP(); \
0000 ; NOP(); \
0000 ; NOP()
0000 ;
0000 ; #define sei() SEI()
0000 ; #define cli() CLI()
0000 ;
0000 ; #define DSCL(x) PORTE = (PORTE & ~(1<<2))|(x<<2)
0000 ; #define DSDA(x) PORTE = (PORTE & ~(1<<3))|(x<<3)
0000 ; #define DRST(x) PORTE = (PORTE & ~(1<<4))|(x<<4)
0000 ;
0000 ; #define SEC_W 0x80 /*Ds1302buf命令字*/
0000 ; #define SEC_R 0x81
0000 ; #define MIN_W 0x82
0000 ; #define MIN_R 0x83
0000 ; #define hour_W 0x84
0000 ; #define hour_R 0x85
0000 ; #define DATE_W 0x86
0000 ; #define DATE_R 0x87
0000 ; #define MONTH_W 0x88
0000 ; #define MONTH_R 0x89
0000 ; #define WEEK_W 0x8a
0000 ; #define WEEK_R 0x8b
0000 ; #define YEAR_W 0x8c
0000 ; #define YEAR_R 0x8d
0000 ; #define WP_W 0x8E
0000 ; #define POWER_W 0X90
0000 ; extern struct time_now timebuf;
0000 ; #define Ds1302buf timebuf
0000 ;
0000 ; //#define PRINTF_COM 1
0000 ; void ds1302_init(void)
0000 ; {
0000 .dbline 45
0000 ; DDRE |= (1<<2)|(1<<3)|(1<<4);
0000 82B1 in R24,0x2
0002 8C61 ori R24,28
0004 82B9 out 0x2,R24
0006 .dbline 46
0006 ; PORTE |= (1<<2)|(1<<3)|(1<<4);
0006 83B1 in R24,0x3
0008 8C61 ori R24,28
000A 83B9 out 0x3,R24
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e Ds1302buf_Write _Ds1302buf_Write fV
000E ; i -> R20
000E ; data -> R22
000E ; cmd -> R10
.even
000E _Ds1302buf_Write::
000E 0E940000 xcall push_gset3
0012 622F mov R22,R18
0014 A02E mov R10,R16
0016 .dbline -1
0016 .dbline 52
0016 ; }
0016 ; /*********************************************************************************************************************************************
0016 ; 写一个字节到Ds1302buf,参数分别为命令、数据
0016 ; *********************************************************************************************************************************************/
0016 ; void Ds1302buf_Write(uchar cmd, uchar data)
0016 ; {uchar i;
0016 .dbline 53
0016 ; DSCL(0);
0016 1A98 cbi 0x3,2
0018 .dbline 54
0018 ; DRST(0);
0018 1C98 cbi 0x3,4
001A .dbline 55
001A ; nop;
001A 0000 nop
001C .dbline 55
001C 0000 nop
001E .dbline 55
001E 0000 nop
0020 .dbline 55
0020 0000 nop
0022 .dbline 55
0022 0000 nop
0024 .dbline 56
0024 ; DRST(1);
0024 83B1 in R24,0x3
0026 8F7E andi R24,239
0028 8061 ori R24,16
002A 83B9 out 0x3,R24
002C .dbline 57
002C ; nop;
002C 0000 nop
002E .dbline 57
002E 0000 nop
0030 .dbline 57
0030 0000 nop
0032 .dbline 57
0032 0000 nop
0034 .dbline 57
0034 0000 nop
0036 .dbline 58
0036 ; for(i=0; i<8; i++)/*发送内部地址*/
0036 4427 clr R20
0038 1DC0 xjmp L6
003A L3:
003A .dbline 59
003A ; {
003A .dbline 60
003A ; DSCL(0);
003A 1A98 cbi 0x3,2
003C .dbline 61
003C ; nop;
003C 0000 nop
003E .dbline 61
003E 0000 nop
0040 .dbline 61
0040 0000 nop
0042 .dbline 61
0042 0000 nop
0044 .dbline 61
0044 0000 nop
0046 .dbline 62
0046 ; if(cmd & (1<<i)) DSDA(1);
0046 01E0 ldi R16,1
0048 142F mov R17,R20
004A 0E940000 xcall lsl8
004E 2A2C mov R2,R10
0050 2022 and R2,R16
0052 29F0 breq L7
0054 .dbline 62
0054 83B1 in R24,0x3
0056 877F andi R24,247
0058 8860 ori R24,8
005A 83B9 out 0x3,R24
005C 01C0 xjmp L8
005E L7:
005E .dbline 63
005E ; else DSDA(0);
005E 1B98 cbi 0x3,3
0060 L8:
0060 .dbline 64
0060 83B1 in R24,0x3
0062 8B7F andi R24,251
0064 8460 ori R24,4
0066 83B9 out 0x3,R24
0068 .dbline 65
0068 0000 nop
006A .dbline 65
006A 0000 nop
006C .dbline 65
006C 0000 nop
006E .dbline 65
006E 0000 nop
0070 .dbline 65
0070 0000 nop
0072 .dbline 66
0072 L4:
0072 .dbline 58
0072 4395 inc R20
0074 L6:
0074 .dbline 58
0074 4830 cpi R20,8
0076 08F3 brlo L3
0078 .dbline 67
0078 ; DSCL(1);
0078 ; nop;
0078 ; }
0078 ; for(i=0; i<8; i++)/*发送数据*/
0078 4427 clr R20
007A 1DC0 xjmp L12
007C L9:
007C .dbline 68
007C ; {
007C .dbline 69
007C ; DSCL(0);
007C 1A98 cbi 0x3,2
007E .dbline 70
007E ; nop;
007E 0000 nop
0080 .dbline 70
0080 0000 nop
0082 .dbline 70
0082 0000 nop
0084 .dbline 70
0084 0000 nop
0086 .dbline 70
0086 0000 nop
0088 .dbline 71
0088 ; if(data & (1<<i)) DSDA(1);
0088 01E0 ldi R16,1
008A 142F mov R17,R20
008C 0E940000 xcall lsl8
0090 262E mov R2,R22
0092 2022 and R2,R16
0094 29F0 breq L13
0096 .dbline 71
0096 83B1 in R24,0x3
0098 877F andi R24,247
009A 8860 ori R24,8
009C 83B9 out 0x3,R24
009E 01C0 xjmp L14
00A0 L13:
00A0 .dbline 72
00A0 ; else DSDA(0);
00A0 1B98 cbi 0x3,3
00A2 L14:
00A2 .dbline 73
00A2 83B1 in R24,0x3
00A4 8B7F andi R24,251
00A6 8460 ori R24,4
00A8 83B9 out 0x3,R24
00AA .dbline 74
00AA 0000 nop
00AC .dbline 74
00AC 0000 nop
00AE .dbline 74
00AE 0000 nop
00B0 .dbline 74
00B0 0000 nop
00B2 .dbline 74
00B2 0000 nop
00B4 .dbline 75
00B4 L10:
00B4 .dbline 67
00B4 4395 inc R20
00B6 L12:
00B6 .dbline 67
00B6 4830 cpi R20,8
00B8 08F3 brlo L9
00BA .dbline 76
00BA ; DSCL(1);
00BA ; nop;
00BA ; }
00BA ; DRST(0);
00BA 1C98 cbi 0x3,4
00BC .dbline -2
00BC L2:
00BC 0E940000 xcall pop_gset3
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 .dbsym r i 20 c
00C2 .dbsym r data 22 c
00C2 .dbsym r cmd 10 c
00C2 .dbend
00C2 .dbfunc e Ds1302buf_Read _Ds1302buf_Read fc
00C2 ; data -> R20
00C2 ; i -> R22
00C2 ; cmd -> R10
.even
00C2 _Ds1302buf_Read::
00C2 0E940000 xcall push_gset3
00C6 A02E mov R10,R16
00C8 .dbline -1
00C8 .dbline 82
00C8 ; }
00C8 ; /*********************************************************************************************************************************************
00C8 ; 从Ds1302buf读一个字节数据返回,参数只有命令,返回数据
00C8 ; *******************************************************************************************************************************************/
00C8 ; uchar Ds1302buf_Read(uchar cmd)
00C8 ; {
00C8 .dbline 85
00C8 ; uchar i;
00C8 ; uchar data;
00C8 ; DSCL(0);
00C8 1A98 cbi 0x3,2
00CA .dbline 86
00CA ; DRST(0);
00CA 1C98 cbi 0x3,4
00CC .dbline 87
00CC ; nop;
00CC 0000 nop
00CE .dbline 87
00CE 0000 nop
00D0 .dbline 87
00D0 0000 nop
00D2 .dbline 87
00D2 0000 nop
00D4 .dbline 87
00D4 0000 nop
00D6 .dbline 88
00D6 ; DRST(1);
00D6 83B1 in R24,0x3
00D8 8F7E andi R24,239
00DA 8061 ori R24,16
00DC 83B9 out 0x3,R24
00DE .dbline 89
00DE ; nop;
00DE 0000 nop
00E0 .dbline 89
00E0 0000 nop
00E2 .dbline 89
00E2 0000 nop
00E4 .dbline 89
00E4 0000 nop
00E6 .dbline 89
00E6 0000 nop
00E8 .dbline 90
00E8 ; for(i=0; i<8; i++)/*发送内部地址*/
00E8 6627 clr R22
00EA 1DC0 xjmp L19
00EC L16:
00EC .dbline 91
00EC ; {
00EC .dbline 92
00EC ; DSCL(0);
00EC 1A98 cbi 0x3,2
00EE .dbline 93
00EE ; nop;
00EE 0000 nop
00F0 .dbline 93
00F0 0000 nop
00F2 .dbline 93
00F2 0000 nop
00F4 .dbline 93
00F4 0000 nop
00F6 .dbline 93
00F6 0000 nop
00F8 .dbline 94
00F8 ; if(cmd & (1<<i)) DSDA(1);
00F8 01E0 ldi R16,1
00FA 162F mov R17,R22
00FC 0E940000 xcall lsl8
0100 2A2C mov R2,R10
0102 2022 and R2,R16
0104 29F0 breq L20
0106 .dbline 94
0106 83B1 in R24,0x3
0108 877F andi R24,247
010A 8860 ori R24,8
010C 83B9 out 0x3,R24
010E 01C0 xjmp L21
0110 L20:
0110 .dbline 95
0110 ; else DSDA(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -