📄 mnet.lss
字号:
5e2: 8d e1 ldi r24, 0x1D ; 29
5e4: 85 bd out 0x25, r24 ; 37
OCR2 =75; // 8 * N = 100us
5e6: 8b e4 ldi r24, 0x4B ; 75
5e8: 83 bd out 0x23, r24 ; 35
TCNT2 =0;
5ea: 14 bc out 0x24, r1 ; 36
//8816 初始状态
SetBit(PORTD,Reset8816); //所有数据都复原为逻辑“0”,使所有交叉点开关断开
5ec: 94 9a sbi 0x12, 4 ; 18
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
5ee: 31 97 sbiw r30, 0x01 ; 1
5f0: f1 f7 brne .-4 ; 0x5ee <System_init+0x48>
_delay_ms(1000);
ClrBit(PORTD,Reset8816);
5f2: 94 98 cbi 0x12, 4 ; 18
Writesoundway(Connect_Busy,Busy_Voicd,ON);
5f4: 41 2f mov r20, r17
5f6: 6c e0 ldi r22, 0x0C ; 12
5f8: 86 e0 ldi r24, 0x06 ; 6
5fa: 0e 94 73 03 call 0x6e6 <Writesoundway>
Writesoundway(SigCallID,0,ON); //
5fe: 41 2f mov r20, r17
600: 60 e0 ldi r22, 0x00 ; 0
602: 83 e0 ldi r24, 0x03 ; 3
604: 0e 94 73 03 call 0x6e6 <Writesoundway>
Writesoundway(SigCallID,1,ON); //
608: 41 2f mov r20, r17
60a: 61 e0 ldi r22, 0x01 ; 1
60c: 83 e0 ldi r24, 0x03 ; 3
60e: 0e 94 73 03 call 0x6e6 <Writesoundway>
Writesoundway(SigCallID,2,ON); //
612: 41 2f mov r20, r17
614: 62 e0 ldi r22, 0x02 ; 2
616: 83 e0 ldi r24, 0x03 ; 3
618: 0e 94 73 03 call 0x6e6 <Writesoundway>
Writesoundway(SigCallID,3,ON); //
61c: 41 2f mov r20, r17
61e: 63 e0 ldi r22, 0x03 ; 3
620: 86 2f mov r24, r22
622: 0e 94 73 03 call 0x6e6 <Writesoundway>
Writesoundway(SigCallID,4,ON); //
626: 41 2f mov r20, r17
628: 64 e0 ldi r22, 0x04 ; 4
62a: 83 e0 ldi r24, 0x03 ; 3
62c: 0e 94 73 03 call 0x6e6 <Writesoundway>
Writesoundway(SigCallID,5,ON); //
630: 41 2f mov r20, r17
632: 65 e0 ldi r22, 0x05 ; 5
634: 83 e0 ldi r24, 0x03 ; 3
636: 0e 94 73 03 call 0x6e6 <Writesoundway>
63a: 1f 91 pop r17
63c: 08 95 ret
0000063e <main>:
63e: cf e5 ldi r28, 0x5F ; 95
640: d8 e0 ldi r29, 0x08 ; 8
642: de bf out 0x3e, r29 ; 62
644: cd bf out 0x3d, r28 ; 61
646: 0e 94 d3 02 call 0x5a6 <System_init>
64a: 88 e1 ldi r24, 0x18 ; 24
64c: 90 e0 ldi r25, 0x00 ; 0
64e: 2f e0 ldi r18, 0x0F ; 15
650: 0f b6 in r0, 0x3f ; 63
652: f8 94 cli
654: a8 95 wdr
656: 81 bd out 0x21, r24 ; 33
658: 0f be out 0x3f, r0 ; 63
65a: 21 bd out 0x21, r18 ; 33
65c: 78 94 sei
65e: 0e 94 63 1c call 0x38c6 <test>
662: 08 b6 in r0, 0x38 ; 56
664: 01 fe sbrs r0, 1
666: fd cf rjmp .-6 ; 0x662 <main+0x24>
668: 88 b7 in r24, 0x38 ; 56
66a: 82 60 ori r24, 0x02 ; 2
66c: 88 bf out 0x38, r24 ; 56
66e: 0e 94 7e 03 call 0x6fc <ExtTelCheck>
672: 0e 94 d5 03 call 0x7aa <OutsideTelRingCheck>
676: 0e 94 1c 04 call 0x838 <TelOperateLoop>
67a: 0e 94 5c 02 call 0x4b8 <fnOSCRingFK>
67e: 0e 94 76 01 call 0x2ec <fnMusic>
682: 80 91 bb 00 lds r24, 0x00BB
686: 8f 5f subi r24, 0xFF ; 255
688: 80 93 bb 00 sts 0x00BB, r24
68c: 88 3c cpi r24, 0xC8 ; 200
68e: 30 f0 brcs .+12 ; 0x69c <main+0x5e>
690: 10 92 bb 00 sts 0x00BB, r1
694: 85 b3 in r24, 0x15 ; 21
696: 91 e0 ldi r25, 0x01 ; 1
698: 89 27 eor r24, r25
69a: 85 bb out 0x15, r24 ; 21
69c: a8 95 wdr
69e: e1 cf rjmp .-62 ; 0x662 <main+0x24>
000006a0 <ConnectTowPoint>:
}
void ConnectTowPoint(unsigned char point_y,unsigned char point_x)
{
6a0: 96 2f mov r25, r22
unsigned char address,x,y;
address=0x00;
x=point_x&0x0f;
6a2: 9f 70 andi r25, 0x0F ; 15
y=point_y&0x07;
6a4: 87 70 andi r24, 0x07 ; 7
address=address|y;
address=address<<4;
6a6: 82 95 swap r24
6a8: 80 7f andi r24, 0xF0 ; 240
address=address|x;
6aa: 89 2b or r24, r25
address=address|0x80; //connect
6ac: 80 68 ori r24, 0x80 ; 128
DDRA=0xff; //PA7:D7 PA6:D6 PA5:D5 PA4:D4 PA3:D3 PA2:D2 PA1:D1 PA0:D0
6ae: 9f ef ldi r25, 0xFF ; 255
6b0: 9a bb out 0x1a, r25 ; 26
PORTA=address;
6b2: 8b bb out 0x1b, r24 ; 27
SetBit(PORTD,Storbe8816); //STROBE 脉冲的下降沿,数据被交替的写进存储器中
6b4: 96 9a sbi 0x12, 6 ; 18
nop();
6b6: 00 00 nop
nop();
6b8: 00 00 nop
ClrBit(PORTD,Storbe8816);
6ba: 96 98 cbi 0x12, 6 ; 18
DDRA=0x00; //PA7:D7 PA6:D6 PA5:D5 PA4:D4 PA3:D3 PA2:D2 PA1:D1 PA0:D0
6bc: 1a ba out 0x1a, r1 ; 26
PORTA=0xff;
6be: 8f ef ldi r24, 0xFF ; 255
6c0: 8b bb out 0x1b, r24 ; 27
6c2: 08 95 ret
000006c4 <CutTowPoint>:
}
void CutTowPoint(unsigned char point_y,unsigned char point_x)
{
6c4: 96 2f mov r25, r22
unsigned char address,x,y;
address=0x00;
x=point_x&0x0f;
6c6: 9f 70 andi r25, 0x0F ; 15
y=point_y&0x07;
6c8: 87 70 andi r24, 0x07 ; 7
address=address|y;
address=address<<4;
6ca: 82 95 swap r24
6cc: 80 7f andi r24, 0xF0 ; 240
address=address|x;
address=address&0x7f; //cut
6ce: 89 2b or r24, r25
DDRA=0xff; //PA7:D7 PA6:D6 PA5:D5 PA4:D4 PA3:D3 PA2:D2 PA1:D1 PA0:D0
6d0: 9f ef ldi r25, 0xFF ; 255
6d2: 9a bb out 0x1a, r25 ; 26
PORTA=address;
6d4: 8b bb out 0x1b, r24 ; 27
SetBit(PORTD,Storbe8816); //STROBE 脉冲的下降沿,数据被交替的写进存储器中
6d6: 96 9a sbi 0x12, 6 ; 18
nop();
6d8: 00 00 nop
nop();
6da: 00 00 nop
ClrBit(PORTD,Storbe8816);
6dc: 96 98 cbi 0x12, 6 ; 18
DDRA=0x00; //PA7:D7 PA6:D6 PA5:D5 PA4:D4 PA3:D3 PA2:D2 PA1:D1 PA0:D0
6de: 1a ba out 0x1a, r1 ; 26
PORTA=0xff;
6e0: 8f ef ldi r24, 0xFF ; 255
6e2: 8b bb out 0x1b, r24 ; 27
6e4: 08 95 ret
000006e6 <Writesoundway>:
6e6: 98 2f mov r25, r24
6e8: 4f 3f cpi r20, 0xFF ; 255
6ea: 21 f4 brne .+8 ; 0x6f4 <Writesoundway+0xe>
6ec: 89 2f mov r24, r25
6ee: 0e 94 50 03 call 0x6a0 <ConnectTowPoint>
6f2: 08 95 ret
6f4: 89 2f mov r24, r25
6f6: 0e 94 62 03 call 0x6c4 <CutTowPoint>
6fa: 08 95 ret
000006fc <ExtTelCheck>:
}
void ExtTelCheck(void) //分机摘机检测
{
6fc: cf 93 push r28
6fe: df 93 push r29
unsigned char i;
unsigned char Store_Flag;
unsigned char mRot;
ClrBit(PORTD,CheckHold_Ring); //扩展选择
700: 93 98 cbi 0x12, 3 ; 18
...
nop();nop();nop();nop();
ExtTelStateRd=PINA & 0x3f; //D7:Line2_RingCheck D6:Line1_RingCheck D5:Ext6_TelCheck D4:Ext5_TelCheck
70a: 99 b3 in r25, 0x19 ; 25
70c: 9f 73 andi r25, 0x3F ; 63
70e: 90 93 de 00 sts 0x00DE, r25
//D3:Ext4_TelCheck D2:Ext3_TelCheck D1:Ext2_TelCheck D0:Ext1_TelCheck
SetBit(PORTD,CheckHold_Ring);
712: 93 9a sbi 0x12, 3 ; 18
if(ExtTelStatePre!=ExtTelStateRd)
714: 80 91 d0 00 lds r24, 0x00D0
718: 89 17 cp r24, r25
71a: 19 f0 breq .+6 ; 0x722 <ExtTelCheck+0x26>
{
ExtTelStatePre=ExtTelStateRd; //更新寄存值
71c: 90 93 d0 00 sts 0x00D0, r25
return;
720: 41 c0 rjmp .+130 ; 0x7a4 <ExtTelCheck+0xa8>
}
mRot = 1;
722: 31 e0 ldi r19, 0x01 ; 1
for(i=0;i<cExtTelNum;i++)
724: 70 e0 ldi r23, 0x00 ; 0
726: b0 91 e3 00 lds r27, 0x00E3
72a: a8 2f mov r26, r24
72c: c8 ee ldi r28, 0xE8 ; 232
72e: d3 e0 ldi r29, 0x03 ; 3
730: 20 91 b5 00 lds r18, 0x00B5
734: 60 91 86 00 lds r22, 0x0086
738: 40 e0 ldi r20, 0x00 ; 0
73a: 50 e0 ldi r21, 0x00 ; 0
{
Store_Flag= ExtTelStateSave & mRot;
73c: 9b 2f mov r25, r27
73e: 93 23 and r25, r19
if(ExtTelStateRd & mRot)
740: 8a 2f mov r24, r26
742: 83 23 and r24, r19
744: 21 f0 breq .+8 ; 0x74e <ExtTelCheck+0x52>
{
if(Store_Flag)
746: 99 23 and r25, r25
748: f1 f4 brne .+60 ; 0x786 <ExtTelCheck+0x8a>
{//持续摘机.
ExtTelFlashState &= ~mRot; //清除闪断标志
}
else
{//摘机动作****************
ExtTelStateCheck|=mRot;
74a: 63 2b or r22, r19
74c: 1f c0 rjmp .+62 ; 0x78c <ExtTelCheck+0x90>
}
}
else
{
if(Store_Flag)
74e: 99 23 and r25, r25
750: 61 f0 breq .+24 ; 0x76a <ExtTelCheck+0x6e>
{//挂机动作****************
ExtTelFlashState|= mRot; //设置闪断标志
752: 23 2b or r18, r19
ExtTelStateCheck &= ~mRot; //挂机
754: 83 2f mov r24, r19
756: 80 95 com r24
758: 68 23 and r22, r24
SetFlashState[i]=1000; //闪断时间为1.5s
75a: fa 01 movw r30, r20
75c: e4 0f add r30, r20
75e: f5 1f adc r31, r21
760: ef 52 subi r30, 0x2F ; 47
762: ff 4f sbci r31, 0xFF ; 255
764: d1 83 std Z+1, r29 ; 0x01
766: c0 83 st Z, r28
768: 11 c0 rjmp .+34 ; 0x78c <ExtTelCheck+0x90>
}
else
{//持续挂机
if(SetFlashState[i])
76a: fa 01 movw r30, r20
76c: e4 0f add r30, r20
76e: f5 1f adc r31, r21
770: ef 52 subi r30, 0x2F ; 47
772: ff 4f sbci r31, 0xFF ; 255
774: 80 81 ld r24, Z
776: 91 81 ldd r25, Z+1 ; 0x01
778: 00 97 sbiw r24, 0x00 ; 0
77a: 41 f0 breq .+16 ; 0x78c <ExtTelCheck+0x90>
{
if(!(--SetFlashState[i]))
77c: 01 97 sbiw r24, 0x01 ; 1
77e: 91 83 std Z+1, r25 ; 0x01
780: 80 83 st Z, r24
782: 89 2b or r24, r25
784: 19 f4 brne .+6 ; 0x78c <ExtTelCheck+0x90>
{
ExtTelFlashState &= ~mRot; //清除闪断标志
786: 83 2f mov r24, r19
788: 80 95 com r24
78a: 28 23 and r18, r24
}
}
}
}
mRot<<= 1;
78c: 33 0f add r19, r19
78e: 7f 5f subi r23, 0xFF ; 255
790: 4f 5f subi r20, 0xFF ; 255
792: 5f 4f sbci r21, 0xFF ; 255
794: 76 30 cpi r23, 0x06 ; 6
796: 90 f2 brcs .-92 ; 0x73c <ExtTelCheck+0x40>
798: 60 93 86 00 sts 0x0086, r22
79c: 20 93 b5 00 sts 0x00B5, r18
}
ExtTelStateSave=ExtTelStateRd; //更新寄存值
7a0: a0 93 e3 00 sts 0x00E3, r26
7a4: df 91 pop r29
7a6: cf 91 pop r28
7a8: 08 95 ret
000007aa <OutsideTelRingCheck>:
}
void OutsideTelRingCheck(void) //外线振铃检测
{
7aa: cf 93 push r28
unsigned char i,mRot,Store_Flag;
ClrBit(PORTD,CheckHold_Ring); //扩展选择
7ac: 93 98 cbi 0x12, 3 ; 18
...
nop();nop();nop();nop();
OutsideRingRd=PINA & 0b11000000; //D7:Line2_RingCheck D6:Line1_RingCheck D5:Ext6_TelCheck D4:Ext5_TelCheck
7b6: 99 b3 in r25, 0x19 ; 25
OutsideRingRd >>= 6;
7b8: 92 95 swap r25
7ba: 96 95 lsr r25
7bc: 96 95 lsr r25
7be: 93 70 andi r25, 0x03 ; 3
7c0: 90 93 e4 00 sts 0x00E4, r25
//D3:Ext4_TelCheck D2:Ext3_TelCheck D1:Ext2_TelCheck D0:Ext1_TelCheck
SetBit(PORTD,CheckHold_Ring);
7c4: 93 9a sbi 0x12, 3 ; 18
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -