⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mnet.lss

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     9aa:	4b c0       	rjmp	.+150    	; 0xa42 <fnExt1_LinkLineOut_DTMF+0xf4>

	if (mDTMF_In == cXin)
     9ac:	8b 30       	cpi	r24, 0x0B	; 11
     9ae:	f1 f5       	brne	.+124    	; 0xa2c <fnExt1_LinkLineOut_DTMF+0xde>
	{		      
	    fnCutOffLineIn(mExt1_Link[0]);
     9b0:	80 91 ab 00 	lds	r24, 0x00AB
     9b4:	0e 94 ec 0c 	call	0x19d8 <fnCutOffLineIn>
		fnCutOffDTMF(mExt1_Link[1]);
     9b8:	80 91 ac 00 	lds	r24, 0x00AC
     9bc:	0e 94 38 0d 	call	0x1a70 <fnCutOffDTMF>
		i= fnLinkExtLineY4Y5(cExt1Num);
     9c0:	80 e0       	ldi	r24, 0x00	; 0
     9c2:	0e 94 80 0d 	call	0x1b00 <fnLinkExtLineY4Y5>
     9c6:	c8 2f       	mov	r28, r24
		if (!i)
     9c8:	88 23       	and	r24, r24
     9ca:	39 f4       	brne	.+14     	; 0x9da <fnExt1_LinkLineOut_DTMF+0x8c>
		{ 							
		   Ext1_FunPt=5;                 //5	fnExt1_Err  Dial Wong Extension Numer / LintOut be TimeOut;
     9cc:	85 e0       	ldi	r24, 0x05	; 5
     9ce:	80 93 9f 00 	sts	0x009F, r24
		   Writesoundway(Connect_Busy,cX_Ext1,ON); //;连接忙音
     9d2:	4f ef       	ldi	r20, 0xFF	; 255
     9d4:	6c 2f       	mov	r22, r28
     9d6:	86 e0       	ldi	r24, 0x06	; 6
     9d8:	26 c0       	rjmp	.+76     	; 0xa26 <fnExt1_LinkLineOut_DTMF+0xd8>
		   return;
		 }else
		   {
             j = fnLinkDTMF_Ext(i);    // Get DTMF			
     9da:	0e 94 a4 0d 	call	0x1b48 <fnLinkDTMF_Ext>
     9de:	18 2f       	mov	r17, r24
			  if (!j) // No any DTMF
     9e0:	88 23       	and	r24, r24
     9e2:	49 f4       	brne	.+18     	; 0x9f6 <fnExt1_LinkLineOut_DTMF+0xa8>
			   {
			      Ext1_FunPt=5;        //5	fnExt1_Err  Dial Wong Extension Numer / LintOut be TimeOut;
     9e4:	85 e0       	ldi	r24, 0x05	; 5
     9e6:	80 93 9f 00 	sts	0x009F, r24
				  fnCutOffY4Y5(i);
     9ea:	8c 2f       	mov	r24, r28
     9ec:	0e 94 16 0d 	call	0x1a2c <fnCutOffY4Y5>
				  Writesoundway(Connect_Busy,cX_Ext1,ON); //;连接忙音
     9f0:	4f ef       	ldi	r20, 0xFF	; 255
     9f2:	61 2f       	mov	r22, r17
     9f4:	f0 cf       	rjmp	.-32     	; 0x9d6 <fnExt1_LinkLineOut_DTMF+0x88>
				  return;
				}

				mExt1_Link[0] =i;
     9f6:	c0 93 ab 00 	sts	0x00AB, r28
				mExt1_Link[1] =j;  		
     9fa:	80 93 ac 00 	sts	0x00AC, r24
				Ext1_FunPt=14; 			//14	fnExt1_LinkDTMF_InputExtNm 内线连DTMF Wait Input (1-6,7,#) 3 ->5,6	
     9fe:	8e e0       	ldi	r24, 0x0E	; 14
     a00:	80 93 9f 00 	sts	0x009F, r24
        		Ext1_dialtime=10000;       //10s操作
     a04:	80 e1       	ldi	r24, 0x10	; 16
     a06:	97 e2       	ldi	r25, 0x27	; 39
     a08:	90 93 b7 00 	sts	0x00B7, r25
     a0c:	80 93 b6 00 	sts	0x00B6, r24
				Writesoundway(mExt1_Link[0],(mExt1_Link[0]+10),ON); //连接模拟电信音
     a10:	8c 2f       	mov	r24, r28
     a12:	86 5f       	subi	r24, 0xF6	; 246
     a14:	4f ef       	ldi	r20, 0xFF	; 255
     a16:	68 2f       	mov	r22, r24
     a18:	8c 2f       	mov	r24, r28
     a1a:	0e 94 73 03 	call	0x6e6 <Writesoundway>
				Writesoundway(mExt1_Link[0],cX_Ext1,ON); //连接模拟电信音
     a1e:	4f ef       	ldi	r20, 0xFF	; 255
     a20:	60 e0       	ldi	r22, 0x00	; 0
     a22:	80 91 ab 00 	lds	r24, 0x00AB
     a26:	0e 94 73 03 	call	0x6e6 <Writesoundway>
     a2a:	0b c0       	rjmp	.+22     	; 0xa42 <fnExt1_LinkLineOut_DTMF+0xf4>
			 }
	  }
	  else // Not Key "*"
		{
		    Ext1_FunPt=2; //fnExt1_LinkLineOut,			//2 内线连外线 2 ->0
     a2c:	82 e0       	ldi	r24, 0x02	; 2
     a2e:	80 93 9f 00 	sts	0x009F, r24
			Ext1_dialtime=0;
     a32:	10 92 b7 00 	sts	0x00B7, r1
     a36:	10 92 b6 00 	sts	0x00B6, r1
			fnCutOffDTMF(mExt1_Link[1]);
     a3a:	80 91 ac 00 	lds	r24, 0x00AC
     a3e:	0e 94 38 0d 	call	0x1a70 <fnCutOffDTMF>
     a42:	cf 91       	pop	r28
     a44:	1f 91       	pop	r17
     a46:	08 95       	ret

00000a48 <fnExt1_LinkLineOut>:
		 }		
}

void fnExt1_LinkLineOut(void)			//2 内线连外线 2 ->0
{
     a48:	cf 93       	push	r28
  if (Ext1_dialtime)  { Ext1_dialtime--; return; }  // 10ms Delay
     a4a:	80 91 b6 00 	lds	r24, 0x00B6
     a4e:	90 91 b7 00 	lds	r25, 0x00B7
     a52:	00 97       	sbiw	r24, 0x00	; 0
     a54:	11 f0       	breq	.+4      	; 0xa5a <fnExt1_LinkLineOut+0x12>
     a56:	01 97       	sbiw	r24, 0x01	; 1
     a58:	5a c0       	rjmp	.+180    	; 0xb0e <fnExt1_LinkLineOut+0xc6>
  
  if(!(ExtTelStateCheck & cExt1Bit) && !(ExtTelFlashState & cExt1Bit)) //挂机
     a5a:	90 91 86 00 	lds	r25, 0x0086
     a5e:	90 fd       	sbrc	r25, 0
     a60:	1d c0       	rjmp	.+58     	; 0xa9c <fnExt1_LinkLineOut+0x54>
     a62:	80 91 b5 00 	lds	r24, 0x00B5
     a66:	80 fd       	sbrc	r24, 0
     a68:	19 c0       	rjmp	.+50     	; 0xa9c <fnExt1_LinkLineOut+0x54>
   {
	    Ext1_FunPt=0;                                    //0 fnExt1_Free 	内线空闲 
     a6a:	10 92 9f 00 	sts	0x009F, r1
	    if(MulTalkState)
     a6e:	c0 91 b2 00 	lds	r28, 0x00B2
     a72:	cc 23       	and	r28, r28
     a74:	61 f0       	breq	.+24     	; 0xa8e <fnExt1_LinkLineOut+0x46>
        {
          MulTalkState=0;
     a76:	10 92 b2 00 	sts	0x00B2, r1
		  Writesoundway((mExt1_Link[0]-1),cExt1Num,OFF);
     a7a:	80 91 ab 00 	lds	r24, 0x00AB
     a7e:	40 e0       	ldi	r20, 0x00	; 0
     a80:	64 2f       	mov	r22, r20
     a82:	81 50       	subi	r24, 0x01	; 1
     a84:	0e 94 73 03 	call	0x6e6 <Writesoundway>
		  mExt1_Link[0]=0;
     a88:	10 92 ab 00 	sts	0x00AB, r1
          return;
     a8c:	44 c0       	rjmp	.+136    	; 0xb16 <fnExt1_LinkLineOut+0xce>
         }
	    fnCutOffLineIn(mExt1_Link[0]);
     a8e:	80 91 ab 00 	lds	r24, 0x00AB
     a92:	0e 94 ec 0c 	call	0x19d8 <fnCutOffLineIn>
		mExt1_Link[0]=0;
     a96:	c0 93 ab 00 	sts	0x00AB, r28
     a9a:	3d c0       	rjmp	.+122    	; 0xb16 <fnExt1_LinkLineOut+0xce>
	    
  }
  else if(ExtTelStateCheck & ExtTelFlashState & cExt1Bit) //转接
     a9c:	80 91 b5 00 	lds	r24, 0x00B5
     aa0:	89 23       	and	r24, r25
     aa2:	80 ff       	sbrs	r24, 0
     aa4:	38 c0       	rjmp	.+112    	; 0xb16 <fnExt1_LinkLineOut+0xce>
  {
     if(FlashtimeState) return;                    //只允许一次拍打
     aa6:	c0 91 8d 00 	lds	r28, 0x008D
     aaa:	cc 23       	and	r28, r28
     aac:	a1 f5       	brne	.+104    	; 0xb16 <fnExt1_LinkLineOut+0xce>
	 mExt1_Link[1]=fnLinkDTMF_Ext(Connect_Flash);  //查找DTMF
     aae:	87 e0       	ldi	r24, 0x07	; 7
     ab0:	0e 94 a4 0d 	call	0x1b48 <fnLinkDTMF_Ext>
     ab4:	80 93 ac 00 	sts	0x00AC, r24
	 if(mExt1_Link[1])                             //有DTMF
     ab8:	88 23       	and	r24, r24
     aba:	69 f1       	breq	.+90     	; 0xb16 <fnExt1_LinkLineOut+0xce>
     {
	    FlashtimeState=1;                          //禁止其他分机拍打
     abc:	81 e0       	ldi	r24, 0x01	; 1
     abe:	80 93 8d 00 	sts	0x008D, r24
		Flash_For_Out_Ext=0;                       //0 For Out   1  For Ext
     ac2:	c0 93 8c 00 	sts	0x008C, r28
		Ext1_NumdialOut=mExt1_Link[0];
     ac6:	80 91 ab 00 	lds	r24, 0x00AB
     aca:	80 93 79 00 	sts	0x0079, r24
		Ext1_LineY4Y5Num=mExt1_Link[0];
     ace:	80 93 6e 00 	sts	0x006E, r24
	    Writesoundway(mExt1_Link[0]-1,cExt1Num,OFF);
     ad2:	4c 2f       	mov	r20, r28
     ad4:	6c 2f       	mov	r22, r28
     ad6:	81 50       	subi	r24, 0x01	; 1
     ad8:	0e 94 73 03 	call	0x6e6 <Writesoundway>
        Writesoundway(mExt1_Link[0]-1,cX_Music,ON);
     adc:	80 91 ab 00 	lds	r24, 0x00AB
     ae0:	4f ef       	ldi	r20, 0xFF	; 255
     ae2:	66 e0       	ldi	r22, 0x06	; 6
     ae4:	84 0f       	add	r24, r20
     ae6:	0e 94 73 03 	call	0x6e6 <Writesoundway>
        Writesoundway(Connect_Flash,cX_Ext1,ON);            //连接模拟电信音
     aea:	4f ef       	ldi	r20, 0xFF	; 255
     aec:	6c 2f       	mov	r22, r28
     aee:	87 e0       	ldi	r24, 0x07	; 7
     af0:	0e 94 73 03 	call	0x6e6 <Writesoundway>
	    Writesoundway(Connect_Flash,(mExt1_Link[1]+13),ON); //连接模拟电信音
     af4:	80 91 ac 00 	lds	r24, 0x00AC
     af8:	83 5f       	subi	r24, 0xF3	; 243
     afa:	4f ef       	ldi	r20, 0xFF	; 255
     afc:	68 2f       	mov	r22, r24
     afe:	87 e0       	ldi	r24, 0x07	; 7
     b00:	0e 94 73 03 	call	0x6e6 <Writesoundway>
		
	    Ext1_FunPt=10;
     b04:	8a e0       	ldi	r24, 0x0A	; 10
     b06:	80 93 9f 00 	sts	0x009F, r24
	    Ext1_dialtime=10000;  	   	     	        
     b0a:	80 e1       	ldi	r24, 0x10	; 16
     b0c:	97 e2       	ldi	r25, 0x27	; 39
     b0e:	90 93 b7 00 	sts	0x00B7, r25
     b12:	80 93 b6 00 	sts	0x00B6, r24
     b16:	cf 91       	pop	r28
     b18:	08 95       	ret

00000b1a <fnExt1_LinkDTMF>:
      }
   }
}



void  fnExt1_LinkDTMF(void)			//3 内线连DTMF 3 ->14,5,6
{

 	if (bit_is_clear(ExtTelStateCheck,cExt1Num)) 
     b1a:	80 91 86 00 	lds	r24, 0x0086
     b1e:	80 fd       	sbrc	r24, 0
     b20:	0b c0       	rjmp	.+22     	; 0xb38 <fnExt1_LinkDTMF+0x1e>
 	{
		Ext1_FunPt=0;    //0 fnExt1_Free 	内线空闲 
     b22:	10 92 9f 00 	sts	0x009F, r1
		fnCutOffY4Y5(mExt1_Link[0]);
     b26:	80 91 ab 00 	lds	r24, 0x00AB
     b2a:	0e 94 16 0d 	call	0x1a2c <fnCutOffY4Y5>
		fnCutOffDTMF(mExt1_Link[1]);
     b2e:	80 91 ac 00 	lds	r24, 0x00AC
     b32:	0e 94 38 0d 	call	0x1a70 <fnCutOffDTMF>
		return;
     b36:	08 95       	ret
 	}
  
	if(!Ext1_dialtime)
     b38:	80 91 b6 00 	lds	r24, 0x00B6
     b3c:	90 91 b7 00 	lds	r25, 0x00B7
     b40:	00 97       	sbiw	r24, 0x00	; 0
     b42:	79 f4       	brne	.+30     	; 0xb62 <fnExt1_LinkDTMF+0x48>
      {
		Ext1_FunPt=5;    // fnExt1_Err
     b44:	85 e0       	ldi	r24, 0x05	; 5
     b46:	80 93 9f 00 	sts	0x009F, r24
		fnCutOffY4Y5(mExt1_Link[0]);
     b4a:	80 91 ab 00 	lds	r24, 0x00AB
     b4e:	0e 94 16 0d 	call	0x1a2c <fnCutOffY4Y5>
		fnCutOffDTMF(mExt1_Link[1]);
     b52:	80 91 ac 00 	lds	r24, 0x00AC
     b56:	0e 94 38 0d 	call	0x1a70 <fnCutOffDTMF>
		Writesoundway(Connect_Busy,cX_Ext1,ON); //;连接忙音
     b5a:	4f ef       	ldi	r20, 0xFF	; 255
     b5c:	60 e0       	ldi	r22, 0x00	; 0
     b5e:	86 e0       	ldi	r24, 0x06	; 6
     b60:	25 c0       	rjmp	.+74     	; 0xbac <fnExt1_LinkDTMF+0x92>
		return;

	   }
	Ext1_dialtime--;
     b62:	01 97       	sbiw	r24, 0x01	; 1
     b64:	90 93 b7 00 	sts	0x00B7, r25
     b68:	80 93 b6 00 	sts	0x00B6, r24

	mDTMF_In=DTMF_Decode(mExt1_Link[1]);
     b6c:	80 91 ac 00 	lds	r24, 0x00AC
     b70:	0e 94 2f 04 	call	0x85e <DTMF_Decode>
     b74:	80 93 c4 00 	sts	0x00C4, r24
	if (!mDTMF_In) return;
     b78:	88 23       	and	r24, r24
     b7a:	39 f1       	breq	.+78     	; 0xbca <fnExt1_LinkDTMF+0xb0>

	if (mDTMF_In == cXin)
     b7c:	8b 30       	cpi	r24, 0x0B	; 11
     b7e:	c9 f4       	brne	.+50     	; 0xbb2 <fnExt1_LinkDTMF+0x98>
	{
		Ext1_FunPt=14; 			//14	fnExt1_LinkDTMF_InputExtNm 内线连DTMF Wait Input (1-6,7,#) 3 ->5,6	
     b80:	8e e0       	ldi	r24, 0x0E	; 14
     b82:	80 93 9f 00 	sts	0x009F, r24
        Ext1_dialtime=10000;                      //10s操作
     b86:	80 e1       	ldi	r24, 0x10	; 16
     b88:	97 e2       	ldi	r25, 0x27	; 39
     b8a:	90 93 b7 00 	sts	0x00B7, r25
     b8e:	80 93 b6 00 	sts	0x00B6, r24
		Writesoundway(mExt1_Link[0],(mExt1_Link[0]+10),ON); //连接模拟电信音
     b92:	90 91 ab 00 	lds	r25, 0x00AB
     b96:	89 2f       	mov	r24, r25
     b98:	86 5f       	subi	r24, 0xF6	; 246
     b9a:	4f ef       	ldi	r20, 0xFF	; 255
     b9c:	68 2f       	mov	r22, r24
     b9e:	89 2f       	mov	r24, r25
     ba0:	0e 94 73 03 	call	0x6e6 <Writesoundway>
		Writesoundway(mExt1_Link[0],cX_Ext1,ON); //连接模拟电信音
     ba4:	4f ef       	ldi	r20, 0xFF	; 255
     ba6:	60 e0       	ldi	r22, 0x00	; 0
     ba8:	80 91 ab 00 	lds	r24, 0x00AB
     bac:	0e 94 73 03 	call	0x6e6 <Writesoundway>
     bb0:	08 95       	ret
	}else // Not Key "*"
	{
  		Ext1_FunPt=5; //5	fnExt1_Err  Dial Wong Extension Numer / LintOut be TimeOut;	fnCutOffDTMF(mExt1_Link[1]);
     bb2:	85 e0       	ldi	r24, 0x05	; 5
     bb4:	80 93 9f 00 	sts	0x009F, r24
		fnCutOffY4Y5(mExt1_Link[0]);
     bb8:	80 91 ab 00 	lds	r24, 0x00AB
     bbc:	0e 94 16 0d 	call	0x1a2c <fnCutOffY4Y5>
		Writesoundway(Connect_Busy,cX_Ext1,ON); //;连接忙音
     bc0:	4f ef       	ldi	r20, 0xFF	; 255
     bc2:	60 e0       	ldi	r22, 0x00	; 0
     bc4:	86 e0       	ldi	r24, 0x06	; 6
     bc6:	0e 94 73 03 	call	0x6e6 <Writesoundway>
     bca:	08 95       	ret

00000bcc <fnExt1_NotLinkAnyThing>:
     }
}


void fnExt1_NotLinkAnyThing(void) //		//4 内线没连任何线 4 -> 0
{
	if (bit_is_clear(ExtTelStateCheck,cExt1Num)) 
     bcc:	80 91 86 00 	lds	r24, 0x0086
     bd0:	80 fd       	sbrc	r24, 0
     bd2:	02 c0       	rjmp	.+4      	; 0xbd8 <fnExt1_NotLinkAnyThing+0xc>
 	{
		Ext1_FunPt=0;    //0 fnExt1_Free 	内线空闲 
     bd4:	10 92 9f 00 	sts	0x009F, r1
     bd8:	08 95       	ret

00000bda <fnExt1_Err>:
	}
}


void fnExt1_Err(void)					//5 Dial Wong Extension Numer / LintOut be TimeOut
{
  if (bit_is_clear(ExtTelStateCheck,cExt1Num)) 
     bda:	80 91 86 00 	lds	r24, 0x0086
     bde:	80 fd       	sbrc	r24, 0
     be0:	07 c0       	rjmp	.+14     	; 0xbf0 <fnExt1_Err+0x16>
  {
	Ext1_FunPt=0;    //0 fnExt1_Free 	内线空闲 
     be2:	10 92 9f 00 	sts	0x009F, r1
    Writesoundway(Connect_Busy,cX_Ext1,OFF); //;断开忙音
     be6:	40 e0       	ldi	r20, 0x00	; 0
     be8:	64 2f       	mov	r22, r20
     bea:	86 e0       	ldi	r24, 0x06	; 6
     bec:	0e 94 73 03 	call	0x6e6 <Writesoundway>
     bf0:	08 95       	ret

00000bf2 <fnExt1_WaitRing>:
	return;
 	}

}


void fnExt1_WaitRing(void)			//6 										mExt1_Link[0]=Y4Y5  mExt1_Link[1]= Calling To Ext Number
{

	if(bit_is_clear(ExtTelStateCheck,cExt1Num)) 
     bf2:	80 91 86 00 	lds	r24, 0x0086
     bf6:	80 fd       	sbrc	r24, 0
     bf8:	0b c0       	rjmp	.+22     	; 0xc10 <fnExt1_WaitRing+0x1e>
 	{
		Ext1_FunPt=0;                  //0 fnExt1_Free 	内线空闲 
     bfa:	10 92 9f 00 	sts	0x009F, r1
		fnCutOffY4Y5(Ext1_LineY4Y5Num);
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -