📄 main.lss
字号:
204: 94 9a sbi 0x12, 4 ; 18
206: 01 c0 rjmp .+2 ; 0x20a
}
else
{
cbi(DS1302_PORT, DS1302_IO);
208: 94 98 cbi 0x12, 4 ; 18
}
sbi(DS1302_PORT, DS1302_SCLK);
20a: 93 9a sbi 0x12, 3 ; 18
/* 8-bit count, 3 cycles/loop */
static __inline__ void
_delay_loop_1(uint8_t __count)
{
20c: 84 e0 ldi r24, 0x04 ; 4
asm volatile (
20e: 8a 95 dec r24
210: f1 f7 brne .-4 ; 0x20e
_delay_loop_1(4);
cbi(DS1302_PORT, DS1302_SCLK);
212: 93 98 cbi 0x12, 3 ; 18
c >>= 1;
214: 96 95 lsr r25
216: 21 50 subi r18, 0x01 ; 1
218: 27 ff sbrs r18, 7
21a: f2 cf rjmp .-28 ; 0x200
21c: 08 95 ret
0000021e <DS1302_Read>:
}
}
unsigned char DS1302_Read(unsigned char addr)
{
unsigned char result;
cbi(DS1302_PORT, DS1302_RST);
21e: 95 98 cbi 0x12, 5 ; 18
cbi(DS1302_PORT, DS1302_SCLK);
220: 93 98 cbi 0x12, 3 ; 18
sbi(DS1302_PORT, DS1302_RST);
222: 95 9a sbi 0x12, 5 ; 18
cli();
224: f8 94 cli
_DS1302_WR_Byte(addr);
226: 0e 94 fe 00 call 0x1fc
result = _DS1302_RD_Byte();
22a: 0e 94 e8 00 call 0x1d0
sei();
22e: 78 94 sei
cbi(DS1302_PORT, DS1302_RST);
230: 95 98 cbi 0x12, 5 ; 18
return result;
}
232: 99 27 eor r25, r25
234: 08 95 ret
00000236 <DS1302_Write>:
void DS1302_Write(unsigned char addr, unsigned char value)
{
236: 1f 93 push r17
238: 16 2f mov r17, r22
cbi(DS1302_PORT, DS1302_RST);
23a: 95 98 cbi 0x12, 5 ; 18
cbi(DS1302_PORT, DS1302_SCLK);
23c: 93 98 cbi 0x12, 3 ; 18
sbi(DS1302_PORT, DS1302_RST);
23e: 95 9a sbi 0x12, 5 ; 18
cli();
240: f8 94 cli
_DS1302_WR_Byte(addr);
242: 0e 94 fe 00 call 0x1fc
_DS1302_WR_Byte(value);
246: 81 2f mov r24, r17
248: 0e 94 fe 00 call 0x1fc
sei();
24c: 78 94 sei
cbi(DS1302_PORT, DS1302_RST);
24e: 95 98 cbi 0x12, 5 ; 18
250: 1f 91 pop r17
252: 08 95 ret
00000254 <DS1302_Get_Time>:
}
void DS1302_Get_Time(unsigned char *hour, unsigned char *min, unsigned char *sec)
{
254: cf 92 push r12
256: df 92 push r13
258: ef 92 push r14
25a: ff 92 push r15
25c: 0f 93 push r16
25e: 1f 93 push r17
260: 8c 01 movw r16, r24
262: 7b 01 movw r14, r22
264: 6a 01 movw r12, r20
*hour = bcd2bin(DS1302_Read(DS1302_RD_HOUR));
266: 85 e8 ldi r24, 0x85 ; 133
268: 0e 94 0f 01 call 0x21e
26c: 0e 94 ab 00 call 0x156
270: f8 01 movw r30, r16
272: 80 83 st Z, r24
*min = bcd2bin(DS1302_Read(DS1302_RD_MINUTE));
274: 83 e8 ldi r24, 0x83 ; 131
276: 0e 94 0f 01 call 0x21e
27a: 0e 94 ab 00 call 0x156
27e: f7 01 movw r30, r14
280: 80 83 st Z, r24
*sec = bcd2bin(DS1302_Read(DS1302_RD_SECOND));
282: 81 e8 ldi r24, 0x81 ; 129
284: 0e 94 0f 01 call 0x21e
288: 0e 94 ab 00 call 0x156
28c: f6 01 movw r30, r12
28e: 80 83 st Z, r24
290: 1f 91 pop r17
292: 0f 91 pop r16
294: ff 90 pop r15
296: ef 90 pop r14
298: df 90 pop r13
29a: cf 90 pop r12
29c: 08 95 ret
0000029e <DS1302_Set_Time>:
}
void DS1302_Set_Time(unsigned char hour, unsigned char min, unsigned char sec)
{
29e: ff 92 push r15
2a0: 0f 93 push r16
2a2: 1f 93 push r17
2a4: 18 2f mov r17, r24
2a6: 06 2f mov r16, r22
2a8: f4 2e mov r15, r20
DS1302_Write(DS1302_WR_CTRL, 0x00);
2aa: 60 e0 ldi r22, 0x00 ; 0
2ac: 8e e8 ldi r24, 0x8E ; 142
2ae: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_HOUR, bin2bcd(hour));
2b2: 81 2f mov r24, r17
2b4: 0e 94 cd 00 call 0x19a
2b8: 68 2f mov r22, r24
2ba: 84 e8 ldi r24, 0x84 ; 132
2bc: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_CTRL, 0x00);
2c0: 60 e0 ldi r22, 0x00 ; 0
2c2: 8e e8 ldi r24, 0x8E ; 142
2c4: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_MINUTE, bin2bcd(min));
2c8: 80 2f mov r24, r16
2ca: 0e 94 cd 00 call 0x19a
2ce: 68 2f mov r22, r24
2d0: 82 e8 ldi r24, 0x82 ; 130
2d2: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_CTRL, 0x00);
2d6: 60 e0 ldi r22, 0x00 ; 0
2d8: 8e e8 ldi r24, 0x8E ; 142
2da: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_SECOND, bin2bcd(sec));
2de: 8f 2d mov r24, r15
2e0: 0e 94 cd 00 call 0x19a
2e4: 68 2f mov r22, r24
2e6: 80 e8 ldi r24, 0x80 ; 128
2e8: 0e 94 1b 01 call 0x236
2ec: 1f 91 pop r17
2ee: 0f 91 pop r16
2f0: ff 90 pop r15
2f2: 08 95 ret
000002f4 <DS1302_Get_Date>:
}
void DS1302_Get_Date(unsigned char *year, unsigned char *month, unsigned char *day, unsigned char *week)
{
2f4: af 92 push r10
2f6: bf 92 push r11
2f8: cf 92 push r12
2fa: df 92 push r13
2fc: ef 92 push r14
2fe: ff 92 push r15
300: 0f 93 push r16
302: 1f 93 push r17
304: 8c 01 movw r16, r24
306: 7b 01 movw r14, r22
308: 6a 01 movw r12, r20
30a: 59 01 movw r10, r18
*year = bcd2bin(DS1302_Read(DS1302_RD_YEAR));
30c: 8d e8 ldi r24, 0x8D ; 141
30e: 0e 94 0f 01 call 0x21e
312: 0e 94 ab 00 call 0x156
316: f8 01 movw r30, r16
318: 80 83 st Z, r24
*month = bcd2bin(DS1302_Read(DS1302_RD_MONTH));
31a: 89 e8 ldi r24, 0x89 ; 137
31c: 0e 94 0f 01 call 0x21e
320: 0e 94 ab 00 call 0x156
324: f7 01 movw r30, r14
326: 80 83 st Z, r24
*day = bcd2bin(DS1302_Read(DS1302_RD_DAY));
328: 87 e8 ldi r24, 0x87 ; 135
32a: 0e 94 0f 01 call 0x21e
32e: 0e 94 ab 00 call 0x156
332: f6 01 movw r30, r12
334: 80 83 st Z, r24
*week = bcd2bin(DS1302_Read(DS1302_RD_WEEK));
336: 8b e8 ldi r24, 0x8B ; 139
338: 0e 94 0f 01 call 0x21e
33c: 0e 94 ab 00 call 0x156
340: f5 01 movw r30, r10
342: 80 83 st Z, r24
344: 1f 91 pop r17
346: 0f 91 pop r16
348: ff 90 pop r15
34a: ef 90 pop r14
34c: df 90 pop r13
34e: cf 90 pop r12
350: bf 90 pop r11
352: af 90 pop r10
354: 08 95 ret
00000356 <DS1302_Set_Date>:
}
void DS1302_Set_Date(unsigned char year, unsigned char month, unsigned char day, unsigned char week)
{
356: ef 92 push r14
358: ff 92 push r15
35a: 0f 93 push r16
35c: 1f 93 push r17
35e: 18 2f mov r17, r24
360: 06 2f mov r16, r22
362: f4 2e mov r15, r20
364: e2 2e mov r14, r18
DS1302_Write(DS1302_WR_CTRL, 0x00);
366: 60 e0 ldi r22, 0x00 ; 0
368: 8e e8 ldi r24, 0x8E ; 142
36a: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_YEAR, bin2bcd(year));
36e: 81 2f mov r24, r17
370: 0e 94 cd 00 call 0x19a
374: 68 2f mov r22, r24
376: 8c e8 ldi r24, 0x8C ; 140
378: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_CTRL, 0x00);
37c: 60 e0 ldi r22, 0x00 ; 0
37e: 8e e8 ldi r24, 0x8E ; 142
380: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_MONTH, bin2bcd(month));
384: 80 2f mov r24, r16
386: 0e 94 cd 00 call 0x19a
38a: 68 2f mov r22, r24
38c: 88 e8 ldi r24, 0x88 ; 136
38e: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_CTRL, 0x00);
392: 60 e0 ldi r22, 0x00 ; 0
394: 8e e8 ldi r24, 0x8E ; 142
396: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_DAY, bin2bcd(day));
39a: 8f 2d mov r24, r15
39c: 0e 94 cd 00 call 0x19a
3a0: 68 2f mov r22, r24
3a2: 86 e8 ldi r24, 0x86 ; 134
3a4: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_CTRL, 0x00);
3a8: 60 e0 ldi r22, 0x00 ; 0
3aa: 8e e8 ldi r24, 0x8E ; 142
3ac: 0e 94 1b 01 call 0x236
DS1302_Write(DS1302_WR_WEEK, bin2bcd(week));
3b0: 8e 2d mov r24, r14
3b2: 0e 94 cd 00 call 0x19a
3b6: 68 2f mov r22, r24
3b8: 8a e8 ldi r24, 0x8A ; 138
3ba: 0e 94 1b 01 call 0x236
3be: 1f 91 pop r17
3c0: 0f 91 pop r16
3c2: ff 90 pop r15
3c4: ef 90 pop r14
3c6: 08 95 ret
000003c8 <__vector_23>:
// USART0 Transmitter interrupt service routine
SIGNAL(SIG_USART0_TRANS)
{
3c8: 1f 92 push r1
3ca: 0f 92 push r0
3cc: 0f b6 in r0, 0x3f ; 63
3ce: 0f 92 push r0
3d0: 11 24 eor r1, r1
3d2: 8f 93 push r24
3d4: 9f 93 push r25
3d6: ef 93 push r30
3d8: ff 93 push r31
if (UART0.counter)
3da: 80 91 a4 01 lds r24, 0x01A4
3de: 88 23 and r24, r24
3e0: 99 f0 breq .+38 ; 0x408
{
--UART0.counter;
3e2: 81 50 subi r24, 0x01 ; 1
3e4: 80 93 a4 01 sts 0x01A4, r24
UDR0 = UART0.buffer[UART0.rd];
3e8: 90 91 a3 01 lds r25, 0x01A3
3ec: e9 2f mov r30, r25
3ee: ff 27 eor r31, r31
3f0: e2 5c subi r30, 0xC2 ; 194
3f2: fe 4f sbci r31, 0xFE ; 254
3f4: 80 81 ld r24, Z
3f6: 8c b9 out 0x0c, r24 ; 12
if (++UART0.rd == TX_BUFFER_SIZE0) UART0.rd = 0;
3f8: 89 2f mov r24, r25
3fa: 8f 5f subi r24, 0xFF ; 255
3fc: 80 93 a3 01 sts 0x01A3, r24
400: 84 36 cpi r24, 0x64 ; 100
402: 11 f4 brne .+4 ; 0x408
404: 10 92 a3 01 sts 0x01A3, r1
408: ff 91 pop r31
40a: ef 91 pop r30
40c: 9f 91 pop r25
40e: 8f 91 pop r24
410: 0f 90 pop r0
412: 0f be out 0x3f, r0 ; 63
414: 0f 90 pop r0
416: 1f 90 pop r1
418: 18 95 reti
0000041a <uart_putchar>:
}
}
int uart_putchar(char c)
{
41a: 28 2f mov r18, r24
41c: 90 91 a4 01 lds r25, 0x01A4
while (UART0.counter == TX_BUFFER_SIZE0);
420: 94 36 cpi r25, 0x64 ; 100
422: f1 f3 breq .-4 ; 0x420
cli();
424: f8 94 cli
if (UART0.counter || bit_is_clear(UCSR0A, UDRE0))
426: 99 23 and r25, r25
428: 11 f4 brne .+4 ; 0x42e
42a: 5d 99 sbic 0x0b, 5 ; 11
42c: 12 c0 rjmp .+36 ; 0x452
{
UART0.buffer[UART0.wr] = c;
42e: 80 91 a2 01 lds r24, 0x01A2
432: e8 2f mov r30, r24
434: ff 27 eor r31, r31
436: e2 5c subi r30, 0xC2 ; 194
438: fe 4f sbci r31, 0xFE ; 254
43a: 20 83 st Z, r18
if (++UART0.wr == TX_BUFFER_SIZE0) UART0.wr = 0;
43c: 8f 5f subi r24, 0xFF ; 255
43e: 80 93 a2 01 sts 0x01A2, r24
442: 84 36 cpi r24, 0x64 ; 100
444: 11 f4 brne .+4 ; 0x44a
446: 10 92 a2 01 sts 0x01A2, r1
++UART0.counter;
44a: 9f 5f subi r25, 0xFF ; 255
44c: 90 93 a4 01 sts 0x01A4, r25
450: 01 c0 rjmp .+2 ; 0x454
}
else
{
UDR0 = c;
452: 2c b9 out 0x0c, r18 ; 12
}
sei();
454: 78 94 sei
return 0;
}
456: 80 e0 ldi r24, 0x00 ; 0
458: 90 e0 ldi r25, 0x00 ; 0
45a: 08 95 ret
0000045c <InitIO>:
void InitIO(void)
{
UART0.rd = 0;
45c: 10 92 a3 01 sts 0x01A3, r1
UART0.wr = 0;
460: 10 92 a2 01 sts 0x01A2, r1
UART0.counter = 0;
464: 10 92 a4 01 sts 0x01A4, r1
// USART0 initialization
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -