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

📄 mnet.lss

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 LSS
📖 第 1 页 / 共 5 页
字号:
	if(OutsideRingPre!=OutsideRingRd)
     7c6:	80 91 cf 00 	lds	r24, 0x00CF
     7ca:	89 17       	cp	r24, r25
     7cc:	19 f0       	breq	.+6      	; 0x7d4 <OutsideTelRingCheck+0x2a>
	 {
	   OutsideRingPre=OutsideRingRd;	//更新寄存值  OutsideRingRd: 1=Nothing 0=Ring
     7ce:	90 93 cf 00 	sts	0x00CF, r25
	   return; 	
     7d2:	30 c0       	rjmp	.+96     	; 0x834 <OutsideTelRingCheck+0x8a>
	  }		


 mRot =1;
     7d4:	31 e0       	ldi	r19, 0x01	; 1
     7d6:	c0 91 dd 00 	lds	r28, 0x00DD
     7da:	58 2f       	mov	r21, r24
     7dc:	68 eb       	ldi	r22, 0xB8	; 184
     7de:	7b e0       	ldi	r23, 0x0B	; 11
     7e0:	20 91 76 00 	lds	r18, 0x0076
     7e4:	43 2f       	mov	r20, r19
     7e6:	af ed       	ldi	r26, 0xDF	; 223
     7e8:	b0 e0       	ldi	r27, 0x00	; 0
     7ea:	fd 01       	movw	r30, r26
 for(i=0;i<OutsideTelNum;i++)
  {	                     
	   Store_Flag= OutsideRingSave & mRot;			//OutsideRingSave	  1=Nothing 0=Ring
     7ec:	9c 2f       	mov	r25, r28
     7ee:	93 23       	and	r25, r19
	   if(OutsideRingRd & mRot)
     7f0:	85 2f       	mov	r24, r21
     7f2:	83 23       	and	r24, r19
     7f4:	79 f0       	breq	.+30     	; 0x814 <OutsideTelRingCheck+0x6a>
		{
		   if(Store_Flag)
     7f6:	99 23       	and	r25, r25
     7f8:	99 f0       	breq	.+38     	; 0x820 <OutsideTelRingCheck+0x76>
			{
			   if(SetOutsideRing[i])
     7fa:	80 81       	ld	r24, Z
     7fc:	91 81       	ldd	r25, Z+1	; 0x01
     7fe:	00 97       	sbiw	r24, 0x00	; 0
     800:	79 f0       	breq	.+30     	; 0x820 <OutsideTelRingCheck+0x76>
			    {
                   if(!(--SetOutsideRing[i]))
     802:	01 97       	sbiw	r24, 0x01	; 1
     804:	91 83       	std	Z+1, r25	; 0x01
     806:	80 83       	st	Z, r24
     808:	89 2b       	or	r24, r25
     80a:	51 f4       	brne	.+20     	; 0x820 <OutsideTelRingCheck+0x76>
				    {
                       OutsideRingCheck &= ~mRot;
     80c:	83 2f       	mov	r24, r19
     80e:	80 95       	com	r24
     810:	28 23       	and	r18, r24
     812:	06 c0       	rjmp	.+12     	; 0x820 <OutsideTelRingCheck+0x76>
					}
                }
             }
		   else
			{//振铃停止动作****************
			  
			 }	
		 }
		else  // on Ringing
		{
		   if(Store_Flag)
     814:	99 23       	and	r25, r25
     816:	21 f0       	breq	.+8      	; 0x820 <OutsideTelRingCheck+0x76>
			{//振铃动作****************
			   SetOutsideRing[i]=3000;       //5s未检测到振铃,则认为振铃停止
     818:	11 96       	adiw	r26, 0x01	; 1
     81a:	7c 93       	st	X, r23
     81c:	6e 93       	st	-X, r22
			   OutsideRingCheck|=mRot;
     81e:	23 2b       	or	r18, r19
			 }
			else
			{
                       
			 }								
		  }
	   mRot<<=  1;		
     820:	33 0f       	add	r19, r19
     822:	41 50       	subi	r20, 0x01	; 1
     824:	32 96       	adiw	r30, 0x02	; 2
     826:	12 96       	adiw	r26, 0x02	; 2
     828:	47 ff       	sbrs	r20, 7
     82a:	e0 cf       	rjmp	.-64     	; 0x7ec <OutsideTelRingCheck+0x42>
     82c:	20 93 76 00 	sts	0x0076, r18
	 }
  OutsideRingSave=OutsideRingRd;	//更新寄存值
     830:	50 93 dd 00 	sts	0x00DD, r21
     834:	cf 91       	pop	r28
     836:	08 95       	ret

00000838 <TelOperateLoop>:
}


void TelOperateLoop(void)
{
   fnTelRountineOut1();
     838:	0e 94 ab 16 	call	0x2d56 <fnTelRountineOut1>
   fnTelRountineOut2();
     83c:	0e 94 de 16 	call	0x2dbc <fnTelRountineOut2>

   fnTelRountineExt1();
     840:	0e 94 22 0a 	call	0x1444 <fnTelRountineExt1>
   fnTelRountineExt2();
     844:	0e 94 78 16 	call	0x2cf0 <fnTelRountineExt2>
   fnTelRountineExt3();
     848:	0e 94 3e 22 	call	0x447c <fnTelRountineExt3>
   fnTelRountineExt4();
     84c:	0e 94 fe 27 	call	0x4ffc <fnTelRountineExt4>
   fnTelRountineExt5();
     850:	0e 94 be 2d 	call	0x5b7c <fnTelRountineExt5>
   fnTelRountineExt6();
     854:	0e 94 80 33 	call	0x6700 <fnTelRountineExt6>

   fnTelRountineDoorphone();
     858:	0e 94 65 17 	call	0x2eca <fnTelRountineDoorphone>
     85c:	08 95       	ret

0000085e <DTMF_Decode>:
unsigned char DTMF_Decode(unsigned char DTMF_NUM)
{
 unsigned char i;

 if (DTMF_NUM==1)
     85e:	81 30       	cpi	r24, 0x01	; 1
     860:	99 f4       	brne	.+38     	; 0x888 <__stack+0x29>
 {
     if(bit_is_clear(PINC,DTMF1_DV))  
     862:	9b 99       	sbic	0x13, 3	; 19
     864:	05 c0       	rjmp	.+10     	; 0x870 <__stack+0x11>
	 {		
	 	i=mDTMF1_Pre;
     866:	80 91 b4 00 	lds	r24, 0x00B4
	 	mDTMF1_Pre =0;
     86a:	10 92 b4 00 	sts	0x00B4, r1
     86e:	14 c0       	rjmp	.+40     	; 0x898 <__stack+0x39>
		return i;	 

	 }else
	 	{	 		
			SetBit(PORTC,EnDTMFCreate);
     870:	aa 9a       	sbi	0x15, 2	; 21
	...
	 		nop();nop();nop();
			nop();nop();nop();
			mDTMF1_Pre=PINA & 0x0f;
     87e:	89 b3       	in	r24, 0x19	; 25
     880:	8f 70       	andi	r24, 0x0F	; 15
     882:	80 93 b4 00 	sts	0x00B4, r24
     886:	1a c0       	rjmp	.+52     	; 0x8bc <__stack+0x5d>
	 		ClrBit(PORTC,EnDTMFCreate);
	 		return 0;
		}

 }else if (DTMF_NUM==2)
     888:	82 30       	cpi	r24, 0x02	; 2
     88a:	e1 f4       	brne	.+56     	; 0x8c4 <__stack+0x65>
 {
     if(bit_is_clear(PINC,DTMF2_DV))  
     88c:	9c 99       	sbic	0x13, 4	; 19
     88e:	06 c0       	rjmp	.+12     	; 0x89c <__stack+0x3d>
	 {		
	 	i=mDTMF2_Pre;
     890:	80 91 7a 00 	lds	r24, 0x007A
	 	mDTMF2_Pre =0;
     894:	10 92 7a 00 	sts	0x007A, r1
		return i;	 
     898:	99 27       	eor	r25, r25
     89a:	08 95       	ret
	 }else
	 	{	 		
			SetBit(PORTC,EnDTMFCreate);
     89c:	aa 9a       	sbi	0x15, 2	; 21
	...
	 		nop();nop();nop();
			nop();nop();nop();
	 		mDTMF2_Pre= (PINA & 0xf0)>>4 ;     
     8aa:	89 b3       	in	r24, 0x19	; 25
     8ac:	99 27       	eor	r25, r25
     8ae:	24 e0       	ldi	r18, 0x04	; 4
     8b0:	96 95       	lsr	r25
     8b2:	87 95       	ror	r24
     8b4:	2a 95       	dec	r18
     8b6:	e1 f7       	brne	.-8      	; 0x8b0 <__stack+0x51>
     8b8:	80 93 7a 00 	sts	0x007A, r24
	 		ClrBit(PORTC,EnDTMFCreate);
     8bc:	aa 98       	cbi	0x15, 2	; 21
	 		return 0;
     8be:	80 e0       	ldi	r24, 0x00	; 0
     8c0:	90 e0       	ldi	r25, 0x00	; 0
     8c2:	08 95       	ret
		}
  }
	return 0;
     8c4:	80 e0       	ldi	r24, 0x00	; 0
     8c6:	90 e0       	ldi	r25, 0x00	; 0
}
     8c8:	08 95       	ret

000008ca <fnExt1_Free>:



void fnExt1_Free(void)                       //0 内线空闲  
{
     8ca:	cf 93       	push	r28
 
 unsigned char i,j;

 if (bit_is_clear(ExtTelStateCheck,cExt1Num)) return;  //本内线提机
     8cc:	80 91 86 00 	lds	r24, 0x0086
     8d0:	80 ff       	sbrs	r24, 0
     8d2:	3b c0       	rjmp	.+118    	; 0x94a <fnExt1_Free+0x80>
    Writesoundway(SigCallID,cExt1Num,OFF);      //
     8d4:	40 e0       	ldi	r20, 0x00	; 0
     8d6:	64 2f       	mov	r22, r20
     8d8:	83 e0       	ldi	r24, 0x03	; 3
     8da:	0e 94 73 03 	call	0x6e6 <Writesoundway>

	i = fnLinkLineIn_Ext(cExt1Num);  // Get Line Out
     8de:	80 e0       	ldi	r24, 0x00	; 0
     8e0:	0e 94 5a 0d 	call	0x1ab4 <fnLinkLineIn_Ext>
     8e4:	c8 2f       	mov	r28, r24

	if (!i)
     8e6:	88 23       	and	r24, r24
     8e8:	b1 f4       	brne	.+44     	; 0x916 <fnExt1_Free+0x4c>
	{
		i= fnLinkExtLineY4Y5(cExt1Num);
     8ea:	0e 94 80 0d 	call	0x1b00 <fnLinkExtLineY4Y5>
     8ee:	c8 2f       	mov	r28, r24
		if (!i) // Have not Y4Y5
     8f0:	88 23       	and	r24, r24
     8f2:	39 f0       	breq	.+14     	; 0x902 <fnExt1_Free+0x38>
		{
			Ext1_FunPt=4;//4 内线没连任何线
			return;
		}else // Get One of Y4 / Y5
		  {
		 		j = fnLinkDTMF_Ext(i);    // Get DTMF
     8f4:	0e 94 a4 0d 	call	0x1b48 <fnLinkDTMF_Ext>
				
				if (!j) // No any DTMF
     8f8:	88 23       	and	r24, r24
     8fa:	39 f4       	brne	.+14     	; 0x90a <fnExt1_Free+0x40>
				{
					fnCutOffY4Y5(i);
     8fc:	8c 2f       	mov	r24, r28
     8fe:	0e 94 16 0d 	call	0x1a2c <fnCutOffY4Y5>
					Ext1_FunPt=4;//4 内线没连任何线
     902:	84 e0       	ldi	r24, 0x04	; 4
     904:	80 93 9f 00 	sts	0x009F, r24
					return;
     908:	20 c0       	rjmp	.+64     	; 0x94a <fnExt1_Free+0x80>
				}
			}	
		
		mExt1_Link[0] =i;
     90a:	c0 93 ab 00 	sts	0x00AB, r28
		mExt1_Link[1] =j;  		
     90e:	80 93 ac 00 	sts	0x00AC, r24
		Ext1_FunPt=3;                          //3 内线连DTMF
     912:	83 e0       	ldi	r24, 0x03	; 3
     914:	12 c0       	rjmp	.+36     	; 0x93a <fnExt1_Free+0x70>
        Ext1_dialtime=10000;                      //10s操作

	}else
		{
			j = fnLinkDTMF_Ext(i-1);    // Get DTMF
     916:	81 50       	subi	r24, 0x01	; 1
     918:	0e 94 a4 0d 	call	0x1b48 <fnLinkDTMF_Ext>
			mExt1_Link[0] =i;
     91c:	c0 93 ab 00 	sts	0x00AB, r28
			mExt1_Link[1] =j; 
     920:	80 93 ac 00 	sts	0x00AC, r24
			if (!j)
     924:	88 23       	and	r24, r24
     926:	41 f4       	brne	.+16     	; 0x938 <fnExt1_Free+0x6e>
				{
			   		Ext1_FunPt=2;                       //2 内线连外线
     928:	82 e0       	ldi	r24, 0x02	; 2
     92a:	80 93 9f 00 	sts	0x009F, r24
					Ext1_dialtime = 0;
     92e:	10 92 b7 00 	sts	0x00B7, r1
     932:	10 92 b6 00 	sts	0x00B6, r1
     936:	09 c0       	rjmp	.+18     	; 0x94a <fnExt1_Free+0x80>
				}else
			 		{
						Ext1_FunPt=1;                     //1 内线连外线 + DTMF
     938:	81 e0       	ldi	r24, 0x01	; 1
     93a:	80 93 9f 00 	sts	0x009F, r24
						Ext1_dialtime=10000;                 //10s操作
     93e:	80 e1       	ldi	r24, 0x10	; 16
     940:	97 e2       	ldi	r25, 0x27	; 39
     942:	90 93 b7 00 	sts	0x00B7, r25
     946:	80 93 b6 00 	sts	0x00B6, r24
     94a:	cf 91       	pop	r28
     94c:	08 95       	ret

0000094e <fnExt1_LinkLineOut_DTMF>:
                        return;
			 		}
		}
}



void fnExt1_LinkLineOut_DTMF(void)                        //1 内线连外线 + DTMF
{
     94e:	1f 93       	push	r17
     950:	cf 93       	push	r28
 unsigned char i,j;

 	if (bit_is_clear(ExtTelStateCheck,cExt1Num)) 
     952:	80 91 86 00 	lds	r24, 0x0086
     956:	80 fd       	sbrc	r24, 0
     958:	07 c0       	rjmp	.+14     	; 0x968 <fnExt1_LinkLineOut_DTMF+0x1a>
 	{
		Ext1_FunPt=0;    //0 fnExt1_Free 	内线空闲 
     95a:	10 92 9f 00 	sts	0x009F, r1
		fnCutOffLineIn(mExt1_Link[0]);
     95e:	80 91 ab 00 	lds	r24, 0x00AB
     962:	0e 94 ec 0c 	call	0x19d8 <fnCutOffLineIn>
     966:	69 c0       	rjmp	.+210    	; 0xa3a <fnExt1_LinkLineOut_DTMF+0xec>
		fnCutOffDTMF(mExt1_Link[1]);
		return;
 	}
  
	if(!Ext1_dialtime)
     968:	80 91 b6 00 	lds	r24, 0x00B6
     96c:	90 91 b7 00 	lds	r25, 0x00B7
     970:	00 97       	sbiw	r24, 0x00	; 0
     972:	71 f4       	brne	.+28     	; 0x990 <fnExt1_LinkLineOut_DTMF+0x42>
     {
		Ext1_FunPt=5;    // fnExt1_Err
     974:	85 e0       	ldi	r24, 0x05	; 5
     976:	80 93 9f 00 	sts	0x009F, r24
		fnCutOffLineIn(mExt1_Link[0]);
     97a:	80 91 ab 00 	lds	r24, 0x00AB
     97e:	0e 94 ec 0c 	call	0x19d8 <fnCutOffLineIn>
		fnCutOffDTMF(mExt1_Link[1]);
     982:	80 91 ac 00 	lds	r24, 0x00AC
     986:	0e 94 38 0d 	call	0x1a70 <fnCutOffDTMF>
		Writesoundway(Connect_Busy,cX_Ext1,ON); //;连接忙音
     98a:	4f ef       	ldi	r20, 0xFF	; 255
     98c:	60 e0       	ldi	r22, 0x00	; 0
     98e:	23 c0       	rjmp	.+70     	; 0x9d6 <fnExt1_LinkLineOut_DTMF+0x88>
		return;
      }

	Ext1_dialtime--;
     990:	01 97       	sbiw	r24, 0x01	; 1
     992:	90 93 b7 00 	sts	0x00B7, r25
     996:	80 93 b6 00 	sts	0x00B6, r24

	mDTMF_In=DTMF_Decode(mExt1_Link[1]);
     99a:	80 91 ac 00 	lds	r24, 0x00AC
     99e:	0e 94 2f 04 	call	0x85e <DTMF_Decode>
     9a2:	80 93 c4 00 	sts	0x00C4, r24
	if (!mDTMF_In) return;
     9a6:	88 23       	and	r24, r24
     9a8:	09 f4       	brne	.+2      	; 0x9ac <fnExt1_LinkLineOut_DTMF+0x5e>

⌨️ 快捷键说明

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