📄 1302.lst
字号:
(0047)
(0048)
(0049) update_display_dp(num);
012C 018A MOVW R16,R20
012D DF0A RCALL _update_display_dp
012E CFA7 RJMP 0x00D6
012F 9508 RET
FILE: D:\AVR实验\DS1302时间芯片\mudle1302.c
(0001) #include "ds1302.h"
(0002)
(0003)
(0004) void Delayus(uchar i)
(0005) {
(0006) while(--i);
_Delayus:
i --> R16
0130 2F80 MOV R24,R16
0131 5081 SUBI R24,1
0132 2F08 MOV R16,R24
0133 2388 TST R24
0134 F7D9 BNE 0x0130
0135 9508 RET
(0007) }
(0008)
(0009)
(0010)
(0011)
(0012) uchar ReadSec(void)
(0013) {
(0014) return ReadRTC_Byte(0x81);
_ReadSec:
0136 E801 LDI R16,0x81
0137 E010 LDI R17,0
0138 D024 RCALL _ReadRTC_Byte
0139 9508 RET
(0015) }
(0016) uchar ReadMin(void)
(0017) {
(0018) return ReadRTC_Byte(0x83);
_ReadMin:
013A E803 LDI R16,0x83
013B E010 LDI R17,0
013C D020 RCALL _ReadRTC_Byte
013D 9508 RET
(0019) }
(0020) uchar ReadHour(void)
(0021) {
(0022) return ReadRTC_Byte(0x85);
_ReadHour:
013E E805 LDI R16,0x85
013F E010 LDI R17,0
0140 D01C RCALL _ReadRTC_Byte
0141 9508 RET
_WriteSec:
number --> R20
0142 D09A RCALL push_gset1
0143 2F40 MOV R20,R16
(0023) }
(0024)
(0025)
(0026)
(0027) void WriteSec(uchar number)
(0028) {
(0029) WriteRTC_Byte(0x80,number);
0144 2F24 MOV R18,R20
0145 2733 CLR R19
0146 E800 LDI R16,0x80
0147 E010 LDI R17,0
0148 D023 RCALL _WriteRTC_Byte
0149 D096 RCALL pop_gset1
014A 9508 RET
_WriteMin:
number --> R20
014B D091 RCALL push_gset1
014C 2F40 MOV R20,R16
(0030) }
(0031) void WriteMin(uchar number)
(0032) {
(0033) WriteRTC_Byte(0x82,number);
014D 2F24 MOV R18,R20
014E 2733 CLR R19
014F E802 LDI R16,0x82
0150 E010 LDI R17,0
0151 D01A RCALL _WriteRTC_Byte
0152 D08D RCALL pop_gset1
0153 9508 RET
_WriteHour:
number --> R20
0154 D088 RCALL push_gset1
0155 2F40 MOV R20,R16
(0034) }
(0035) void WriteHour(uchar number) //向DS1302中写入分字节
(0036) {
(0037) WriteRTC_Byte(0x84,number);
0156 2F24 MOV R18,R20
0157 2733 CLR R19
0158 E804 LDI R16,0x84
0159 E010 LDI R17,0
015A D011 RCALL _WriteRTC_Byte
015B D084 RCALL pop_gset1
015C 9508 RET
_ReadRTC_Byte:
redata --> R20
address --> R20
015D D07F RCALL push_gset1
015E 2F40 MOV R20,R16
(0038) }
(0039)
(0040)
(0041)
(0042)
(0043) uint ReadRTC_Byte(uchar address)
(0044) {
(0045) unsigned char redata;
(0046)
(0047) Clr_ds1302_rst;//ds1302_rst = 0;
015F 98AB CBI 0x15,3
(0048) Clr_ds1302_clk;//ds1302_clk = 0;
0160 98A9 CBI 0x15,1
(0049) Set_ds1302_rst;//ds1302_rst = 1;
0161 9AAB SBI 0x15,3
(0050) Write_bit(address);
0162 2F04 MOV R16,R20
0163 2711 CLR R17
0164 D017 RCALL _Write_bit
(0051) redata=Read_bit();
0165 D02A RCALL _Read_bit
0166 2F40 MOV R20,R16
(0052) Clr_ds1302_rst;//ds1302_rst = 0;
0167 98AB CBI 0x15,3
(0053) Set_ds1302_clk;//ds1302_clk = 1;
0168 9AA9 SBI 0x15,1
(0054) return redata;
0169 2711 CLR R17
016A D075 RCALL pop_gset1
016B 9508 RET
_WriteRTC_Byte:
number --> R20
address --> R22
016C D06E RCALL push_gset2
016D 2F42 MOV R20,R18
016E 2F60 MOV R22,R16
(0055) }
(0056)
(0057) void WriteRTC_Byte(uchar address,uchar number)
(0058) {
(0059) Clr_ds1302_clk;//ds1302_clk = 0;
016F 98A9 CBI 0x15,1
(0060) Clr_ds1302_rst;// ds1302_rst = 0;
0170 98AB CBI 0x15,3
(0061) Set_ds1302_rst;//ds1302_rst = 1;
0171 9AAB SBI 0x15,3
(0062) Write_bit(address);
0172 2F06 MOV R16,R22
0173 2711 CLR R17
0174 D007 RCALL _Write_bit
(0063) Write_bit(number);
0175 2F04 MOV R16,R20
0176 2711 CLR R17
0177 D004 RCALL _Write_bit
(0064) Clr_ds1302_rst;//ds1302_rst = 0;
0178 98AB CBI 0x15,3
(0065) Set_ds1302_clk;//ds1302_clk = 1;
0179 9AA9 SBI 0x15,1
017A D056 RCALL pop_gset2
017B 9508 RET
_Write_bit:
i --> R20
addr --> R16
017C D060 RCALL push_gset1
(0066) }
(0067)
(0068)
(0069)
(0070)
(0071)
(0072) void Write_bit (uchar addr)
(0073) {
(0074) uchar i=0;
017D 2744 CLR R20
(0075) for(i=8;i>0;i--){
017E E048 LDI R20,0x8
017F C00B RJMP 0x018B
(0076) if((addr&0x01)==0x01)
0180 2F80 MOV R24,R16
0181 7081 ANDI R24,1
0182 3081 CPI R24,1
0183 F411 BNE 0x0186
(0077) Set_ds1302_data;//ds1302_dat = 1;
0184 9AAA SBI 0x15,2
0185 C001 RJMP 0x0187
(0078) else
(0079) Clr_ds1302_data;//ds1302_dat = 0;
0186 98AA CBI 0x15,2
(0080) Set_ds1302_clk;//ds1302_clk=1;
0187 9AA9 SBI 0x15,1
(0081) Clr_ds1302_clk;//ds1302_clk=0;
0188 98A9 CBI 0x15,1
(0082) addr>>=1;
0189 9506 LSR R16
018A 954A DEC R20
018B 2422 CLR R2
018C 1624 CP R2,R20
018D F390 BCS 0x0180
018E D051 RCALL pop_gset1
018F 9508 RET
_Read_bit:
num --> Y+1
data_r --> R20
i --> R22
0190 D04A RCALL push_gset2
(0083) }
(0084) }
(0085)
(0086) uchar Read_bit ()
(0087) {
(0088) uchar i=0,num;
0191 2766 CLR R22
(0089) uchar data_r=0;
0192 2744 CLR R20
(0090) Delayus(15);//19us delay
0193 E00F LDI R16,0xF
0194 DF9B RCALL _Delayus
(0091) data_in;
0195 98A2 CBI 0x14,2
(0092)
(0093)
(0094) for(i=8;i>0;i--){
0196 E068 LDI R22,0x8
0197 C007 RJMP 0x019F
(0095) data_r>>=1;
0198 9546 LSR R20
(0096)
(0097)
(0098) if(data_in_read)
0199 9B9A SBIS 0x13,2
019A C001 RJMP 0x019C
(0099) {
(0100) data_r|=0x80;
019B 6840 ORI R20,0x80
(0101) }
(0102) Set_ds1302_clk;//ds1302_clk = 1;
019C 9AA9 SBI 0x15,1
(0103) Clr_ds1302_clk;//ds1302_clk = 0;
019D 98A9 CBI 0x15,1
019E 956A DEC R22
019F 2422 CLR R2
01A0 1626 CP R2,R22
01A1 F3B0 BCS 0x0198
(0104) }
(0105) return data_r;
FILE: <library>
01A2 2F04 MOV R16,R20
01A3 D02D RCALL pop_gset2
01A4 9508 RET
mod16u:
01A5 9468 BSET 6
01A6 C001 RJMP xdiv16u
div16u:
01A7 94E8 BCLR 6
xdiv16u:
01A8 92EA ST R14,-Y
01A9 92FA ST R15,-Y
01AA 938A ST R24,-Y
01AB 24EE CLR R14
01AC 24FF CLR R15
01AD E180 LDI R24,0x10
01AE 0F00 LSL R16
01AF 1F11 ROL R17
01B0 1CEE ROL R14
01B1 1CFF ROL R15
01B2 16E2 CP R14,R18
01B3 06F3 CPC R15,R19
01B4 F018 BCS 0x01B8
01B5 1AE2 SUB R14,R18
01B6 0AF3 SBC R15,R19
01B7 9503 INC R16
01B8 958A DEC R24
01B9 F7A1 BNE 0x01AE
01BA F416 BRTC 0x01BD
01BB 2D0E MOV R16,R14
01BC 2D1F MOV R17,R15
01BD 9189 LD R24,Y+
01BE 90F9 LD R15,Y+
01BF 90E9 LD R14,Y+
01C0 9508 RET
empy16s:
01C1 920A ST R0,-Y
01C2 921A ST R1,-Y
01C3 938A ST R24,-Y
01C4 939A ST R25,-Y
01C5 9F02 MUL R16,R18
01C6 01C0 MOVW R24,R0
01C7 9F12 MUL R17,R18
01C8 0D90 ADD R25,R0
01C9 9F03 MUL R16,R19
01CA 0D90 ADD R25,R0
01CB 018C MOVW R16,R24
01CC 9199 LD R25,Y+
01CD 9189 LD R24,Y+
01CE 9019 LD R1,Y+
01CF 9009 LD R0,Y+
01D0 9508 RET
pop_gset2:
01D1 E0E2 LDI R30,2
01D2 C00E RJMP pop
pop_gset4:
01D3 E0E8 LDI R30,0x8
01D4 C00C RJMP pop
push_gset5:
01D5 92FA ST R15,-Y
01D6 92EA ST R14,-Y
push_gset4:
01D7 92DA ST R13,-Y
01D8 92CA ST R12,-Y
push_gset3:
01D9 92BA ST R11,-Y
01DA 92AA ST R10,-Y
push_gset2:
01DB 937A ST R23,-Y
01DC 936A ST R22,-Y
push_gset1:
01DD 935A ST R21,-Y
01DE 934A ST R20,-Y
01DF 9508 RET
pop_gset1:
01E0 E0E1 LDI R30,1
pop:
01E1 9149 LD R20,Y+
01E2 9159 LD R21,Y+
01E3 FDE0 SBRC R30,0
01E4 9508 RET
01E5 9169 LD R22,Y+
01E6 9179 LD R23,Y+
01E7 FDE1 SBRC R30,1
01E8 9508 RET
01E9 90A9 LD R10,Y+
01EA 90B9 LD R11,Y+
01EB FDE2 SBRC R30,2
01EC 9508 RET
01ED 90C9 LD R12,Y+
01EE 90D9 LD R13,Y+
01EF FDE3 SBRC R30,3
01F0 9508 RET
01F1 90E9 LD R14,Y+
01F2 90F9 LD R15,Y+
01F3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -