📄 demo_t1_clock.lss
字号:
16a: df 93 push r29
uchar i;
display_handle();
16c: 0e 94 6f 00 call 0xde ; 0xde <display_handle>
170: e4 e7 ldi r30, 0x74 ; 116
172: f0 e0 ldi r31, 0x00 ; 0
174: cb e6 ldi r28, 0x6B ; 107
176: d0 e0 ldi r29, 0x00 ; 0
178: a0 ea ldi r26, 0xA0 ; 160
17a: bf e0 ldi r27, 0x0F ; 15
for(i=0;i<8;i++)
{
PORTA=dis_data[i];
17c: 81 91 ld r24, Z+
17e: 8b bb out 0x1b, r24 ; 27
PORTC=disbeat_run[i];
180: 89 91 ld r24, Y+
182: 85 bb out 0x15, r24 ; 21
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
184: cd 01 movw r24, r26
186: 01 97 sbiw r24, 0x01 ; 1
188: f1 f7 brne .-4 ; 0x186 <display+0x1e>
18a: 80 e0 ldi r24, 0x00 ; 0
18c: ec 37 cpi r30, 0x7C ; 124
18e: f8 07 cpc r31, r24
190: a9 f7 brne .-22 ; 0x17c <display+0x14>
192: df 91 pop r29
194: cf 91 pop r28
196: 08 95 ret
00000198 <read_key>:
_delay_ms(2);
}
}
//键盘识别程序
void read_key()
{
198: 86 b3 in r24, 0x16 ; 22
19a: 8f 70 andi r24, 0x0F ; 15
19c: 8f 30 cpi r24, 0x0F ; 15
19e: 09 f4 brne .+2 ; 0x1a2 <read_key+0xa>
1a0: 40 c0 rjmp .+128 ; 0x222 <read_key+0x8a>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
1a2: 80 e2 ldi r24, 0x20 ; 32
1a4: 9e e4 ldi r25, 0x4E ; 78
1a6: 01 97 sbiw r24, 0x01 ; 1
1a8: f1 f7 brne .-4 ; 0x1a6 <read_key+0xe>
if((PINB&0x0f)!=0x0f)
{
_delay_ms(10);
switch(PINB&0x0f)
1aa: 86 b3 in r24, 0x16 ; 22
1ac: 99 27 eor r25, r25
1ae: 8f 70 andi r24, 0x0F ; 15
1b0: 90 70 andi r25, 0x00 ; 0
1b2: 8d 30 cpi r24, 0x0D ; 13
1b4: 91 05 cpc r25, r1
1b6: 81 f0 breq .+32 ; 0x1d8 <read_key+0x40>
1b8: 8e 30 cpi r24, 0x0E ; 14
1ba: 91 05 cpc r25, r1
1bc: 19 f0 breq .+6 ; 0x1c4 <read_key+0x2c>
1be: 0b 97 sbiw r24, 0x0b ; 11
1c0: 81 f5 brne .+96 ; 0x222 <read_key+0x8a>
1c2: 1d c0 rjmp .+58 ; 0x1fe <read_key+0x66>
{
case 0x0e:
seconds=0;
1c4: 10 92 7c 00 sts 0x007C, r1
1c8: 02 c0 rjmp .+4 ; 0x1ce <read_key+0x36>
while((PINB&0x0f)==0x0e)
{
display();
1ca: 0e 94 b4 00 call 0x168 ; 0x168 <display>
1ce: 86 b3 in r24, 0x16 ; 22
1d0: 8f 70 andi r24, 0x0F ; 15
1d2: 8e 30 cpi r24, 0x0E ; 14
1d4: d1 f3 breq .-12 ; 0x1ca <read_key+0x32>
1d6: 08 95 ret
}
break;//可以思考为什么在这里要放置display()函数
case 0x0d:
minutes++;
1d8: 80 91 7d 00 lds r24, 0x007D
1dc: 8f 5f subi r24, 0xFF ; 255
1de: 80 93 7d 00 sts 0x007D, r24
if(minutes==60){minutes=0;}
1e2: 80 91 7d 00 lds r24, 0x007D
1e6: 8c 33 cpi r24, 0x3C ; 60
1e8: 29 f4 brne .+10 ; 0x1f4 <read_key+0x5c>
1ea: 10 92 7d 00 sts 0x007D, r1
1ee: 02 c0 rjmp .+4 ; 0x1f4 <read_key+0x5c>
while((PINB&0x0f)==0x0d)
{
display();
1f0: 0e 94 b4 00 call 0x168 ; 0x168 <display>
1f4: 86 b3 in r24, 0x16 ; 22
1f6: 8f 70 andi r24, 0x0F ; 15
1f8: 8d 30 cpi r24, 0x0D ; 13
1fa: d1 f3 breq .-12 ; 0x1f0 <read_key+0x58>
1fc: 08 95 ret
}
break;
case 0x0b:
hours++;
1fe: 80 91 7e 00 lds r24, 0x007E
202: 8f 5f subi r24, 0xFF ; 255
204: 80 93 7e 00 sts 0x007E, r24
if(hours==60){hours=0;}
208: 80 91 7e 00 lds r24, 0x007E
20c: 8c 33 cpi r24, 0x3C ; 60
20e: 29 f4 brne .+10 ; 0x21a <read_key+0x82>
210: 10 92 7e 00 sts 0x007E, r1
214: 02 c0 rjmp .+4 ; 0x21a <read_key+0x82>
while((PINB&0x0f)==0x0b)
{
display();
216: 0e 94 b4 00 call 0x168 ; 0x168 <display>
21a: 86 b3 in r24, 0x16 ; 22
21c: 8f 70 andi r24, 0x0F ; 15
21e: 8b 30 cpi r24, 0x0B ; 11
220: d1 f3 breq .-12 ; 0x216 <read_key+0x7e>
222: 08 95 ret
00000224 <__vector_6>:
}
break;
}
}
}
//定时器T1匹配中断A服务程序
//#pragma interrupt_handler timer1_compa_isr:8
//void timer1_compa_isr(void)
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
224: 1f 92 push r1
226: 0f 92 push r0
228: 0f b6 in r0, 0x3f ; 63
22a: 0f 92 push r0
22c: 11 24 eor r1, r1
22e: 8f 93 push r24
static uchar count=0;
count++;
230: 80 91 7f 00 lds r24, 0x007F
234: 8f 5f subi r24, 0xFF ; 255
236: 80 93 7f 00 sts 0x007F, r24
if(count==10)//有误差,需要重新计算
23a: 8a 30 cpi r24, 0x0A ; 10
23c: 19 f5 brne .+70 ; 0x284 <__vector_6+0x60>
{
count=0;
23e: 10 92 7f 00 sts 0x007F, r1
seconds++;
242: 80 91 7c 00 lds r24, 0x007C
246: 8f 5f subi r24, 0xFF ; 255
248: 80 93 7c 00 sts 0x007C, r24
if(seconds==60)
24c: 80 91 7c 00 lds r24, 0x007C
250: 8c 33 cpi r24, 0x3C ; 60
252: c1 f4 brne .+48 ; 0x284 <__vector_6+0x60>
{
seconds=0;
254: 10 92 7c 00 sts 0x007C, r1
minutes++;
258: 80 91 7d 00 lds r24, 0x007D
25c: 8f 5f subi r24, 0xFF ; 255
25e: 80 93 7d 00 sts 0x007D, r24
if(minutes==60)
262: 80 91 7d 00 lds r24, 0x007D
266: 8c 33 cpi r24, 0x3C ; 60
268: 69 f4 brne .+26 ; 0x284 <__vector_6+0x60>
{
minutes=0;
26a: 10 92 7d 00 sts 0x007D, r1
hours++;
26e: 80 91 7e 00 lds r24, 0x007E
272: 8f 5f subi r24, 0xFF ; 255
274: 80 93 7e 00 sts 0x007E, r24
if(hours==24)
278: 80 91 7e 00 lds r24, 0x007E
27c: 88 31 cpi r24, 0x18 ; 24
27e: 11 f4 brne .+4 ; 0x284 <__vector_6+0x60>
{
hours=0;
280: 10 92 7e 00 sts 0x007E, r1
284: 8f 91 pop r24
286: 0f 90 pop r0
288: 0f be out 0x3f, r0 ; 63
28a: 0f 90 pop r0
28c: 1f 90 pop r1
28e: 18 95 reti
00000290 <main>:
}
}
}
}
}
void main()
{
290: 0e 94 61 00 call 0xc2 ; 0xc2 <init_devices>
init_devices();
while(1)
{
read_key();
294: 0e 94 cc 00 call 0x198 ; 0x198 <read_key>
display();
298: 0e 94 b4 00 call 0x168 ; 0x168 <display>
29c: fb cf rjmp .-10 ; 0x294 <main+0x4>
0000029e <__udivmodqi4>:
29e: 99 1b sub r25, r25
2a0: 79 e0 ldi r23, 0x09 ; 9
2a2: 04 c0 rjmp .+8 ; 0x2ac <__udivmodqi4_ep>
000002a4 <__udivmodqi4_loop>:
2a4: 99 1f adc r25, r25
2a6: 96 17 cp r25, r22
2a8: 08 f0 brcs .+2 ; 0x2ac <__udivmodqi4_ep>
2aa: 96 1b sub r25, r22
000002ac <__udivmodqi4_ep>:
2ac: 88 1f adc r24, r24
2ae: 7a 95 dec r23
2b0: c9 f7 brne .-14 ; 0x2a4 <__udivmodqi4_loop>
2b2: 80 95 com r24
2b4: 08 95 ret
000002b6 <_exit>:
2b6: ff cf rjmp .-2 ; 0x2b6 <_exit>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -