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

📄 ds1302.lis

📁 我自己编写的atmega16的ds1302源程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00A2           ;       return(data);  
 00A2 042F              mov R16,R20
 00A4                   .dbline -2
 00A4           L16:
 00A4 0E940000          xcall pop_gset4
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbsym r data 20 c
 00AA                   .dbsym r k 22 c
 00AA                   .dbsym r i 10 c
 00AA                   .dbsym r j 12 c
 00AA                   .dbend
 00AA                   .dbfunc e BCDtoASCII _BCDtoASCII fV
 00AA           ;              j -> R20
 00AA           ;              i -> R22
 00AA           ;           pstr -> R18,R19
 00AA           ;           cBCD -> R16
                        .even
 00AA           _BCDtoASCII::
 00AA 0E940000          xcall push_gset2
 00AE                   .dbline -1
 00AE                   .dbline 64
 00AE           ; } 
 00AE           ; 
 00AE           ; void BCDtoASCII(unsigned char cBCD,unsigned char *pstr)
 00AE           ; {
 00AE                   .dbline 66
 00AE           ;       unsigned char i,j;
 00AE           ;       i=cBCD>>4;
 00AE 602F              mov R22,R16
 00B0 6295              swap R22
 00B2 6F70              andi R22,#0x0F
 00B4                   .dbline 67
 00B4           ;       j=cBCD&0x0F;
 00B4 402F              mov R20,R16
 00B6 4F70              andi R20,15
 00B8                   .dbline 68
 00B8           ;       *pstr++=i+0x30;
 00B8 862F              mov R24,R22
 00BA 805D              subi R24,208    ; addi 48
 00BC F901              movw R30,R18
 00BE 8193              st Z+,R24
 00C0 9F01              movw R18,R30
 00C2                   .dbline 69
 00C2           ;       *pstr=j+0x30;
 00C2 842F              mov R24,R20
 00C4 805D              subi R24,208    ; addi 48
 00C6 8083              std z+0,R24
 00C8                   .dbline -2
 00C8                   .dbline 70
 00C8           ; }
 00C8           L35:
 00C8 0E940000          xcall pop_gset2
 00CC                   .dbline 0 ; func end
 00CC 0895              ret
 00CE                   .dbsym r j 20 c
 00CE                   .dbsym r i 22 c
 00CE                   .dbsym r pstr 18 pc
 00CE                   .dbsym r cBCD 16 c
 00CE                   .dbend
 00CE                   .dbfunc e W1302 _W1302 fV
 00CE           ;           ucDa -> R20
 00CE           ;         ucAddr -> R22
                        .even
 00CE           _W1302::
 00CE 0E940000          xcall push_gset2
 00D2 422F              mov R20,R18
 00D4 602F              mov R22,R16
 00D6                   .dbline -1
 00D6                   .dbline 80
 00D6           ; /********************************************************************  
 00D6           ;  函 数 名:W1302() 
 00D6           ;  功    能:往DS1302写入数据 
 00D6           ;  说    明:先写地址,后写命令/数据 (内部函数) 
 00D6           ;  调    用:RTInputByte() , RTOutputByte() 
 00D6           ;  入口参数:ucAddr: DS1302地址, ucData: 要写的数据 
 00D6           ;  返 回 值:无 
 00D6           ;  ***********************************************************************/ 
 00D6           ; void W1302(unsigned char ucAddr, unsigned char ucDa) 
 00D6           ; {   
 00D6                   .dbline 81
 00D6           ;     DS1302_PORT&=~(1<<DS1302_RST);  // RST  to L 
 00D6 9598              cbi 0x12,5
 00D8                   .dbline 82
 00D8           ;     DS1302_PORT&=~(1<<DS1302_CLK);  // CLK  to L 
 00D8 9798              cbi 0x12,7
 00DA                   .dbline 83
 00DA           ;     DS1302_PORT|=(1<<DS1302_RST);  // RST  to H 
 00DA 959A              sbi 0x12,5
 00DC                   .dbline 85
 00DC           ; 
 00DC           ;     RTInputByte(ucAddr);       /* 地址,命令 */ 
 00DC 062F              mov R16,R22
 00DE 90DF              xcall _RTInputByte
 00E0                   .dbline 86
 00E0           ;     RTInputByte(ucDa);         /* 写1Byte数据*/ 
 00E0 042F              mov R16,R20
 00E2 8EDF              xcall _RTInputByte
 00E4                   .dbline 88
 00E4           ; 
 00E4           ;     DS1302_PORT|=(1<<DS1302_CLK); //CLK  to H 
 00E4 979A              sbi 0x12,7
 00E6                   .dbline 89
 00E6           ;       DS1302_PORT&=~(1<<DS1302_RST); //RST  to L  
 00E6 9598              cbi 0x12,5
 00E8                   .dbline -2
 00E8                   .dbline 91
 00E8           ; 
 00E8           ; } 
 00E8           L36:
 00E8 0E940000          xcall pop_gset2
 00EC                   .dbline 0 ; func end
 00EC 0895              ret
 00EE                   .dbsym r ucDa 20 c
 00EE                   .dbsym r ucAddr 22 c
 00EE                   .dbend
 00EE                   .dbfunc e R1302 _R1302 fc
 00EE           ;         ucData -> R20
 00EE           ;         ucAddr -> R20
                        .even
 00EE           _R1302::
 00EE 0E940000          xcall push_gset1
 00F2 402F              mov R20,R16
 00F4                   .dbline -1
 00F4                   .dbline 101
 00F4           ; /********************************************************************  
 00F4           ;  函 数 名:R1302() 
 00F4           ;  功    能:读取DS1302某地址的数据 
 00F4           ;  说    明:先写地址,后读命令/数据 (内部函数) 
 00F4           ;  调    用:RTInputByte() , RTOutputByte() 
 00F4           ;  入口参数:ucAddr: DS1302地址 
 00F4           ;  返 回 值:ucData :读取的数据 
 00F4           ; ***********************************************************************/ 
 00F4           ; unsigned char R1302(unsigned char ucAddr) 
 00F4           ; { 
 00F4                   .dbline 103
 00F4           ;     unsigned char ucData;    
 00F4           ;     DS1302_PORT&=~(1<<DS1302_RST);  // RST  to L 
 00F4 9598              cbi 0x12,5
 00F6                   .dbline 104
 00F6           ;     DS1302_PORT&=~(1<<DS1302_CLK);  // CLK  to L 
 00F6 9798              cbi 0x12,7
 00F8                   .dbline 105
 00F8           ;     DS1302_PORT|=(1<<DS1302_RST);  // RST  to H 
 00F8 959A              sbi 0x12,5
 00FA                   .dbline 106
 00FA           ;     RTInputByte(ucAddr);             /* 地址,命令 */ 
 00FA 042F              mov R16,R20
 00FC 81DF              xcall _RTInputByte
 00FE                   .dbline 107
 00FE           ;     ucData = RTOutputByte();         /* 读1Byte数据 */ 
 00FE A3DF              xcall _RTOutputByte
 0100 402F              mov R20,R16
 0102                   .dbline 108
 0102           ;     DS1302_PORT|=(1<<DS1302_CLK); //CLK  to H 
 0102 979A              sbi 0x12,7
 0104                   .dbline 109
 0104           ;     DS1302_PORT&=~(1<<DS1302_RST); //RST  to L
 0104 9598              cbi 0x12,5
 0106                   .dbline 110
 0106           ;       return(ucData); 
 0106                   .dbline -2
 0106           L37:
 0106 0E940000          xcall pop_gset1
 010A                   .dbline 0 ; func end
 010A 0895              ret
 010C                   .dbsym r ucData 20 c
 010C                   .dbsym r ucAddr 20 c
 010C                   .dbend
 010C                   .dbfunc e init_1302 _init_1302 fV
                        .even
 010C           _init_1302::
 010C                   .dbline -1
 010C                   .dbline 113
 010C           ; } 
 010C           ; void init_1302()
 010C           ; { 
 010C                   .dbline 114
 010C           ;   DS1302_DDR|=(1<<DS1302_RST);
 010C 8D9A              sbi 0x11,5
 010E                   .dbline 115
 010E           ;   DS1302_DDR|=(1<<DS1302_CLK);
 010E 8F9A              sbi 0x11,7
 0110                   .dbline 116
 0110           ;   DS1302_DDR|=(1<<DS1302_DATA);
 0110 8E9A              sbi 0x11,6
 0112                   .dbline 117
 0112           ;   W1302(0x8e,0x00);      //关闭寄存器写保护
 0112 2227              clr R18
 0114 0EE8              ldi R16,142
 0116 DBDF              xcall _W1302
 0118                   .dbline 118
 0118           ;   W1302(0x90,0x00);       //写充电寄存器
 0118 2227              clr R18
 011A 00E9              ldi R16,144
 011C D8DF              xcall _W1302
 011E                   .dbline 119
 011E           ;   W1302(0x80,0x00);      //秒寄存器停止位置0,时钟启动,初值设为0
 011E 2227              clr R18
 0120 00E8              ldi R16,128
 0122 D5DF              xcall _W1302
 0124                   .dbline 122
 0124           ;   
 0124           ;     //设置时间
 0124           ;     W1302(0x80,INITDATE[0]);
 0124 20910000          lds R18,_INITDATE
 0128 00E8              ldi R16,128
 012A D1DF              xcall _W1302
 012C                   .dbline 123
 012C           ;     W1302(0x82,INITDATE[1]);
 012C 20910100          lds R18,_INITDATE+1
 0130 02E8              ldi R16,130
 0132 CDDF              xcall _W1302
 0134                   .dbline 124
 0134           ;     W1302(0x84,INITDATE[2]);
 0134 20910200          lds R18,_INITDATE+2
 0138 04E8              ldi R16,132
 013A C9DF              xcall _W1302
 013C                   .dbline 125
 013C           ;     W1302(0x86,INITDATE[3]);
 013C 20910300          lds R18,_INITDATE+3
 0140 06E8              ldi R16,134
 0142 C5DF              xcall _W1302
 0144                   .dbline 126
 0144           ;     W1302(0x88,INITDATE[4]);
 0144 20910400          lds R18,_INITDATE+4
 0148 08E8              ldi R16,136
 014A C1DF              xcall _W1302
 014C                   .dbline 127
 014C           ;     W1302(0x8a,INITDATE[5]);
 014C 20910500          lds R18,_INITDATE+5
 0150 0AE8              ldi R16,138
 0152 BDDF              xcall _W1302
 0154                   .dbline 128
 0154           ;       W1302(0x8c,INITDATE[6]);
 0154 20910600          lds R18,_INITDATE+6
 0158 0CE8              ldi R16,140
 015A B9DF              xcall _W1302
 015C                   .dbline 129
 015C           ;       W1302(0x8e,INITDATE[7]);
 015C 20910700          lds R18,_INITDATE+7
 0160 0EE8              ldi R16,142
 0162                   .dbline -2
 0162                   .dbline 131
 0162           ;        //设置时间
 0162           ; }
 0162           L38:
 0162                   .dbline 0 ; func end
 0162 B5CF              xjmp _W1302
 0164                   .dbend

⌨️ 快捷键说明

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