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