📄 ds1302a.lst
字号:
1 .file "ds1302a.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
10 .text
11 .Ltext0:
70 .global nop
72 nop:
1:../ds1302a/ds1302a.c **** #include <avr/io.h>
2:../ds1302a/ds1302a.c **** #include <util/delay.h>
3:../ds1302a/ds1302a.c **** #define uchar unsigned char
4:../ds1302a/ds1302a.c **** #define uint unsigned int
5:../ds1302a/ds1302a.c **** #define T_CLK 7
6:../ds1302a/ds1302a.c **** #define T_IO 6
7:../ds1302a/ds1302a.c **** #define T_RST 5
8:../ds1302a/ds1302a.c **** /******************************************************************** */
9:../ds1302a/ds1302a.c **** #define SETBIT(x,y) (x|=(1<<y)) //set bit y in byte x
10:../ds1302a/ds1302a.c **** #define CLRBIT(x,y) (x&=(~(1<<y))) //clear bit y in byte x
11:../ds1302a/ds1302a.c **** #define CHKBIT(x,y) (x&(1<<y)) //check bit y in byte x
12:../ds1302a/ds1302a.c **** /******************************************************************** */
13:../ds1302a/ds1302a.c **** void ds1302_write(unsigned char , unsigned char);
14:../ds1302a/ds1302a.c **** uchar year=0;
15:../ds1302a/ds1302a.c **** uchar month=0;
16:../ds1302a/ds1302a.c **** uchar day=0;
17:../ds1302a/ds1302a.c **** uchar week=0;
18:../ds1302a/ds1302a.c **** uchar hour=0;
19:../ds1302a/ds1302a.c **** uchar minute=0;
20:../ds1302a/ds1302a.c **** uchar second=0;
21:../ds1302a/ds1302a.c **** unsigned char disp_table[16] ={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
22:../ds1302a/ds1302a.c **** 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
23:../ds1302a/ds1302a.c **** /*
24:../ds1302a/ds1302a.c **** 0x3f,
25:../ds1302a/ds1302a.c **** 0x06,
26:../ds1302a/ds1302a.c **** 0x5b,
27:../ds1302a/ds1302a.c **** 0x4f,
28:../ds1302a/ds1302a.c **** 0x66,
29:../ds1302a/ds1302a.c **** 0x6d,
30:../ds1302a/ds1302a.c **** 0x7d,
31:../ds1302a/ds1302a.c **** 0x07,
32:../ds1302a/ds1302a.c **** 0x7f,
33:../ds1302a/ds1302a.c **** 0x6f,
34:../ds1302a/ds1302a.c **** 0x77,
35:../ds1302a/ds1302a.c **** 0x7c,
36:../ds1302a/ds1302a.c **** 0x39,
37:../ds1302a/ds1302a.c **** 0x5e,
38:../ds1302a/ds1302a.c **** 0x79,
39:../ds1302a/ds1302a.c **** 0x71};
40:../ds1302a/ds1302a.c **** */
41:../ds1302a/ds1302a.c **** void nop(void)
42:../ds1302a/ds1302a.c **** {
73 * prologue end (size=0) */
74 /* epilogue: frame size=0 */
75 ret
76 /* epilogue end (size=1) */
77 /* function nop size 1 (0) */
79 0000 0895 .Lscope1:
82 .global ds1302_write_a_byte
84 ds1302_write_a_byte:
86 .LM1:
87 .LFBB2:
88 /* prologue: frame size=0 */
43:../ds1302a/ds1302a.c **** char i;
44:../ds1302a/ds1302a.c **** for (i=0;i<1;i++)
45:../ds1302a/ds1302a.c **** ;
46:../ds1302a/ds1302a.c **** }
47:../ds1302a/ds1302a.c ****
48:../ds1302a/ds1302a.c **** void initialize_1302(void)
49:../ds1302a/ds1302a.c **** {
50:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x00);
51:../ds1302a/ds1302a.c **** ds1302_write(0x90,0xA5);
52:../ds1302a/ds1302a.c **** ds1302_write(0x80,0x00);
53:../ds1302a/ds1302a.c **** }
54:../ds1302a/ds1302a.c **** /********************************************************************
55:../ds1302a/ds1302a.c **** * 名称: ds1302_write_a_byte
56:../ds1302a/ds1302a.c **** * 说明:
57:../ds1302a/ds1302a.c **** * 功能: 往DS1302写入1Byte数据
58:../ds1302a/ds1302a.c **** * 调用:
59:../ds1302a/ds1302a.c **** * 输入: ucDa 写入的数据
60:../ds1302a/ds1302a.c **** * 返回值: 无
61:../ds1302a/ds1302a.c **** ***********************************************************************/
62:../ds1302a/ds1302a.c **** void ds1302_write_a_byte(unsigned char ucDa)
63:../ds1302a/ds1302a.c **** {
89 (size=0) */
90 ldi r25,lo8(8)
91 .L4:
93 .LM2:
94 0002 98E0 cbi 50-0x20,7
64:../ds1302a/ds1302a.c **** unsigned char i;
65:../ds1302a/ds1302a.c **** for(i=8; i>0; i--)
66:../ds1302a/ds1302a.c **** {
67:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK);
96 sbrs r24,0
97 rjmp .L5
98 0004 9798 sbi 50-0x20,6
68:../ds1302a/ds1302a.c **** if (ucDa&1) SETBIT(PORTD,T_IO);
99 mp .L7
100 .L5:
102 0008 00C0 .LM4:
103 000a 969A cbi 50-0x20,6
104 000c 00C0 .L7:
69:../ds1302a/ds1302a.c **** else CLRBIT(PORTD,T_IO);
106 sbi 50-0x20,7
108 000e 9698 .LM6:
109 subi r25,lo8(-(-1))
70:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_CLK);
110 q .L10
112 0010 979A .LM7:
113 lsr r24
114 rjmp .L4
115 0012 9150 .L10:
116 0014 01F0 ret
71:../ds1302a/ds1302a.c **** ucDa>>=1;
117 ogue: frame size=0 */
118 /* epilogue: noreturn */
119 0016 8695 /* epilogue end (size=0) */
120 0018 00C0 /* function ds1302_write_a_byte size 14 (14) */
125 .Lscope2:
127 .global ds1302_read_a_byte
129 ds1302_read_a_byte:
131 .LM8:
132 .LFBB3:
133 /* prologue: frame size=0 */
134 /* prologue end (size=0) */
72:../ds1302a/ds1302a.c **** }
73:../ds1302a/ds1302a.c **** }
74:../ds1302a/ds1302a.c ****
75:../ds1302a/ds1302a.c **** /********************************************************************
76:../ds1302a/ds1302a.c **** *
77:../ds1302a/ds1302a.c **** * 名称: unsigned char ds1302_read_a_byte
78:../ds1302a/ds1302a.c **** * 说明:
79:../ds1302a/ds1302a.c **** * 功能: 从DS1302读取1Byte数据
80:../ds1302a/ds1302a.c **** * 调用:
81:../ds1302a/ds1302a.c **** * 输入:
82:../ds1302a/ds1302a.c **** * 返回值: t
83:../ds1302a/ds1302a.c **** ***********************************************************************/
84:../ds1302a/ds1302a.c **** unsigned char ds1302_read_a_byte(void)
85:../ds1302a/ds1302a.c **** {
136 6
138 .LM10:
139 cbi 50-0x20,6
140 ldi r25,lo8(8)
86:../ds1302a/ds1302a.c **** unsigned char i,t;
87:../ds1302a/ds1302a.c **** CLRBIT(DDRD,T_IO);
141
143 001c 8E98 .LM11:
88:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_IO);
144 sr r24
146 001e 9698 .LM12:
147 0020 98E0 sbi 50-0x20,7
89:../ds1302a/ds1302a.c **** for(i=8; i>0; i--)
90:../ds1302a/ds1302a.c **** {
91:../ds1302a/ds1302a.c **** t>>=1;
149 :
150 cbi 50-0x20,7
92:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_CLK);
152 14:
153 sbis 48-0x20,6
154 0024 979A rjmp .L13
93:../ds1302a/ds1302a.c **** nop();
94:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK);
155 i r24,lo8(-128)
156 rjmp .L15
157 0026 9798 .L13:
95:../ds1302a/ds1302a.c **** nop();
96:../ds1302a/ds1302a.c **** if(CHKBIT(PIND,T_IO)) t|=0x80;
158 tabn 68,0,97,.LM15-.LFBB3
159 .LM15:
160 0028 869B andi r24,lo8(127)
161 002a 00C0 .L15:
163 002e 00C0 .LM16:
164 subi r25,lo8(-(-1))
97:../ds1302a/ds1302a.c **** else t&= 0x7f;
165 L12
167 0030 8F77 .LM17:
168 sbi 49-0x20,6
170 .LM18:
171 0032 9150 ldi r25,lo8(0)
172 0034 01F4 /* epilogue: frame size=0 */
98:../ds1302a/ds1302a.c **** }
99:../ds1302a/ds1302a.c **** SETBIT(DDRD,T_IO);
173 epilogue end (size=1) */
174 /* function ds1302_read_a_byte size 17 (16) */
100:../ds1302a/ds1302a.c **** return(t);
101:../ds1302a/ds1302a.c **** }
176 tabs "i:r(0,11)",64,0,0,25
180 003a 0895 .Lscope3:
184 .global ds1302_write
186 ds1302_write:
188 .LM19:
189 .LFBB4:
190 /* prologue: frame size=0 */
191 push r17
192 /* prologue end (size=1) */
193 mov r17,r22
102:../ds1302a/ds1302a.c ****
103:../ds1302a/ds1302a.c ****
104:../ds1302a/ds1302a.c **** /********************************************************************
105:../ds1302a/ds1302a.c **** * 名称: write_1302
106:../ds1302a/ds1302a.c **** * 说明: 先写地址,后写命令/数据
107:../ds1302a/ds1302a.c **** * 功能: 往DS1302写入数据
108:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte()
109:../ds1302a/ds1302a.c **** * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
110:../ds1302a/ds1302a.c **** * 返回值: 无
111:../ds1302a/ds1302a.c **** ***********************************************************************/
112:../ds1302a/ds1302a.c **** void ds1302_write(unsigned char ucAddr, unsigned char ucDa)
113:../ds1302a/ds1302a.c **** {
195 ,5
197 .LM21:
198 cbi 50-0x20,7
200 .LM22:
201 003e 162F sbi 50-0x20,5
114:../ds1302a/ds1302a.c **** //DDRC=0xff;
115:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST); //T_RST=0
202 68,0,121,.LM23-.LFBB4
203 .LM23:
204 0040 9598 rcall ds1302_write_a_byte
116:../ds1302a/ds1302a.c **** //;;nop();
117:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK); //T_CLK=0;
205 tabn 68,0,122,.LM24-.LFBB4
206 .LM24:
207 0042 9798 cbi 50-0x20,7
118:../ds1302a/ds1302a.c **** //;;
119:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_RST); //T_RST=1
208 tabn 68,0,123,.LM25-.LFBB4
209 .LM25:
210 0044 959A mov r24,r17
120:../ds1302a/ds1302a.c **** nop();
121:../ds1302a/ds1302a.c **** ds1302_write_a_byte(ucAddr); /* 地址,命令 */
211 all ds1302_write_a_byte
213 0046 00D0 .LM26:
122:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK);
214 i 50-0x20,7
216 0048 9798 .LM27:
123:../ds1302a/ds1302a.c **** ds1302_write_a_byte(ucDa); /* 写1Byte数据*/
217 i 50-0x20,5
218 /* epilogue: frame size=0 */
219 004a 812F pop r17
220 004c 00D0 ret
124:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_CLK); //T_CLK=1
221 pilogue end (size=2) */
222 /* function ds1302_write size 13 (10) */
125:../ds1302a/ds1302a.c **** //;;nop();
126:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST); //T_RST=0
224 cope4:
226 0050 9598 .global initialize_1302
228 0052 1F91 initialize_1302:
230 .LM28:
231 .LFBB5:
232 /* prologue: frame size=0 */
233 /* prologue end (size=0) */
235 .LM29:
236 ldi r22,lo8(0)
237 ldi r24,lo8(-114)
238 rcall ds1302_write
240 .LM30:
241 ldi r22,lo8(-91)
242 ldi r24,lo8(-112)
243 rcall ds1302_write
245 0056 60E0 .LM31:
246 0058 8EE8 ldi r22,lo8(0)
247 005a 00D0 ldi r24,lo8(-128)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -