📄 ds1302a.lst
字号:
248 rcall ds1302_write
249 /* epilogue: frame size=0 */
250 005c 65EA ret
251 005e 80E9 /* epilogue end (size=1) */
252 0060 00D0 /* function initialize_1302 size 10 (9) */
254 .Lscope5:
257 0066 00D0 .global ds1302_read
259 0068 0895 ds1302_read:
261 .LM32:
262 .LFBB6:
263 /* prologue: frame size=0 */
264 /* prologue end (size=0) */
266 .LM33:
267 cbi 50-0x20,5
127:../ds1302a/ds1302a.c **** }
128:../ds1302a/ds1302a.c ****
129:../ds1302a/ds1302a.c **** /********************************************************************
130:../ds1302a/ds1302a.c **** * 名称: read_1302
131:../ds1302a/ds1302a.c **** * 说明: 先写地址,后读命令/数据
132:../ds1302a/ds1302a.c **** * 功能: 读取DS1302某地址的数据
133:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte() , ds1302_read_a_byte()
134:../ds1302a/ds1302a.c **** * 输入: ucAddr: DS1302地址
135:../ds1302a/ds1302a.c **** * 返回值: ucDa :读取的数据
136:../ds1302a/ds1302a.c **** ***********************************************************************/
137:../ds1302a/ds1302a.c **** unsigned char ds1302_read(unsigned char ucAddr)
138:../ds1302a/ds1302a.c **** {
269 .LFBB6
270 .LM35:
271 sbi 50-0x20,5
273 .LM36:
139:../ds1302a/ds1302a.c **** unsigned char ucDa;
140:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
274 r24,lo8(1)
275 rcall ds1302_write_a_byte
141:../ds1302a/ds1302a.c **** //;;nop();
142:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK);
277 37:
278 rcall ds1302_read_a_byte
143:../ds1302a/ds1302a.c **** //;;nop();
144:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_RST);
280 38:
281 sbi 50-0x20,7
145:../ds1302a/ds1302a.c ****
146:../ds1302a/ds1302a.c ****
147:../ds1302a/ds1302a.c **** ds1302_write_a_byte(ucAddr|0x01); /* 地址,命令 */
283 39:
284 cbi 50-0x20,5
286 0072 00D0 .LM40:
148:../ds1302a/ds1302a.c ****
149:../ds1302a/ds1302a.c **** ucDa = ds1302_read_a_byte(); /* 读1Byte数据 */
287 r25,lo8(0)
288 /* epilogue: frame size=0 */
289 0074 00D0 ret
150:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_CLK);
290 epilogue end (size=1) */
291 /* function ds1302_read size 10 (9) */
151:../ds1302a/ds1302a.c **** //;;nop();
152:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
293 cope6:
153:../ds1302a/ds1302a.c ****
154:../ds1302a/ds1302a.c **** //;;nop();
155:../ds1302a/ds1302a.c **** return(ucDa);
156:../ds1302a/ds1302a.c **** }
296 obal v_BurstW1302T
298 007a 90E0 v_BurstW1302T:
300 007c 0895 .LM41:
301 .LFBB7:
302 /* prologue: frame size=0 */
303 push r17
304 push r28
305 push r29
306 /* prologue end (size=3) */
307 movw r28,r24
309 .LM42:
157:../ds1302a/ds1302a.c ****
158:../ds1302a/ds1302a.c **** /********************************************************************
159:../ds1302a/ds1302a.c **** * 名称: v_BurstW1302T
160:../ds1302a/ds1302a.c **** * 说明: 先写地址,后写数据(时钟多字节方式)
161:../ds1302a/ds1302a.c **** * 功能: 往DS1302写入时钟数据(多字节方式)
162:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte()
163:../ds1302a/ds1302a.c **** * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
164:../ds1302a/ds1302a.c **** * 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
165:../ds1302a/ds1302a.c **** * 返回值: 无
166:../ds1302a/ds1302a.c **** ***********************************************************************/
167:../ds1302a/ds1302a.c **** void v_BurstW1302T(unsigned char *pSecDa)
168:../ds1302a/ds1302a.c **** {
310 )
311 ldi r24,lo8(-114)
312 rcall ds1302_write
314 007e 1F93 .LM43:
315 0080 CF93 cbi 50-0x20,5
317 .LM44:
318 0084 EC01 cbi 50-0x20,7
169:../ds1302a/ds1302a.c **** unsigned char i;
170:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x00); // 控制命令,WP=0,写操作?
319 8,0,173,.LM45-.LFBB7
320 .LM45:
321 0086 60E0 sbi 50-0x20,5
323 008a 00D0 .LM46:
171:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
324 r24,lo8(-66)
325 rcall ds1302_write_a_byte
326 008c 9598 ldi r17,lo8(8)
172:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK);
327 7:
329 008e 9798 .LM47:
173:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_RST);
330 r24,Y+
331 rcall ds1302_write_a_byte
174:../ds1302a/ds1302a.c ****
175:../ds1302a/ds1302a.c **** ds1302_write_a_byte(0xbe); //0xbe:时钟多字节写命令
333 48:
334 subi r17,lo8(-(-1))
335 0092 8EEB brne .L27
337 0096 18E0 .LM49:
338 sbi 50-0x20,7
176:../ds1302a/ds1302a.c **** for (i=8;i>0;i--) //8Byte = 7Byte 时钟数据 + 1Byte 控制
177:../ds1302a/ds1302a.c **** {
178:../ds1302a/ds1302a.c **** ds1302_write_a_byte(*pSecDa);//写1Byte数据
339 n 68,0,182,.LM50-.LFBB7
340 .LM50:
341 0098 8991 cbi 50-0x20,5
342 009a 00D0 /* epilogue: frame size=0 */
343 pop r29
344 pop r28
345 009c 1150 pop r17
346 009e 01F4 ret
179:../ds1302a/ds1302a.c **** pSecDa++;
180:../ds1302a/ds1302a.c **** }
181:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_CLK);
347 gue end (size=4) */
348 /* function v_BurstW1302T size 24 (17) */
182:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
350 tabs "i:r(0,11)",64,0,0,17
353 .Lscope7:
356 00a8 1F91 .global v_BurstR1302T
358 v_BurstR1302T:
360 .LM51:
361 .LFBB8:
362 /* prologue: frame size=0 */
363 push r17
364 push r28
365 push r29
366 /* prologue end (size=3) */
367 movw r28,r24
369 .LM52:
183:../ds1302a/ds1302a.c **** }
184:../ds1302a/ds1302a.c ****
185:../ds1302a/ds1302a.c **** /********************************************************************
186:../ds1302a/ds1302a.c **** * 名称: v_BurstR1302T
187:../ds1302a/ds1302a.c **** * 说明: 先写地址,后读命令/数据(时钟多字节方式)
188:../ds1302a/ds1302a.c **** * 功能: 读取DS1302时钟数据
189:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte() , ds1302_read_a_byte()
190:../ds1302a/ds1302a.c **** * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
191:../ds1302a/ds1302a.c **** * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
192:../ds1302a/ds1302a.c **** * 返回值: ucDa :读取的数据
193:../ds1302a/ds1302a.c **** ***********************************************************************/
194:../ds1302a/ds1302a.c **** void v_BurstR1302T(unsigned char *pSecDa)
195:../ds1302a/ds1302a.c **** {
370 bn 68,0,199,.LM53-.LFBB8
371 .LM53:
372 cbi 50-0x20,7
374 00ac 1F93 .LM54:
375 00ae CF93 sbi 50-0x20,5
377 .LM55:
378 00b2 EC01 ldi r24,lo8(-65)
196:../ds1302a/ds1302a.c **** unsigned char i;
197:../ds1302a/ds1302a.c **** //DDRC=0xff;
198:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
379 1302_write_a_byte
380 ldi r17,lo8(8)
381 00b4 9598 .L33:
199:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK);
382 tabn 68,0,204,.LM56-.LFBB8
383 .LM56:
384 00b6 9798 rcall ds1302_read_a_byte
200:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_RST);
385 Y+,r24
387 00b8 959A .LM57:
201:../ds1302a/ds1302a.c **** ds1302_write_a_byte(0xbf); // 0xbf:时钟多字节读命令
388 bi r17,lo8(-(-1))
389 brne .L33
391 00bc 00D0 .LM58:
392 00be 18E0 sbi 50-0x20,7
202:../ds1302a/ds1302a.c **** for (i=8; i>0; i--)
203:../ds1302a/ds1302a.c **** {
204:../ds1302a/ds1302a.c **** *pSecDa = ds1302_read_a_byte(); // 读1Byte数据
394
395 cbi 50-0x20,5
396 00c0 00D0 /* epilogue: frame size=0 */
397 00c2 8993 pop r29
398 pop r28
399 pop r17
400 00c4 1150 ret
401 00c6 01F4 /* epilogue end (size=4) */
205:../ds1302a/ds1302a.c **** pSecDa++;
206:../ds1302a/ds1302a.c **** }
207:../ds1302a/ds1302a.c **** //DDRC=0xff;
208:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_CLK);
402 tion v_BurstR1302T size 21 (14) */
209:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
405 tabn 192,0,0,.LFBB8-.LFBB8
407 00ca 9598 .Lscope8:
410 00ce CF91 .global v_BurstW1302R
412 00d2 0895 v_BurstW1302R:
414 .LM60:
415 .LFBB9:
416 /* prologue: frame size=0 */
417 push r17
418 push r28
419 push r29
420 /* prologue end (size=3) */
421 movw r28,r24
423 .LM61:
424 ldi r22,lo8(0)
210:../ds1302a/ds1302a.c **** }
211:../ds1302a/ds1302a.c ****
212:../ds1302a/ds1302a.c **** /********************************************************************
213:../ds1302a/ds1302a.c **** * 名称: v_BurstW1302R
214:../ds1302a/ds1302a.c **** * 说明: 先写地址,后写数据(寄存器多字节方式)
215:../ds1302a/ds1302a.c **** * 功能: 往DS1302寄存器数写入数据(多字节方式)
216:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte()
217:../ds1302a/ds1302a.c **** * 输入: pReDa: 寄存器数据地址
218:../ds1302a/ds1302a.c **** * 返回值: 无
219:../ds1302a/ds1302a.c **** ***********************************************************************/
220:../ds1302a/ds1302a.c **** void v_BurstW1302R(unsigned char *pReDa)
221:../ds1302a/ds1302a.c **** {
425 rcall ds1302_write
427 .LM62:
428 cbi 50-0x20,5
430 00d6 CF93 .LM63:
431 00d8 DF93 cbi 50-0x20,7
433 00da EC01 .LM64:
222:../ds1302a/ds1302a.c **** unsigned char i;
223:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x00); // 控制命令,WP=0,写操作?
434 x20,5
436 00dc 60E0 .LM65:
437 00de 8EE8 ldi r24,lo8(-2)
438 00e0 00D0 rcall ds1302_write_a_byte
224:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
439 r17,lo8(31)
440 .L39:
225:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK);
442 66:
443 ld r24,Y+
444 00e4 9798 rcall ds1302_write_a_byte
226:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_RST);
445 tabn 68,0,228,.LM67-.LFBB9
446 .LM67:
447 00e6 959A subi r17,lo8(-(-1))
227:../ds1302a/ds1302a.c **** ds1302_write_a_byte(0xfe); //0xfe:寄存器多字节写命令
448 ne .L39
450 00e8 8EEF .LM68:
451 00ea 00D0 sbi 50-0x20,7
453 .LM69:
228:../ds1302a/ds1302a.c **** for (i=31;i>0;i--) //31Byte 寄存器数据
229:../ds1302a/ds1302a.c **** {
230:../ds1302a/ds1302a.c **** ds1302_write_a_byte(*pReDa); //写1Byte数据
454 0-0x20,5
455 /* epilogue: frame size=0 */
456 00ee 8991 pop r29
457 00f0 00D0 pop r28
458 pop r17
459 ret
460 00f2 1150 /* epilogue end (size=4) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -