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

📄 ds1302.lis

📁 mega128+VS1003做的mp3的程序 可以用WINAVR编译
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -