📄 mudle1302.lst
字号:
__text_start:
__start:
0011 E5CF LDI R28,0x5F
0012 E0D2 LDI R29,2
0013 BFCD OUT 0x3D,R28
0014 BFDE OUT 0x3E,R29
0015 51C0 SUBI R28,0x10
0016 40D0 SBCI R29,0
0017 EA0A LDI R16,0xAA
0018 8308 STD Y+0,R16
0019 2400 CLR R0
001A E6E0 LDI R30,0x60
001B E0F0 LDI R31,0
001C E010 LDI R17,0
001D 36E0 CPI R30,0x60
001E 07F1 CPC R31,R17
001F F011 BEQ 0x0022
0020 9201 ST R0,Z+
0021 CFFB RJMP 0x001D
0022 8300 STD Z+0,R16
0023 E2E2 LDI R30,0x22
0024 E0F0 LDI R31,0
0025 E6A0 LDI R26,0x60
0026 E0B0 LDI R27,0
0027 E010 LDI R17,0
0028 32E2 CPI R30,0x22
0029 07F1 CPC R31,R17
002A F021 BEQ 0x002F
002B 95C8 LPM
002C 9631 ADIW R30,1
002D 920D ST R0,X+
002E CFF9 RJMP 0x0028
002F D088 RCALL _main
_exit:
0030 CFFF RJMP _exit
FILE: mudle1302.c
(0001) #include "ds1302.h"
(0002)
(0003)
(0004) void Delayus(uchar i)
(0005) {
(0006) while(--i);
_Delayus:
i --> R16
0031 2F80 MOV R24,R16
0032 5081 SUBI R24,1
0033 2F08 MOV R16,R24
0034 2388 TST R24
0035 F7D9 BNE 0x0031
0036 9508 RET
_Delayms:
i --> R20
0037 D08D RCALL push_gset1
0038 01A8 MOVW R20,R16
(0007) }
(0008) void Delayms(uint i)
(0009) {
0039 C002 RJMP 0x003C
(0010) while(i--)
(0011) {
(0012) Delayus(125);
003A E70D LDI R16,0x7D
003B DFF5 RCALL _Delayus
003C 011A MOVW R2,R20
003D 5041 SUBI R20,1
003E 4050 SBCI R21,0
003F 2022 TST R2
0040 F7C9 BNE 0x003A
0041 2033 TST R3
0042 F7B9 BNE 0x003A
0043 D084 RCALL pop_gset1
0044 9508 RET
(0013) }
(0014) }
(0015)
(0016)
(0017)
(0018)
(0019) uchar ReadSec(void)
(0020) {
(0021) return ReadRTC_Byte(0x81);
_ReadSec:
0045 E801 LDI R16,0x81
0046 E010 LDI R17,0
0047 D024 RCALL _ReadRTC_Byte
0048 9508 RET
(0022) }
(0023) uchar ReadMin(void)
(0024) {
(0025) return ReadRTC_Byte(0x83);
_ReadMin:
0049 E803 LDI R16,0x83
004A E010 LDI R17,0
004B D020 RCALL _ReadRTC_Byte
004C 9508 RET
(0026) }
(0027) uchar ReadHour(void)
(0028) {
(0029) return ReadRTC_Byte(0x85);
_ReadHour:
004D E805 LDI R16,0x85
004E E010 LDI R17,0
004F D01C RCALL _ReadRTC_Byte
0050 9508 RET
_WriteSec:
number --> R20
0051 D073 RCALL push_gset1
0052 2F40 MOV R20,R16
(0030) }
(0031)
(0032)
(0033)
(0034) void WriteSec(uchar number)
(0035) {
(0036) WriteRTC_Byte(0x80,number);
0053 2F24 MOV R18,R20
0054 2733 CLR R19
0055 E800 LDI R16,0x80
0056 E010 LDI R17,0
0057 D023 RCALL _WriteRTC_Byte
0058 D06F RCALL pop_gset1
0059 9508 RET
_WriteMin:
number --> R20
005A D06A RCALL push_gset1
005B 2F40 MOV R20,R16
(0037) }
(0038) void WriteMin(uchar number)
(0039) {
(0040) WriteRTC_Byte(0x82,number);
005C 2F24 MOV R18,R20
005D 2733 CLR R19
005E E802 LDI R16,0x82
005F E010 LDI R17,0
0060 D01A RCALL _WriteRTC_Byte
0061 D066 RCALL pop_gset1
0062 9508 RET
_WriteHour:
number --> R20
0063 D061 RCALL push_gset1
0064 2F40 MOV R20,R16
(0041) }
(0042) void WriteHour(uchar number) //向DS1302中写入分字节
(0043) {
(0044) WriteRTC_Byte(0x84,number);
0065 2F24 MOV R18,R20
0066 2733 CLR R19
0067 E804 LDI R16,0x84
0068 E010 LDI R17,0
0069 D011 RCALL _WriteRTC_Byte
006A D05D RCALL pop_gset1
006B 9508 RET
_ReadRTC_Byte:
redata --> R20
address --> R20
006C D058 RCALL push_gset1
006D 2F40 MOV R20,R16
(0045) }
(0046)
(0047)
(0048)
(0049)
(0050) uint ReadRTC_Byte(uchar address)
(0051) {
(0052) unsigned char redata;
(0053)
(0054) Clr_ds1302_rst;//ds1302_rst = 0;
006E 98AB CBI 0x15,3
(0055) Clr_ds1302_clk;//ds1302_clk = 0;
006F 98A9 CBI 0x15,1
(0056) Set_ds1302_rst;//ds1302_rst = 1;
0070 9AAB SBI 0x15,3
(0057) Write_bit(address);
0071 2F04 MOV R16,R20
0072 2711 CLR R17
0073 D017 RCALL _Write_bit
(0058) redata=Read_bit();
0074 D02A RCALL _Read_bit
0075 2F40 MOV R20,R16
(0059) Clr_ds1302_rst;//ds1302_rst = 0;
0076 98AB CBI 0x15,3
(0060) Set_ds1302_clk;//ds1302_clk = 1;
0077 9AA9 SBI 0x15,1
(0061) return redata;
0078 2711 CLR R17
0079 D04E RCALL pop_gset1
007A 9508 RET
_WriteRTC_Byte:
number --> R20
address --> R22
007B D047 RCALL push_gset2
007C 2F42 MOV R20,R18
007D 2F60 MOV R22,R16
(0062) }
(0063)
(0064) void WriteRTC_Byte(uchar address,uchar number)
(0065) {
(0066) Clr_ds1302_clk;//ds1302_clk = 0;
007E 98A9 CBI 0x15,1
(0067) Clr_ds1302_rst;// ds1302_rst = 0;
007F 98AB CBI 0x15,3
(0068) Set_ds1302_rst;//ds1302_rst = 1;
0080 9AAB SBI 0x15,3
(0069) Write_bit(address);
0081 2F06 MOV R16,R22
0082 2711 CLR R17
0083 D007 RCALL _Write_bit
(0070) Write_bit(number);
0084 2F04 MOV R16,R20
0085 2711 CLR R17
0086 D004 RCALL _Write_bit
(0071) Clr_ds1302_rst;//ds1302_rst = 0;
0087 98AB CBI 0x15,3
(0072) Set_ds1302_clk;//ds1302_clk = 1;
0088 9AA9 SBI 0x15,1
0089 D02F RCALL pop_gset2
008A 9508 RET
_Write_bit:
i --> R20
addr --> R16
008B D039 RCALL push_gset1
(0073) }
(0074)
(0075)
(0076)
(0077)
(0078)
(0079) void Write_bit (uchar addr)
(0080) {
(0081) uchar i=0;
008C 2744 CLR R20
(0082) for(i=8;i>0;i--){
008D E048 LDI R20,0x8
008E C00B RJMP 0x009A
(0083) if((addr&0x01)==0x01)
008F 2F80 MOV R24,R16
0090 7081 ANDI R24,1
0091 3081 CPI R24,1
0092 F411 BNE 0x0095
(0084) Set_ds1302_data;//ds1302_dat = 1;
0093 9AAA SBI 0x15,2
0094 C001 RJMP 0x0096
(0085) else
(0086) Clr_ds1302_data;//ds1302_dat = 0;
0095 98AA CBI 0x15,2
(0087) Set_ds1302_clk;//ds1302_clk=1;
0096 9AA9 SBI 0x15,1
(0088) Clr_ds1302_clk;//ds1302_clk=0;
0097 98A9 CBI 0x15,1
(0089) addr>>=1;
0098 9506 LSR R16
0099 954A DEC R20
009A 2422 CLR R2
009B 1624 CP R2,R20
009C F390 BCS 0x008F
009D D02A RCALL pop_gset1
009E 9508 RET
_Read_bit:
data_r --> R20
num --> R22
i --> R10
009F D021 RCALL push_gset3
(0090) }
(0091) }
(0092)
(0093) uchar Read_bit ()
(0094) {
(0095) uchar i=0,num;
00A0 24AA CLR R10
(0096) uchar data_r=0;
00A1 2744 CLR R20
(0097) Delayus(2);
00A2 E002 LDI R16,2
00A3 DF8D RCALL _Delayus
(0098) //ds1302_dat = 1;
(0099) Set_ds1302_data;
00A4 9AAA SBI 0x15,2
(0100) data_in;
00A5 98A2 CBI 0x14,2
(0101) for(i=8;i>0;i--){
00A6 E088 LDI R24,0x8
00A7 2EA8 MOV R10,R24
00A8 C009 RJMP 0x00B2
(0102) data_r>>=1;
00A9 9546 LSR R20
(0103)
(0104) num=PINC&0x04;
00AA B363 IN R22,0x13
00AB 7064 ANDI R22,4
(0105) if(num == 1)
00AC 3061 CPI R22,1
00AD F409 BNE 0x00AF
(0106) {
(0107) data_r|=0x80;
00AE 6840 ORI R20,0x80
(0108) }
(0109) Set_ds1302_clk;//ds1302_clk = 1;
00AF 9AA9 SBI 0x15,1
(0110) Clr_ds1302_clk;//ds1302_clk = 0;
00B0 98A9 CBI 0x15,1
00B1 94AA DEC R10
00B2 2422 CLR R2
00B3 142A CP R2,R10
00B4 F3A0 BCS 0x00A9
(0111) }
(0112) return data_r;
00B5 2F04 MOV R16,R20
00B6 D004 RCALL pop_gset3
00B7 9508 RET
(0113) }
(0114)
(0115) main()
(0116) {}FILE: <library>
_main:
00B8 9508 RET
pop_gset2:
00B9 E0E2 LDI R30,2
00BA C00E RJMP pop
pop_gset3:
00BB E0E4 LDI R30,4
00BC C00C RJMP pop
push_gset5:
00BD 92FA ST R15,-Y
00BE 92EA ST R14,-Y
push_gset4:
00BF 92DA ST R13,-Y
00C0 92CA ST R12,-Y
push_gset3:
00C1 92BA ST R11,-Y
00C2 92AA ST R10,-Y
push_gset2:
00C3 937A ST R23,-Y
00C4 936A ST R22,-Y
push_gset1:
00C5 935A ST R21,-Y
00C6 934A ST R20,-Y
00C7 9508 RET
pop_gset1:
00C8 E0E1 LDI R30,1
pop:
00C9 9149 LD R20,Y+
00CA 9159 LD R21,Y+
00CB FDE0 SBRC R30,0
00CC 9508 RET
00CD 9169 LD R22,Y+
00CE 9179 LD R23,Y+
00CF FDE1 SBRC R30,1
00D0 9508 RET
00D1 90A9 LD R10,Y+
00D2 90B9 LD R11,Y+
00D3 FDE2 SBRC R30,2
00D4 9508 RET
00D5 90C9 LD R12,Y+
00D6 90D9 LD R13,Y+
00D7 FDE3 SBRC R30,3
00D8 9508 RET
00D9 90E9 LD R14,Y+
00DA 90F9 LD R15,Y+
00DB 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -