📄 change.lss
字号:
464: 80 91 68 00 lds r24, 0x0068
468: 81 30 cpi r24, 0x01 ; 1
46a: 39 f4 brne .+14 ; 0x47a <__stack+0x1b>
{
if((ringtime%15)==0)
46c: 80 91 60 00 lds r24, 0x0060
470: 90 91 61 00 lds r25, 0x0061
474: 6f e0 ldi r22, 0x0F ; 15
476: 70 e0 ldi r23, 0x00 ; 0
478: 0a c0 rjmp .+20 ; 0x48e <__stack+0x2f>
L1_i;
}
else if(L_flash==2) //LED flash slow
47a: 80 91 68 00 lds r24, 0x0068
47e: 82 30 cpi r24, 0x02 ; 2
480: 69 f4 brne .+26 ; 0x49c <__stack+0x3d>
{
if((ringtime%50)==0)
482: 80 91 60 00 lds r24, 0x0060
486: 90 91 61 00 lds r25, 0x0061
48a: 62 e3 ldi r22, 0x32 ; 50
48c: 70 e0 ldi r23, 0x00 ; 0
48e: bf d1 rcall .+894 ; 0x80e <__udivmodhi4>
490: 89 2b or r24, r25
492: 21 f4 brne .+8 ; 0x49c <__stack+0x3d>
L1_i;
494: 88 b3 in r24, 0x18 ; 24
496: 90 e4 ldi r25, 0x40 ; 64
498: 89 27 eor r24, r25
49a: 88 bb out 0x18, r24 ; 24
}
if(lms)
49c: 80 91 69 00 lds r24, 0x0069
4a0: 88 23 and r24, r24
4a2: 51 f0 breq .+20 ; 0x4b8 <__stack+0x59>
{
lms--;
4a4: 80 91 69 00 lds r24, 0x0069
4a8: 81 50 subi r24, 0x01 ; 1
4aa: 80 93 69 00 sts 0x0069, r24
if(lms==0)
4ae: 80 91 69 00 lds r24, 0x0069
4b2: 88 23 and r24, r24
4b4: 09 f4 brne .+2 ; 0x4b8 <__stack+0x59>
L1_c; //time up turn off led
4b6: c6 98 cbi 0x18, 6 ; 24
4b8: bf 91 pop r27
4ba: af 91 pop r26
4bc: 9f 91 pop r25
4be: 8f 91 pop r24
4c0: 7f 91 pop r23
4c2: 6f 91 pop r22
4c4: 5f 91 pop r21
4c6: 2f 91 pop r18
4c8: 0f 90 pop r0
4ca: 0f be out 0x3f, r0 ; 63
4cc: 0f 90 pop r0
4ce: 1f 90 pop r1
4d0: 18 95 reti
000004d2 <__vector_1>:
}
}
SIGNAL(SIG_INTERRUPT0) //外线振铃
{
4d2: 1f 92 push r1
4d4: 0f 92 push r0
4d6: 0f b6 in r0, 0x3f ; 63
4d8: 0f 92 push r0
4da: 11 24 eor r1, r1
4dc: 8f 93 push r24
4de: 9f 93 push r25
if(ringcou<10)
4e0: 80 91 67 00 lds r24, 0x0067
4e4: 8a 30 cpi r24, 0x0A ; 10
4e6: 28 f4 brcc .+10 ; 0x4f2 <__vector_1+0x20>
ringcou++;
4e8: 80 91 67 00 lds r24, 0x0067
4ec: 8f 5f subi r24, 0xFF ; 255
4ee: 80 93 67 00 sts 0x0067, r24
ringcoutime=500; //设定为5S
4f2: 84 ef ldi r24, 0xF4 ; 244
4f4: 91 e0 ldi r25, 0x01 ; 1
4f6: 90 93 66 00 sts 0x0066, r25
4fa: 80 93 65 00 sts 0x0065, r24
4fe: 9f 91 pop r25
500: 8f 91 pop r24
502: 0f 90 pop r0
504: 0f be out 0x3f, r0 ; 63
506: 0f 90 pop r0
508: 1f 90 pop r1
50a: 18 95 reti
0000050c <__vector_2>:
}
SIGNAL(SIG_INTERRUPT1) //DTMF decode sussess cause this interrup
{
50c: 1f 92 push r1
50e: 0f 92 push r0
510: 0f b6 in r0, 0x3f ; 63
512: 0f 92 push r0
514: 11 24 eor r1, r1
516: 8f 93 push r24
518: 9f 93 push r25
51a: af 93 push r26
51c: bf 93 push r27
51e: ef 93 push r30
520: ff 93 push r31
uchar i;
lms=12; //turn on led for 120mS
522: 8c e0 ldi r24, 0x0C ; 12
524: 80 93 69 00 sts 0x0069, r24
L1_s;
528: c6 9a sbi 0x18, 6 ; 24
for(i=9;i;i--) //保存最近十次解码结果
52a: 99 e0 ldi r25, 0x09 ; 9
52c: a3 e7 ldi r26, 0x73 ; 115
52e: b0 e0 ldi r27, 0x00 ; 0
{
decode[i]=decode[i-1];
530: fd 01 movw r30, r26
532: 31 97 sbiw r30, 0x01 ; 1
534: 80 81 ld r24, Z
536: 8c 93 st X, r24
538: 91 50 subi r25, 0x01 ; 1
53a: df 01 movw r26, r30
53c: c9 f7 brne .-14 ; 0x530 <__vector_2+0x24>
}
decode[0]=PIND>>4; //读解码结果
53e: 80 b3 in r24, 0x10 ; 16
540: 82 95 swap r24
542: 8f 70 andi r24, 0x0F ; 15
544: 80 93 6a 00 sts 0x006A, r24
548: ff 91 pop r31
54a: ef 91 pop r30
54c: bf 91 pop r27
54e: af 91 pop r26
550: 9f 91 pop r25
552: 8f 91 pop r24
554: 0f 90 pop r0
556: 0f be out 0x3f, r0 ; 63
558: 0f 90 pop r0
55a: 1f 90 pop r1
55c: 18 95 reti
0000055e <clr_decode>:
}
void clr_decode(void) //解码数组全部填0
{
55e: ea e6 ldi r30, 0x6A ; 106
560: f0 e0 ldi r31, 0x00 ; 0
562: 89 e0 ldi r24, 0x09 ; 9
uchar i;
for(i=0;i<10;i++)
decode[i]=0;
564: 11 92 st Z+, r1
566: 81 50 subi r24, 0x01 ; 1
568: 87 ff sbrs r24, 7
56a: fc cf rjmp .-8 ; 0x564 <clr_decode+0x6>
56c: 08 95 ret
0000056e <test_hu>:
}
//检测哪个分机拿起了听筒, 但不检测num 号机,
uchar test_hu(uchar num) //若num为0则检查所有分机, 无返回0, 有返回分机号1-4
{
uchar i;
for(i=0;i<4;i++) //检测有没有分机拿起
56e: 40 e0 ldi r20, 0x00 ; 0
570: 68 2f mov r22, r24
572: 77 27 eor r23, r23
574: e8 e7 ldi r30, 0x78 ; 120
576: f0 e0 ldi r31, 0x00 ; 0
578: 20 e0 ldi r18, 0x00 ; 0
57a: 30 e0 ldi r19, 0x00 ; 0
{
if(hu[i]&&((i+1)!=num))
57c: 80 81 ld r24, Z
57e: 88 23 and r24, r24
580: 49 f0 breq .+18 ; 0x594 <test_hu+0x26>
582: c9 01 movw r24, r18
584: 01 96 adiw r24, 0x01 ; 1
586: 86 17 cp r24, r22
588: 97 07 cpc r25, r23
58a: 21 f0 breq .+8 ; 0x594 <test_hu+0x26>
{
return(i+1);
58c: 4f 5f subi r20, 0xFF ; 255
58e: 84 2f mov r24, r20
590: 99 27 eor r25, r25
592: 08 95 ret
594: 4f 5f subi r20, 0xFF ; 255
596: 2f 5f subi r18, 0xFF ; 255
598: 3f 4f sbci r19, 0xFF ; 255
59a: 31 96 adiw r30, 0x01 ; 1
59c: 44 30 cpi r20, 0x04 ; 4
59e: 70 f3 brcs .-36 ; 0x57c <test_hu+0xe>
}
}
return 0; //返回分机号
5a0: 80 e0 ldi r24, 0x00 ; 0
5a2: 90 e0 ldi r25, 0x00 ; 0
}
5a4: 08 95 ret
000005a6 <lock>:
void lock(uchar num) //封锁除num外的分机, 分机号为0则不取消封锁
{
if(num==0) //取消封锁
5a6: 88 23 and r24, r24
5a8: 29 f4 brne .+10 ; 0x5b4 <lock+0xe>
{
PH1_s;
5aa: ad 9a sbi 0x15, 5 ; 21
PH2_s;
5ac: c5 9a sbi 0x18, 5 ; 24
PH3_s;
5ae: c3 9a sbi 0x18, 3 ; 24
PH4_s;
5b0: c1 9a sbi 0x18, 1 ; 24
5b2: 08 95 ret
}
else if(num==1) //封锁2,3,4
5b4: 81 30 cpi r24, 0x01 ; 1
5b6: 11 f4 brne .+4 ; 0x5bc <lock+0x16>
{
PH2_c;
5b8: c5 98 cbi 0x18, 5 ; 24
5ba: 03 c0 rjmp .+6 ; 0x5c2 <lock+0x1c>
PH3_c;
PH4_c;
}
else if(num==2) //封锁1,3,4
5bc: 82 30 cpi r24, 0x02 ; 2
5be: 21 f4 brne .+8 ; 0x5c8 <lock+0x22>
{
PH1_c;
5c0: ad 98 cbi 0x15, 5 ; 21
PH3_c;
5c2: c3 98 cbi 0x18, 3 ; 24
PH4_c;
5c4: c1 98 cbi 0x18, 1 ; 24
5c6: 08 95 ret
}
else if(num==3) //封锁1,2,4
5c8: 83 30 cpi r24, 0x03 ; 3
5ca: 19 f4 brne .+6 ; 0x5d2 <lock+0x2c>
{
PH1_c;
5cc: ad 98 cbi 0x15, 5 ; 21
PH2_c;
5ce: c5 98 cbi 0x18, 5 ; 24
5d0: f9 cf rjmp .-14 ; 0x5c4 <lock+0x1e>
PH4_c;
}
else if(num==4) //封锁1,2,3
5d2: 84 30 cpi r24, 0x04 ; 4
5d4: 19 f4 brne .+6 ; 0x5dc <lock+0x36>
{
PH1_c;
5d6: ad 98 cbi 0x15, 5 ; 21
PH2_c;
5d8: c5 98 cbi 0x18, 5 ; 24
PH3_c;
5da: c3 98 cbi 0x18, 3 ; 24
5dc: 08 95 ret
000005de <main>:
}
}
int main(void)
{
5de: cf e5 ldi r28, 0x5F ; 95
5e0: d4 e0 ldi r29, 0x04 ; 4
5e2: de bf out 0x3e, r29 ; 62
5e4: cd bf out 0x3d, r28 ; 61
uchar i;
uchar num=0; //num # 分机拿起
uchar num1=0;
uchar calln=0; //被叫机号
s_ini();
5e6: 47 dd rcall .-1394 ; 0x76 <s_ini>
for(;;)
{
num=test_hu(0); //检查哪个分机拿起
5e8: 80 e0 ldi r24, 0x00 ; 0
5ea: c1 df rcall .-126 ; 0x56e <test_hu>
5ec: 08 2f mov r16, r24
if(num) //有分机拿起
5ee: 88 23 and r24, r24
5f0: 09 f4 brne .+2 ; 0x5f4 <main+0x16>
5f2: 97 c0 rjmp .+302 ; 0x722 <main+0x144>
{
L_flash=3;
5f4: 83 e0 ldi r24, 0x03 ; 3
5f6: 80 93 68 00 sts 0x0068, r24
L2_s;
5fa: c7 9a sbi 0x18, 7 ; 24
lock(num); //封锁除num外的分机
5fc: 80 2f mov r24, r16
5fe: d3 df rcall .-90 ; 0x5a6 <lock>
// UDR=num;
while(num==test_hu(0)) //直到放下听筒
600: 85 c0 rjmp .+266 ; 0x70c <main+0x12e>
{
if((decode[1]==8)&&(decode[0]>0&&decode[0]<5
602: 80 91 6b 00 lds r24, 0x006B
606: 88 30 cpi r24, 0x08 ; 8
608: d9 f5 brne .+118 ; 0x680 <main+0xa2>
60a: 80 91 6a 00 lds r24, 0x006A
60e: 88 23 and r24, r24
610: b9 f1 breq .+110 ; 0x680 <main+0xa2>
612: 80 91 6a 00 lds r24, 0x006A
616: 85 30 cpi r24, 0x05 ; 5
618: 98 f5 brcc .+102 ; 0x680 <main+0xa2>
61a: 80 91 6a 00 lds r24, 0x006A
61e: 80 17 cp r24, r16
620: 79 f1 breq .+94 ; 0x680 <main+0xa2>
&&decode[0]!=num)) //拨号条件, 不能打自己
{
calln=decode[0]; //保存被叫机号
622: 10 91 6a 00 lds r17, 0x006A
*(ringflag+(calln-1))=1; //响铃
626: c1 2f mov r28, r17
628: dd 27 eor r29, r29
62a: fe 01 movw r30, r28
62c: ed 58 subi r30, 0x8D ; 141
62e: ff 4f sbci r31, 0xFF ; 255
630: 81 e0 ldi r24, 0x01 ; 1
632: 80 83 st Z, r24
L_flash=1; //LED闪烁
634: 80 93 68 00 sts 0x0068, r24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -