main.lss
来自「AT89C51开发例程 protues仿真 keil编程」· LSS 代码 · 共 1,298 行 · 第 1/3 页
LSS
1,298 行
22e: 81 30 cpi r24, 0x01 ; 1
230: e1 f4 brne .+56 ; 0x26a
{
time_dog++;
232: 80 91 80 00 lds r24, 0x0080
236: 8f 5f subi r24, 0xFF ; 255
238: 80 93 80 00 sts 0x0080, r24
if (time_dog<30)
23c: 8e 31 cpi r24, 0x1E ; 30
23e: 50 f4 brcc .+20 ; 0x254
{
dsp[1]&=0x7f;
240: 80 91 75 00 lds r24, 0x0075
244: 8f 77 andi r24, 0x7F ; 127
246: 80 93 75 00 sts 0x0075, r24
dsp[3]&=0x7f;
24a: 80 91 77 00 lds r24, 0x0077
24e: 8f 77 andi r24, 0x7F ; 127
250: 80 93 77 00 sts 0x0077, r24
}
if (dsp[5]!=dog_none)
254: 90 91 79 00 lds r25, 0x0079
258: 80 91 81 00 lds r24, 0x0081
25c: 98 17 cp r25, r24
25e: b1 f0 breq .+44 ; 0x28c
{
dog_none=dsp[5];
260: 90 93 81 00 sts 0x0081, r25
time_dog=0;
264: 10 92 80 00 sts 0x0080, r1
268: 11 c0 rjmp .+34 ; 0x28c
}
}
if(dsp_state==3) //在显示年月日时,在年月日之间显示一个点
26a: 83 30 cpi r24, 0x03 ; 3
26c: 61 f4 brne .+24 ; 0x286
{
mark=0;
26e: 70 e0 ldi r23, 0x00 ; 0
dsp[1]&=0x7f;
270: 80 91 75 00 lds r24, 0x0075
274: 8f 77 andi r24, 0x7F ; 127
276: 80 93 75 00 sts 0x0075, r24
dsp[3]&=0x7f;
27a: 80 91 77 00 lds r24, 0x0077
27e: 8f 77 andi r24, 0x7F ; 127
280: 80 93 77 00 sts 0x0077, r24
284: 03 c0 rjmp .+6 ; 0x28c
}
if(dsp_state==2)
286: 82 30 cpi r24, 0x02 ; 2
288: 09 f4 brne .+2 ; 0x28c
mark=5;
28a: 75 e0 ldi r23, 0x05 ; 5
28c: 61 e0 ldi r22, 0x01 ; 1
for(j=0;j<2;j++)
{
while(mark<6)
{ PORTC=0;
PORTC=dig[mark];
PORTB=dsp[mark];
_delay_ms(2);
mark++;
28e: 76 30 cpi r23, 0x06 ; 6
290: b8 f4 brcc .+46 ; 0x2c0
292: 24 ef ldi r18, 0xF4 ; 244
294: 31 e0 ldi r19, 0x01 ; 1
296: 40 e0 ldi r20, 0x00 ; 0
298: 50 e0 ldi r21, 0x00 ; 0
29a: 87 2f mov r24, r23
29c: 99 27 eor r25, r25
29e: dc 01 movw r26, r24
2a0: ac 58 subi r26, 0x8C ; 140
2a2: bf 4f sbci r27, 0xFF ; 255
2a4: fc 01 movw r30, r24
2a6: e0 5a subi r30, 0xA0 ; 160
2a8: ff 4f sbci r31, 0xFF ; 255
2aa: 15 ba out 0x15, r1 ; 21
2ac: 81 91 ld r24, Z+
2ae: 85 bb out 0x15, r24 ; 21
2b0: 8d 91 ld r24, X+
2b2: 88 bb out 0x18, r24 ; 24
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
2b4: c9 01 movw r24, r18
2b6: 01 97 sbiw r24, 0x01 ; 1
2b8: f1 f7 brne .-4 ; 0x2b6
2ba: 7f 5f subi r23, 0xFF ; 255
2bc: 76 30 cpi r23, 0x06 ; 6
2be: a8 f3 brcs .-22 ; 0x2aa
2c0: 61 50 subi r22, 0x01 ; 1
2c2: 67 ff sbrs r22, 7
2c4: e4 cf rjmp .-56 ; 0x28e
2c6: 08 95 ret
000002c8 <main>:
}
}
}
void main(void)
{
2c8: cf e5 ldi r28, 0x5F ; 95
2ca: d4 e0 ldi r29, 0x04 ; 4
2cc: de bf out 0x3e, r29 ; 62
2ce: cd bf out 0x3d, r28 ; 61
/**********初始化int1中断及键盘*******************/
DDRB=0xff;
2d0: cf ef ldi r28, 0xFF ; 255
2d2: c7 bb out 0x17, r28 ; 23
DDRD&=0x07;
2d4: 81 b3 in r24, 0x11 ; 17
2d6: 87 70 andi r24, 0x07 ; 7
2d8: 81 bb out 0x11, r24 ; 17
MCUCR|=(1<<ISC11);//下降沿触发
2da: 85 b7 in r24, 0x35 ; 53
2dc: 88 60 ori r24, 0x08 ; 8
2de: 85 bf out 0x35, r24 ; 53
MCUCR&=~(1<<ISC10);
2e0: 85 b7 in r24, 0x35 ; 53
2e2: 8b 7f andi r24, 0xFB ; 251
2e4: 85 bf out 0x35, r24 ; 53
GIFR&=~(1<<INTF1); //清中断标志
2e6: 8a b7 in r24, 0x3a ; 58
2e8: 8f 77 andi r24, 0x7F ; 127
2ea: 8a bf out 0x3a, r24 ; 58
SREG|=(1<<SREG_I); //全局中断
2ec: 8f b7 in r24, 0x3f ; 63
2ee: 80 68 ori r24, 0x80 ; 128
2f0: 8f bf out 0x3f, r24 ; 63
GICR|=(1<<INT1); //int1开中断
2f2: 8b b7 in r24, 0x3b ; 59
2f4: 80 68 ori r24, 0x80 ; 128
2f6: 8b bf out 0x3b, r24 ; 59
/*************************************************/
write_ds1302(0x90,0b10100101); //写充电寄存器
2f8: 65 ea ldi r22, 0xA5 ; 165
2fa: 80 e9 ldi r24, 0x90 ; 144
2fc: e6 de rcall .-564 ; 0xca
if ((in_byte(0x81)&0x80)!=0) //如果没有启动时钟,则启动时钟
2fe: 81 e8 ldi r24, 0x81 ; 129
300: f4 de rcall .-536 ; 0xea
302: 87 ff sbrs r24, 7
304: 03 c0 rjmp .+6 ; 0x30c
write_ds1302(0x80,0x00);
306: 60 e0 ldi r22, 0x00 ; 0
308: 80 e8 ldi r24, 0x80 ; 128
30a: df de rcall .-578 ; 0xca
dsp_state=1; //初始化显示时分秒
30c: 81 e0 ldi r24, 0x01 ; 1
30e: 80 93 82 00 sts 0x0082, r24
DDRB=0xff;
312: c7 bb out 0x17, r28 ; 23
DDRC=0xff;
314: c4 bb out 0x14, r28 ; 20
while (1)
{
SREG&=~(1<<SREG_I);//显示时,关中断
316: 8f b7 in r24, 0x3f ; 63
318: 8f 77 andi r24, 0x7F ; 127
31a: 8f bf out 0x3f, r24 ; 63
switch(dsp_state)
31c: 80 91 82 00 lds r24, 0x0082
320: 99 27 eor r25, r25
322: 82 30 cpi r24, 0x02 ; 2
324: 91 05 cpc r25, r1
326: b9 f0 breq .+46 ; 0x356
328: 83 30 cpi r24, 0x03 ; 3
32a: 91 05 cpc r25, r1
32c: 1c f4 brge .+6 ; 0x334
32e: 01 97 sbiw r24, 0x01 ; 1
330: 21 f0 breq .+8 ; 0x33a
332: 29 c0 rjmp .+82 ; 0x386
334: 03 97 sbiw r24, 0x03 ; 3
336: c1 f0 breq .+48 ; 0x368
338: 26 c0 rjmp .+76 ; 0x386
{
case 0: //直接显示dsp的值
break;
case 1: //显示时分秒
bcd_dsp[0]=in_byte(0x85)&0x3f;
33a: 85 e8 ldi r24, 0x85 ; 133
33c: d6 de rcall .-596 ; 0xea
33e: 8f 73 andi r24, 0x3F ; 63
340: 80 93 7a 00 sts 0x007A, r24
bcd_dsp[1]=in_byte(0x83)&0x7f;
344: 83 e8 ldi r24, 0x83 ; 131
346: d1 de rcall .-606 ; 0xea
348: 8f 77 andi r24, 0x7F ; 127
34a: 80 93 7b 00 sts 0x007B, r24
bcd_dsp[2]=in_byte(0x81)&0x7f;
34e: 81 e8 ldi r24, 0x81 ; 129
350: cc de rcall .-616 ; 0xea
352: 8f 77 andi r24, 0x7F ; 127
354: 15 c0 rjmp .+42 ; 0x380
bcd_change();
break;
case 2: //显示星期
bcd_dsp[0]=0;
356: 10 92 7a 00 sts 0x007A, r1
bcd_dsp[1]=0;
35a: 10 92 7b 00 sts 0x007B, r1
bcd_dsp[2]=(in_byte(0x8b)&0x07)-1;
35e: 8b e8 ldi r24, 0x8B ; 139
360: c4 de rcall .-632 ; 0xea
362: 87 70 andi r24, 0x07 ; 7
364: 81 50 subi r24, 0x01 ; 1
366: 0c c0 rjmp .+24 ; 0x380
bcd_change();
break;
case 3: //显示年月日
bcd_dsp[0]=in_byte(0x8d);
368: 8d e8 ldi r24, 0x8D ; 141
36a: bf de rcall .-642 ; 0xea
36c: 80 93 7a 00 sts 0x007A, r24
bcd_dsp[1]=in_byte(0x89)&0x1f;
370: 89 e8 ldi r24, 0x89 ; 137
372: bb de rcall .-650 ; 0xea
374: 8f 71 andi r24, 0x1F ; 31
376: 80 93 7b 00 sts 0x007B, r24
bcd_dsp[2]=in_byte(0x87)&0x3f;
37a: 87 e8 ldi r24, 0x87 ; 135
37c: b6 de rcall .-660 ; 0xea
37e: 8f 73 andi r24, 0x3F ; 63
380: 80 93 7c 00 sts 0x007C, r24
bcd_change();
384: ec de rcall .-552 ; 0x15e
break;
default:
break;
}
reflash();
386: 2a df rcall .-428 ; 0x1dc
SREG|=(1<<SREG_I); //显示完毕,开中断
388: 8f b7 in r24, 0x3f ; 63
38a: 80 68 ori r24, 0x80 ; 128
38c: 8f bf out 0x3f, r24 ; 63
38e: c3 cf rjmp .-122 ; 0x316
00000390 <__vector_2>:
}
}
/******************键盘中断*************************/
SIGNAL(SIG_INTERRUPT1)
{
390: 1f 92 push r1
392: 0f 92 push r0
394: 0f b6 in r0, 0x3f ; 63
396: 0f 92 push r0
398: 11 24 eor r1, r1
39a: 2f 93 push r18
39c: 3f 93 push r19
39e: 4f 93 push r20
3a0: 5f 93 push r21
3a2: 6f 93 push r22
3a4: 7f 93 push r23
3a6: 8f 93 push r24
3a8: 9f 93 push r25
3aa: af 93 push r26
3ac: bf 93 push r27
3ae: cf 93 push r28
3b0: ef 93 push r30
3b2: ff 93 push r31
char key,temp;
// _delay_ms(1); //此处为去抖动
temp=PIND;
3b4: 80 b3 in r24, 0x10 ; 16
if (temp&0xf0) //键有效
3b6: 80 7f andi r24, 0xF0 ; 240
3b8: 09 f0 breq .+2 ; 0x3bc
key=temp&0xf0;
3ba: c8 2f mov r28, r24
temp=PIND;
3bc: 80 b3 in r24, 0x10 ; 16
while(temp&0xf0)//等待键释放
temp=PIND;
3be: 80 7f andi r24, 0xF0 ; 240
3c0: e9 f7 brne .-6 ; 0x3bc
if (key==0x10&modify_state==0)//改变显示状态键:显示时分秒、年月日、星期
3c2: 80 e0 ldi r24, 0x00 ; 0
3c4: 90 e0 ldi r25, 0x00 ; 0
3c6: c0 31 cpi r28, 0x10 ; 16
3c8: 11 f4 brne .+4 ; 0x3ce
3ca: 81 e0 ldi r24, 0x01 ; 1
3cc: 90 e0 ldi r25, 0x00 ; 0
3ce: 20 e0 ldi r18, 0x00 ; 0
3d0: 30 e0 ldi r19, 0x00 ; 0
3d2: 40 91 73 00 lds r20, 0x0073
3d6: 44 23 and r20, r20
3d8: 11 f4 brne .+4 ; 0x3de
3da: 21 e0 ldi r18, 0x01 ; 1
3dc: 30 e0 ldi r19, 0x00 ; 0
3de: 82 23 and r24, r18
3e0: 93 23 and r25, r19
3e2: 89 2b or r24, r25
3e4: 51 f0 breq .+20 ; 0x3fa
{
dsp_state++;
3e6: 80 91 82 00 lds r24, 0x0082
3ea: 8f 5f subi r24, 0xFF ; 255
3ec: 80 93 82 00 sts 0x0082, r24
if (dsp_state>3)
3f0: 84 30 cpi r24, 0x04 ; 4
3f2: 18 f0 brcs .+6 ; 0x3fa
dsp_state=1;
3f4: 81 e0 ldi r24, 0x01 ; 1
3f6: 80 93 82 00 sts 0x0082, r24
}
if (key==0x20&modify_state!=0)//数据加键
3fa: 80 e0 ldi r24, 0x00 ; 0
3fc: 90 e0 ldi r25, 0x00 ; 0
3fe: c0 32 cpi r28, 0x20 ; 32
400: 11 f4 brne .+4 ; 0x406
402: 81 e0 ldi r24, 0x01 ; 1
404: 90 e0 ldi r25, 0x00 ; 0
406: 20 e0 ldi r18, 0x00 ; 0
408: 30 e0 ldi r19, 0x00 ; 0
40a: 44 23 and r20, r20
40c: 11 f0 breq .+4 ; 0x412
40e: 21 e0 ldi r18, 0x01 ; 1
410: 30 e0 ldi r19, 0x00 ; 0
412: 82 23 and r24, r18
414: 93 23 and r25, r19
416: 89 2b or r24, r25
418: b1 f0 breq .+44 ; 0x446
{
bcd_dsp[modify_bit]++;
41a: 80 91 72 00 lds r24, 0x0072
41e: a8 2f mov r26, r24
420: bb 27 eor r27, r27
422: fd 01 movw r30, r26
424: e6 58 subi r30, 0x86 ; 134
426: ff 4f sbci r31, 0xFF ; 255
428: 80 81 ld r24, Z
42a: 8f 5f subi r24, 0xFF ; 255
42c: 80 83 st Z, r24
if(bcd_dsp[modify_bit]>9)bcd_dsp[modify_bit]=0;
42e: 8a 30 cpi r24, 0x0A ; 10
430: 08 f0 brcs .+2 ; 0x434
432: 10 82 st Z, r1
dsp[modify_bit]=led[bcd_dsp[modify_bit]];
434: ac 58 subi r26, 0x8C ; 140
436: bf 4f sbci r27, 0xFF ; 255
438: 80 81 ld r24, Z
43a: e8 2f mov r30, r24
43c: ff 27 eor r31, r31
43e: ea 59 subi r30, 0x9A ; 154
440: ff 4f sbci r31, 0xFF ; 255
442: 80 81 ld r24, Z
444: 8c 93 st X, r24
}
if (key==0x40&modify_state!=0)//确认保存数据
446: 80 e0 ldi r24, 0x00 ; 0
448: 90 e0 ldi r25, 0x00 ; 0
44a: c0 34 cpi r28, 0x40 ; 64
44c: 11 f4 brne .+4 ; 0x452
44e: 81 e0 ldi r24, 0x01 ; 1
450: 90 e0 ldi r25, 0x00 ; 0
452: 20 e0 ldi r18, 0x00 ; 0
454: 30 e0 ldi r19, 0x00 ; 0
456: 44 23 and r20, r20
458: 11 f0 breq .+4 ; 0x45e
45a: 21 e0 ldi r18, 0x01 ; 1
45c: 30 e0 ldi r19, 0x00 ; 0
45e: 82 23 and r24, r18
460: 93 23 and r25, r19
462: 89 2b or r24, r25
464: 09 f4 brne .+2 ; 0x468
466: ff c0 rjmp .+510 ; 0x666
{
if (modify_state==3)
468: 43 30 cpi r20, 0x03 ; 3
46a: a1 f5 brne .+104 ; 0x4d4
{
write_ds1302(0x84,((bcd_dsp[0]<<4)|(bcd_dsp[1]&0xff)&0x3f));
46c: 80 91 7a 00 lds r24, 0x007A
470: 99 27 eor r25, r25
472: 74 e0 ldi r23, 0x04 ; 4
474: 88 0f add r24, r24
476: 99 1f adc r25, r25
478: 7a 95 dec r23
47a: e1 f7 brne .-8 ; 0x474
47c: 20 91 7b 00 lds r18, 0x007B
480: 2f 73 andi r18, 0x3F ; 63
482: 28 2b or r18, r24
484: 62 2f mov r22, r18
486: 84 e8 ldi r24, 0x84 ; 132
488: 20 de rcall .-960 ; 0xca
write_ds1302(0x82,((bcd_dsp[2]<<4)|(bcd_dsp[3]&0xff)&0x7F));
48a: 80 91 7c 00 lds r24, 0x007C
48e: 99 27 eor r25, r25
490: 64 e0 ldi r22, 0x04 ; 4
492: 88 0f add r24, r24
494: 99 1f adc r25, r25
496: 6a 95 dec r22
498: e1 f7 brne .-8 ; 0x492
49a: 20 91 7d 00 lds r18, 0x007D
49e: 2f 77 andi r18, 0x7F ; 127
4a0: 28 2b or r18, r24
4a2: 62 2f mov r22, r18
4a4: 82 e8 ldi r24, 0x82 ; 130
4a6: 11 de rcall .-990 ; 0xca
write_ds1302(0x80,((bcd_dsp[4]<<4)|(bcd_dsp[5]&0xff)&0x7f));
4a8: 80 91 7e 00 lds r24, 0x007E
4ac: 99 27 eor r25, r25
4ae: 54 e0 ldi r21, 0x04 ; 4
4b0: 88 0f add r24, r24
4b2: 99 1f adc r25, r25
4b4: 5a 95 dec r21
4b6: e1 f7 brne .-8 ; 0x4b0
4b8: 20 91 7f 00 lds r18, 0x007F
4bc: 2f 77 andi r18, 0x7F ; 127
4be: 28 2b or r18, r24
4c0: 62 2f mov r22, r18
4c2: 80 e8 ldi r24, 0x80 ; 128
4c4: 02 de rcall .-1020 ; 0xca
dsp_state=1;
4c6: 81 e0 ldi r24, 0x01 ; 1
4c8: 80 93 82 00 sts 0x0082, r24
modify_state=0;
4cc: 10 92 73 00 sts 0x0073, r1
modify_key=0;
4d0: 10 92 70 00 sts 0x0070, r1
}
if (modify_state==2)
4d4: 80 91 73 00 lds r24, 0x0073
4d8: 82 30 cpi r24, 0x02 ; 2
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?