📄 rtc.lss
字号:
252: 53 1f adc r21, r19
254: 8f 70 andi r24, 0x0F ; 15
256: 84 0f add r24, r20
return Time;
}
258: 99 27 eor r25, r25
25a: 08 95 ret
0000025c <DS1302TimeSet>:
//根据选择调整相应项目并写入DS1302
//****DS1302写入相应数据****
void DS1302TimeSet(UCHAR TimeReg,UCHAR sel)
{
25c: ef 92 push r14
25e: ff 92 push r15
260: 0f 93 push r16
262: 1f 93 push r17
264: cf 93 push r28
266: f8 2e mov r15, r24
268: e6 2e mov r14, r22
UCHAR item,ReadValue;
UCHAR max=0,min=0;
26a: 10 e0 ldi r17, 0x00 ; 0
26c: 01 2f mov r16, r17
switch(TimeReg)
26e: 99 27 eor r25, r25
270: 8a 38 cpi r24, 0x8A ; 138
272: 91 05 cpc r25, r1
274: 89 f1 breq .+98 ; 0x2d8 <DS1302TimeSet+0x7c>
276: 8b 38 cpi r24, 0x8B ; 139
278: 91 05 cpc r25, r1
27a: a4 f4 brge .+40 ; 0x2a4 <DS1302TimeSet+0x48>
27c: 84 38 cpi r24, 0x84 ; 132
27e: 91 05 cpc r25, r1
280: 81 f1 breq .+96 ; 0x2e2 <DS1302TimeSet+0x86>
282: 85 38 cpi r24, 0x85 ; 133
284: 91 05 cpc r25, r1
286: 3c f4 brge .+14 ; 0x296 <DS1302TimeSet+0x3a>
288: 80 38 cpi r24, 0x80 ; 128
28a: 91 05 cpc r25, r1
28c: 61 f1 breq .+88 ; 0x2e6 <DS1302TimeSet+0x8a>
28e: 82 38 cpi r24, 0x82 ; 130
290: 91 05 cpc r25, r1
292: 49 f1 breq .+82 ; 0x2e6 <DS1302TimeSet+0x8a>
294: 29 c0 rjmp .+82 ; 0x2e8 <DS1302TimeSet+0x8c>
296: 86 38 cpi r24, 0x86 ; 134
298: 91 05 cpc r25, r1
29a: e1 f0 breq .+56 ; 0x2d4 <DS1302TimeSet+0x78>
29c: 88 38 cpi r24, 0x88 ; 136
29e: 91 05 cpc r25, r1
2a0: b9 f0 breq .+46 ; 0x2d0 <DS1302TimeSet+0x74>
2a2: 22 c0 rjmp .+68 ; 0x2e8 <DS1302TimeSet+0x8c>
2a4: 82 3c cpi r24, 0xC2 ; 194
2a6: 91 05 cpc r25, r1
2a8: d1 f0 breq .+52 ; 0x2de <DS1302TimeSet+0x82>
2aa: 83 3c cpi r24, 0xC3 ; 195
2ac: 91 05 cpc r25, r1
2ae: 3c f4 brge .+14 ; 0x2be <DS1302TimeSet+0x62>
2b0: 8c 38 cpi r24, 0x8C ; 140
2b2: 91 05 cpc r25, r1
2b4: 59 f0 breq .+22 ; 0x2cc <DS1302TimeSet+0x70>
2b6: 80 3c cpi r24, 0xC0 ; 192
2b8: 91 05 cpc r25, r1
2ba: a9 f0 breq .+42 ; 0x2e6 <DS1302TimeSet+0x8a>
2bc: 15 c0 rjmp .+42 ; 0x2e8 <DS1302TimeSet+0x8c>
2be: 84 3c cpi r24, 0xC4 ; 196
2c0: 91 05 cpc r25, r1
2c2: 79 f0 breq .+30 ; 0x2e2 <DS1302TimeSet+0x86>
2c4: 86 3c cpi r24, 0xC6 ; 198
2c6: 91 05 cpc r25, r1
2c8: 71 f0 breq .+28 ; 0x2e6 <DS1302TimeSet+0x8a>
2ca: 0e c0 rjmp .+28 ; 0x2e8 <DS1302TimeSet+0x8c>
{
case DS_YEAR : max=99;min=0; break; //年
2cc: 13 e6 ldi r17, 0x63 ; 99
2ce: 0c c0 rjmp .+24 ; 0x2e8 <DS1302TimeSet+0x8c>
case DS_MONTH : max=12;min=1; break; //月
2d0: 1c e0 ldi r17, 0x0C ; 12
2d2: 03 c0 rjmp .+6 ; 0x2da <DS1302TimeSet+0x7e>
case DS_DAY : max=31;min=1; break; //日
2d4: 1f e1 ldi r17, 0x1F ; 31
2d6: 01 c0 rjmp .+2 ; 0x2da <DS1302TimeSet+0x7e>
case DS_WEEK : max= 7;min=1; break; //星期
2d8: 17 e0 ldi r17, 0x07 ; 7
2da: 01 e0 ldi r16, 0x01 ; 1
2dc: 05 c0 rjmp .+10 ; 0x2e8 <DS1302TimeSet+0x8c>
case DS_HOUR : max=23;min=0; break; //小时
case DS_MINUTE : max=59;min=0; break; //分钟
case DS_SECOND : max=59;min=0; break; //秒
case DS_LIGHT : max=59;min=0; break; //背光时间,最长1分钟
case DS_CLOCK_K: max= 1;min=0; break; //闹铃开关寄存器
2de: 11 e0 ldi r17, 0x01 ; 1
2e0: 03 c0 rjmp .+6 ; 0x2e8 <DS1302TimeSet+0x8c>
case DS_CLOCK_H: max=23;min=0; break; //闹铃时寄存器
2e2: 17 e1 ldi r17, 0x17 ; 23
2e4: 01 c0 rjmp .+2 ; 0x2e8 <DS1302TimeSet+0x8c>
case DS_CLOCK_M: max=59;min=0; break; //闹铃分寄存器
2e6: 1b e3 ldi r17, 0x3B ; 59
default: break;
}
ReadValue = ReadSet1302(TimeReg+1);
2e8: 8f 2d mov r24, r15
2ea: 8f 5f subi r24, 0xFF ; 255
2ec: 0e 94 c6 00 call 0x18c <ReadSet1302>
2f0: 28 2f mov r18, r24
item = ReadValue/16*10+ReadValue%16;
2f2: 98 2f mov r25, r24
2f4: 92 95 swap r25
2f6: 9f 70 andi r25, 0x0F ; 15
2f8: 8a e0 ldi r24, 0x0A ; 10
2fa: 98 9f mul r25, r24
2fc: c0 01 movw r24, r0
2fe: 11 24 eor r1, r1
300: c2 2f mov r28, r18
302: cf 70 andi r28, 0x0F ; 15
304: c8 0f add r28, r24
if(sel==0)
306: ee 20 and r14, r14
308: 29 f4 brne .+10 ; 0x314 <DS1302TimeSet+0xb8>
{
item++;
30a: cf 5f subi r28, 0xFF ; 255
if(item>max)
30c: 1c 17 cp r17, r28
30e: 38 f4 brcc .+14 ; 0x31e <DS1302TimeSet+0xc2>
item=min;
310: c0 2f mov r28, r16
312: 05 c0 rjmp .+10 ; 0x31e <DS1302TimeSet+0xc2>
}
else
{
if(item<=min)
314: 0c 17 cp r16, r28
316: 10 f0 brcs .+4 ; 0x31c <DS1302TimeSet+0xc0>
item=max+1;
318: c1 2f mov r28, r17
31a: cf 5f subi r28, 0xFF ; 255
item--;
31c: c1 50 subi r28, 0x01 ; 1
}
WriteSet1302(0x8e,0x00); //允许写操作
31e: 60 e0 ldi r22, 0x00 ; 0
320: 8e e8 ldi r24, 0x8E ; 142
322: 0e 94 ce 00 call 0x19c <WriteSet1302>
WriteSet1302(TimeReg,item/10*16+item%10); //写入DS1302 //转成BCD码
326: 8c 2f mov r24, r28
328: 6a e0 ldi r22, 0x0A ; 10
32a: 0e 94 3a 05 call 0xa74 <__udivmodqi4>
32e: 28 2f mov r18, r24
330: 33 27 eor r19, r19
332: 54 e0 ldi r21, 0x04 ; 4
334: 22 0f add r18, r18
336: 33 1f adc r19, r19
338: 5a 95 dec r21
33a: e1 f7 brne .-8 ; 0x334 <DS1302TimeSet+0xd8>
33c: 8c 2f mov r24, r28
33e: 0e 94 3a 05 call 0xa74 <__udivmodqi4>
342: 89 2f mov r24, r25
344: 82 0f add r24, r18
346: 68 2f mov r22, r24
348: 8f 2d mov r24, r15
34a: 0e 94 ce 00 call 0x19c <WriteSet1302>
WriteSet1302(0x8e,0x80); //写保护,禁止写操作
34e: 60 e8 ldi r22, 0x80 ; 128
350: 8e e8 ldi r24, 0x8E ; 142
352: 0e 94 ce 00 call 0x19c <WriteSet1302>
356: cf 91 pop r28
358: 1f 91 pop r17
35a: 0f 91 pop r16
35c: ff 90 pop r15
35e: ef 90 pop r14
360: 08 95 ret
00000362 <SPI_Init>:
#define DUMP 0xFF
void SPI_Init(void)
{
DDRB|= (1<<PB4)|(1<<PB5)|(1<<PB7); /* PB4:SS PB5:MOSI PB6:MISO PB7:SCK */
362: 87 b3 in r24, 0x17 ; 23
364: 80 6b ori r24, 0xB0 ; 176
366: 87 bb out 0x17, r24 ; 23
DDRB&=~(1<<PB6);
368: be 98 cbi 0x17, 6 ; 23
SPCR = (1<<SPE)|(1<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(0<<SPR0);/* DORD = 1 : LSB otherwise MSB */
36a: 80 e7 ldi r24, 0x70 ; 112
36c: 8d b9 out 0x0d, r24 ; 13
SPSR = (1<<SPI2X);
36e: 81 e0 ldi r24, 0x01 ; 1
370: 8e b9 out 0x0e, r24 ; 14
372: 08 95 ret
00000374 <SPI_Write>:
}
void SPI_Write(unsigned char Data)
{
SPDR=Data;
374: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR&0x80));
376: 77 9b sbis 0x0e, 7 ; 14
378: fe cf rjmp .-4 ; 0x376 <SPI_Write+0x2>
37a: 08 95 ret
0000037c <SPI_Read>:
}
unsigned char SPI_Read(void)
{
unsigned char Data;
DDRB&=~(1<<PB5);
37c: bd 98 cbi 0x17, 5 ; 23
SPDR=DUMP;
37e: 8f ef ldi r24, 0xFF ; 255
380: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR&0x80));
382: 77 9b sbis 0x0e, 7 ; 14
384: fe cf rjmp .-4 ; 0x382 <SPI_Read+0x6>
Data=SPDR;
386: 8f b1 in r24, 0x0f ; 15
DDRB|= (1<<PB5);
388: bd 9a sbi 0x17, 5 ; 23
return Data;
}
38a: 99 27 eor r25, r25
38c: 08 95 ret
0000038e <UART_Init>:
void UART_Init(void)
{
UCSRA = 0x00;
38e: 1b b8 out 0x0b, r1 ; 11
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
390: 88 e9 ldi r24, 0x98 ; 152
392: 8a b9 out 0x0a, r24 ; 10
UCSRC = (1<<7)|(1<<UCSZ1)|(1<<UCSZ0);
394: 86 e8 ldi r24, 0x86 ; 134
396: 80 bd out 0x20, r24 ; 32
UBRRH = UBRR>>8;
398: 10 bc out 0x20, r1 ; 32
UBRRL = UBRR&0xFF;
39a: 8c e0 ldi r24, 0x0C ; 12
39c: 89 b9 out 0x09, r24 ; 9
DDRD |= (1<<PD1)|(0<<PD0);
39e: 89 9a sbi 0x11, 1 ; 17
PORTD|= (1<<PD1)|(1<<PD0);
3a0: 82 b3 in r24, 0x12 ; 18
3a2: 83 60 ori r24, 0x03 ; 3
3a4: 82 bb out 0x12, r24 ; 18
3a6: 08 95 ret
000003a8 <UART_PutChar>:
}
void UART_PutChar(char c)
{
while(!(UCSRA&(1<<UDRE)));
3a8: 5d 9b sbis 0x0b, 5 ; 11
3aa: fe cf rjmp .-4 ; 0x3a8 <UART_PutChar>
UDR = c;
3ac: 8c b9 out 0x0c, r24 ; 12
3ae: 08 95 ret
000003b0 <UARTsendstream>:
}
/* Bellow is for printf function. If you want use this function, you must add the
* include file stdio.h and stdlib.h, then adjust your displayment stream fuinction
* to use with printf() and set output stream to it. If you want use the float number
* opreation, in the project option of the Libraries dialog box, you should add the
* library file libm.a and libprintf_flt.a.
* In the project option of the Custom Options dialog box, you should and Linker Options
* with <-Wl,-u,vfprintf -lprintf_flt>(except the <>). */
//adjust UART stream fuinction to use with printf()
static int UARTsendstream(char c , FILE *stream)
{
UART_PutChar(c);
3b0: 0e 94 d4 01 call 0x3a8 <UART_PutChar>
return 0;
}
3b4: 80 e0 ldi r24, 0x00 ; 0
3b6: 90 e0 ldi r25, 0x00 ; 0
3b8: 08 95 ret
000003ba <UART_Config>:
//----set output stream to LCD-------
static FILE uart_str = FDEV_SETUP_STREAM(UARTsendstream, NULL, _FDEV_SETUP_WRITE);
void UART_Config(void)
{
UART_Init();
3ba: 0e 94 c7 01 call 0x38e <UART_Init>
stdout = &uart_str;
3be: 8a e9 ldi r24, 0x9A ; 154
3c0: 90 e0 ldi r25, 0x00 ; 0
3c2: 90 93 b1 00 sts 0x00B1, r25
3c6: 80 93 b0 00 sts 0x00B0, r24
3ca: 08 95 ret
000003cc <printf>:
3cc: cf 93 push r28
3ce: df 93 push r29
3d0: cd b7 in r28, 0x3d ; 61
3d2: de b7 in r29, 0x3e ; 62
3d4: e5 e0 ldi r30, 0x05 ; 5
3d6: f0 e0 ldi r31, 0x00 ; 0
3d8: ec 0f add r30, r28
3da: fd 1f adc r31, r29
3dc: 81 91 ld r24, Z+
3de: 91 91 ld r25, Z+
3e0: af 01 movw r20, r30
3e2: bc 01 movw r22, r24
3e4: 80 91 b0 00 lds r24, 0x00B0
3e8: 90 91 b1 00 lds r25, 0x00B1
3ec: 0e 94 31 02 call 0x462 <vfprintf>
3f0: df 91 pop r29
3f2: cf 91 pop r28
3f4: 08 95 ret
000003f6 <puts>:
3f6: 0f 93 push r16
3f8: 1f 93 push r17
3fa: cf 93 push r28
3fc: df 93 push r29
3fe: ec 01 movw r28, r24
400: 00 e0 ldi r16, 0x00 ; 0
402: 10 e0 ldi r17, 0x00 ; 0
404: e0 91 b0 00 lds r30, 0x00B0
408: f0 91 b1 00 lds r31, 0x00B1
40c: 83 81 ldd r24, Z+3 ; 0x03
40e: 81 fd sbrc r24, 1
410: 03 c0 rjmp .+6 ; 0x418 <puts+0x22>
412: 8f ef ldi r24, 0xFF ; 255
414: 9f ef ldi r25, 0xFF ; 255
416: 20 c0 rjmp .+64 ; 0x458 <puts+0x62>
418: 89 91 ld r24, Y+
41a: 88 23 and r24, r24
41c: 71 f0 breq .+28 ; 0x43a <puts+0x44>
41e: e0 91 b0 00 lds r30, 0x00B0
422: f0 91 b1 00 lds r31, 0x00B1
426: 20 85 ldd r18, Z+8 ; 0x08
428: 31 85 ldd r19, Z+9 ; 0x09
42a: bf 01 movw r22, r30
42c: f9 01 movw r30, r18
42e: 09 95 icall
430: 89 2b or r24, r25
432: 91 f3 breq .-28 ; 0x418 <puts+0x22>
434: 0f ef ldi r16, 0xFF ; 255
436: 1f ef ldi r17, 0xFF ; 255
438: ef cf rjmp .-34 ; 0x418 <puts+0x22>
43a: e0 91 b0 00 lds r30, 0x00B0
43e: f0 91 b1 00 lds r31, 0x00B1
442: 20 85 ldd r18, Z+8 ; 0x08
444: 31 85 ldd r19, Z+9 ; 0x09
446: bf 01 movw r22, r30
448: 8a e0 ldi r24, 0x0A ; 10
44a: f9 01 movw r30, r18
44c: 09 95 icall
44e: 89 2b or r24, r25
450: 11 f0 breq .+4 ; 0x456 <puts+0x60>
452: 0f ef ldi r16, 0xFF ; 255
454: 1f ef ldi r17, 0xFF ; 255
456: c8 01 movw r24, r16
458: df 91 pop r29
45a: cf 91 pop r28
45c: 1f 91 pop r17
45e: 0f 91 pop r16
460: 08 95 ret
00000462 <vfprintf>:
462: 2f 92 push r2
464: 3f 92 push r3
466: 4f 92 push r4
468: 5f 92 push r5
46a: 6f 92 push r6
46c: 7f 92 push r7
46e: 8f 92 push r8
470: 9f 92 push r9
472: af 92 push r10
474: bf 92 push r11
476: cf 92 push r12
478: df 92 push r13
47a: ef 92 push r14
47c: ff 92 push r15
47e: 0f 93 push r16
480: 1f 93 push r17
482: cf 93 push r28
484: df 93 push r29
486: cd b7 in r28, 0x3d ; 61
488: de b7 in r29, 0x3e ; 62
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -