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

📄 mnet.lss

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 LSS
📖 第 1 页 / 共 5 页
字号:
	
		mFSKDATA= tFSKPhoneNumber[i];
     402:	ec 2f       	mov	r30, r28
     404:	ff 27       	eor	r31, r31
     406:	e0 5a       	subi	r30, 0xA0	; 160
     408:	ff 4f       	sbci	r31, 0xFF	; 255
     40a:	d0 80       	ld	r13, Z
		mCS-=mFSKDATA;
     40c:	cd 18       	sub	r12, r13

		mTxBit = 1;
     40e:	31 e0       	ldi	r19, 0x01	; 1
     410:	e3 2e       	mov	r14, r19
     412:	27 e0       	ldi	r18, 0x07	; 7
     414:	f2 2e       	mov	r15, r18
		
		for (j =0; j<8; j++)
		{
 			if ( mFSKDATA & mTxBit)  
     416:	8d 2d       	mov	r24, r13
     418:	8e 21       	and	r24, r14
     41a:	29 f0       	breq	.+10     	; 0x426 <fnTxFSKCallID+0x90>
			  { 	
			   OCR1A = LogicOne;
     41c:	85 e0       	ldi	r24, 0x05	; 5
     41e:	9d e0       	ldi	r25, 0x0D	; 13
     420:	9b bd       	out	0x2b, r25	; 43
     422:	8a bd       	out	0x2a, r24	; 42
     424:	08 c0       	rjmp	.+16     	; 0x436 <fnTxFSKCallID+0xa0>
			   fnSFSKBit();
			   }
			else
			 { 		
				OCR1A = LogicZero;
     426:	0a e1       	ldi	r16, 0x1A	; 26
     428:	17 e0       	ldi	r17, 0x07	; 7
     42a:	1b bd       	out	0x2b, r17	; 43
     42c:	0a bd       	out	0x2a, r16	; 42
				fnSFSKBit();
     42e:	0e 94 bc 01 	call	0x378 <fnSFSKBit>
				OCR1A = LogicZero;
     432:	1b bd       	out	0x2b, r17	; 43
     434:	0a bd       	out	0x2a, r16	; 42
				fnSFSKBit();
     436:	0e 94 bc 01 	call	0x378 <fnSFSKBit>
				}
        mTxBit <<=1;
     43a:	ee 0c       	add	r14, r14
     43c:	fa 94       	dec	r15
     43e:	f7 fe       	sbrs	r15, 7
     440:	ea cf       	rjmp	.-44     	; 0x416 <fnTxFSKCallID+0x80>
		}

		OCR1A = LogicOne;
     442:	85 e0       	ldi	r24, 0x05	; 5
     444:	9d e0       	ldi	r25, 0x0D	; 13
     446:	9b bd       	out	0x2b, r25	; 43
     448:	8a bd       	out	0x2a, r24	; 42
		fnSFSKBit();
     44a:	0e 94 bc 01 	call	0x378 <fnSFSKBit>
     44e:	cf 5f       	subi	r28, 0xFF	; 255
     450:	cb 30       	cpi	r28, 0x0B	; 11
     452:	68 f2       	brcs	.-102    	; 0x3ee <fnTxFSKCallID+0x58>
		
	}
    
		OCR1A = LogicZero;
     454:	0a e1       	ldi	r16, 0x1A	; 26
     456:	17 e0       	ldi	r17, 0x07	; 7
     458:	1b bd       	out	0x2b, r17	; 43
     45a:	0a bd       	out	0x2a, r16	; 42
        fnSFSKBit();
     45c:	0e 94 bc 01 	call	0x378 <fnSFSKBit>
		OCR1A = LogicZero;
     460:	1b bd       	out	0x2b, r17	; 43
     462:	0a bd       	out	0x2a, r16	; 42
        fnSFSKBit();		
     464:	0e 94 bc 01 	call	0x378 <fnSFSKBit>
	
		mFSKDATA= mCS;
		mTxBit = 1;
     468:	91 e0       	ldi	r25, 0x01	; 1
     46a:	e9 2e       	mov	r14, r25
     46c:	87 e0       	ldi	r24, 0x07	; 7
     46e:	f8 2e       	mov	r15, r24
		
		for (j =0; j<8; j++)
		{
 			if ( mFSKDATA & mTxBit)  
     470:	8c 2d       	mov	r24, r12
     472:	8e 21       	and	r24, r14
     474:	29 f0       	breq	.+10     	; 0x480 <fnTxFSKCallID+0xea>
			  { 	
			   OCR1A = LogicOne;
     476:	85 e0       	ldi	r24, 0x05	; 5
     478:	9d e0       	ldi	r25, 0x0D	; 13
     47a:	9b bd       	out	0x2b, r25	; 43
     47c:	8a bd       	out	0x2a, r24	; 42
     47e:	08 c0       	rjmp	.+16     	; 0x490 <fnTxFSKCallID+0xfa>
			   fnSFSKBit();
			   }
			else
			 { 		
				OCR1A = LogicZero;
     480:	0a e1       	ldi	r16, 0x1A	; 26
     482:	17 e0       	ldi	r17, 0x07	; 7
     484:	1b bd       	out	0x2b, r17	; 43
     486:	0a bd       	out	0x2a, r16	; 42
				fnSFSKBit();
     488:	0e 94 bc 01 	call	0x378 <fnSFSKBit>
				OCR1A = LogicZero;
     48c:	1b bd       	out	0x2b, r17	; 43
     48e:	0a bd       	out	0x2a, r16	; 42
				fnSFSKBit();
     490:	0e 94 bc 01 	call	0x378 <fnSFSKBit>
				}
        mTxBit <<=1;
     494:	ee 0c       	add	r14, r14
     496:	fa 94       	dec	r15
     498:	f7 fe       	sbrs	r15, 7
     49a:	ea cf       	rjmp	.-44     	; 0x470 <fnTxFSKCallID+0xda>
		}
		OCR1A = LogicOne;
     49c:	85 e0       	ldi	r24, 0x05	; 5
     49e:	9d e0       	ldi	r25, 0x0D	; 13
     4a0:	9b bd       	out	0x2b, r25	; 43
     4a2:	8a bd       	out	0x2a, r24	; 42
		fnSFSKBit();
     4a4:	0e 94 bc 01 	call	0x378 <fnSFSKBit>
     4a8:	cf 91       	pop	r28
     4aa:	1f 91       	pop	r17
     4ac:	0f 91       	pop	r16
     4ae:	ff 90       	pop	r15
     4b0:	ef 90       	pop	r14
     4b2:	df 90       	pop	r13
     4b4:	cf 90       	pop	r12
     4b6:	08 95       	ret

000004b8 <fnOSCRingFK>:

}
/**********************************/

/***********振铃*************/
void fnOSCRingFK(void)//振铃声,5秒断续,即1秒送、4秒断
{
     4b8:	1f 93       	push	r17
     4ba:	cf 93       	push	r28
 unsigned char i,mRot;
  
 mRot=1;
     4bc:	11 e0       	ldi	r17, 0x01	; 1
 if(ExtTelRingState)
     4be:	60 91 ad 00 	lds	r22, 0x00AD
     4c2:	20 91 a9 00 	lds	r18, 0x00A9
     4c6:	66 23       	and	r22, r22
     4c8:	09 f4       	brne	.+2      	; 0x4cc <fnOSCRingFK+0x14>
     4ca:	41 c0       	rjmp	.+130    	; 0x54e <fnOSCRingFK+0x96>
  {   
  	 if (ExtTelRingState^mExtTelRSTSav)  // if Ring is just start
     4cc:	62 17       	cp	r22, r18
     4ce:	81 f0       	breq	.+32     	; 0x4f0 <fnOSCRingFK+0x38>
	 {
		FSKFlag=1;                       //内部来电显示标志
     4d0:	10 93 b1 00 	sts	0x00B1, r17
		for(i=0;i<cExtTelNum;i++)
     4d4:	c0 e0       	ldi	r28, 0x00	; 0
	 	{     
	    	if( !(ExtTelRingState & mRot) )
     4d6:	40 91 ad 00 	lds	r20, 0x00AD
     4da:	41 23       	and	r20, r17
     4dc:	09 f0       	breq	.+2      	; 0x4e0 <fnOSCRingFK+0x28>
	    	{ 
		  		Writesoundway(SigCallID,i,OFF);      //连接响铃
		 	}
			else
			{
		  		Writesoundway(SigCallID,i,ON);      //连接响铃	
     4de:	4f ef       	ldi	r20, 0xFF	; 255
     4e0:	6c 2f       	mov	r22, r28
     4e2:	83 e0       	ldi	r24, 0x03	; 3
     4e4:	0e 94 73 03 	call	0x6e6 <Writesoundway>
						
			}       
	   		mRot<<=1;
     4e8:	11 0f       	add	r17, r17
     4ea:	cf 5f       	subi	r28, 0xFF	; 255
     4ec:	c6 30       	cpi	r28, 0x06	; 6
     4ee:	98 f3       	brcs	.-26     	; 0x4d6 <fnOSCRingFK+0x1e>
	  	 }  
 	  }
     
	 timeover_RingFK++;
     4f0:	80 91 8f 00 	lds	r24, 0x008F
     4f4:	90 91 90 00 	lds	r25, 0x0090
     4f8:	01 96       	adiw	r24, 0x01	; 1
     4fa:	90 93 90 00 	sts	0x0090, r25
     4fe:	80 93 8f 00 	sts	0x008F, r24
     if(timeover_RingFK==1000)
     502:	23 e0       	ldi	r18, 0x03	; 3
     504:	88 3e       	cpi	r24, 0xE8	; 232
     506:	92 07       	cpc	r25, r18
     508:	c9 f4       	brne	.+50     	; 0x53c <fnOSCRingFK+0x84>
     {
		ClrBit(PORTD,OSCRingFK); 
     50a:	92 98       	cbi	0x12, 2	; 18
		if(!OutsideRingCheck && FSKFlag)        //内部来电显示,避开外部来电显示
     50c:	c0 91 76 00 	lds	r28, 0x0076
     510:	cc 23       	and	r28, r28
     512:	09 f0       	breq	.+2      	; 0x516 <fnOSCRingFK+0x5e>
     514:	3d c0       	rjmp	.+122    	; 0x590 <fnOSCRingFK+0xd8>
     516:	80 91 b1 00 	lds	r24, 0x00B1
     51a:	88 23       	and	r24, r24
     51c:	c9 f1       	breq	.+114    	; 0x590 <fnOSCRingFK+0xd8>
		{
		  FSKFlag=0;
     51e:	c0 93 b1 00 	sts	0x00B1, r28
		  Writesoundway(SigCallID,cX_Music,ON);
     522:	4f ef       	ldi	r20, 0xFF	; 255
     524:	66 e0       	ldi	r22, 0x06	; 6
     526:	83 e0       	ldi	r24, 0x03	; 3
     528:	0e 94 73 03 	call	0x6e6 <Writesoundway>
		  fnTxFSKCallID();                        
     52c:	0e 94 cb 01 	call	0x396 <fnTxFSKCallID>
		  Writesoundway(SigCallID,cX_Music,OFF);
     530:	4c 2f       	mov	r20, r28
     532:	66 e0       	ldi	r22, 0x06	; 6
     534:	83 e0       	ldi	r24, 0x03	; 3
     536:	0e 94 73 03 	call	0x6e6 <Writesoundway>
     53a:	2a c0       	rjmp	.+84     	; 0x590 <fnOSCRingFK+0xd8>
         }

      }
      else if(timeover_RingFK>=5000)
     53c:	88 58       	subi	r24, 0x88	; 136
     53e:	93 41       	sbci	r25, 0x13	; 19
     540:	38 f1       	brcs	.+78     	; 0x590 <fnOSCRingFK+0xd8>
     {	       
		SetBit(PORTD,OSCRingFK);
     542:	92 9a       	sbi	0x12, 2	; 18
        timeover_RingFK=0;
     544:	10 92 90 00 	sts	0x0090, r1
     548:	10 92 8f 00 	sts	0x008F, r1
     54c:	21 c0       	rjmp	.+66     	; 0x590 <fnOSCRingFK+0xd8>
	  }
  }
  else  // No Ring Request
  {
	 ClrBit(PORTD,OSCRingFK);
     54e:	92 98       	cbi	0x12, 2	; 18
     timeover_RingFK=5000;
     550:	88 e8       	ldi	r24, 0x88	; 136
     552:	93 e1       	ldi	r25, 0x13	; 19
     554:	90 93 90 00 	sts	0x0090, r25
     558:	80 93 8f 00 	sts	0x008F, r24

	 if(mExtTelRSTSav ||(mExtTelSCheckSav^ExtTelStateCheck))
     55c:	22 23       	and	r18, r18
     55e:	31 f4       	brne	.+12     	; 0x56c <fnOSCRingFK+0xb4>
     560:	90 91 b0 00 	lds	r25, 0x00B0
     564:	80 91 86 00 	lds	r24, 0x0086
     568:	98 17       	cp	r25, r24
     56a:	91 f0       	breq	.+36     	; 0x590 <fnOSCRingFK+0xd8>
	 {
		for(i=0;i<cExtTelNum;i++)
     56c:	c6 2f       	mov	r28, r22
	 	{
	      if(!(ExtTelStateCheck & mRot) && !(ExtTelFlashState & mRot))//挂机
     56e:	80 91 86 00 	lds	r24, 0x0086
     572:	81 23       	and	r24, r17
     574:	49 f4       	brne	.+18     	; 0x588 <fnOSCRingFK+0xd0>
     576:	80 91 b5 00 	lds	r24, 0x00B5
     57a:	81 23       	and	r24, r17
     57c:	29 f4       	brne	.+10     	; 0x588 <fnOSCRingFK+0xd0>
	     	{
              Writesoundway(SigCallID,i,ON);      //连接响铃 
     57e:	4f ef       	ldi	r20, 0xFF	; 255
     580:	6c 2f       	mov	r22, r28
     582:	83 e0       	ldi	r24, 0x03	; 3
     584:	0e 94 73 03 	call	0x6e6 <Writesoundway>
		  	}   	
	      mRot<<=  1;
     588:	11 0f       	add	r17, r17
     58a:	cf 5f       	subi	r28, 0xFF	; 255
     58c:	c6 30       	cpi	r28, 0x06	; 6
     58e:	78 f3       	brcs	.-34     	; 0x56e <fnOSCRingFK+0xb6>
	  	}
	 }
 }
   mExtTelSCheckSav =ExtTelStateCheck;
     590:	80 91 86 00 	lds	r24, 0x0086
     594:	80 93 b0 00 	sts	0x00B0, r24
   mExtTelRSTSav = ExtTelRingState;
     598:	80 91 ad 00 	lds	r24, 0x00AD
     59c:	80 93 a9 00 	sts	0x00A9, r24
     5a0:	cf 91       	pop	r28
     5a2:	1f 91       	pop	r17
     5a4:	08 95       	ret

000005a6 <System_init>:
}


void System_init(void) //系统初始化
{
     5a6:	1f 93       	push	r17
	double __tmp = ((F_CPU) / 4e3) * __ms;
	if (__tmp < 1.0)
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
     5a8:	e0 e0       	ldi	r30, 0x00	; 0
     5aa:	f0 e0       	ldi	r31, 0x00	; 0
     5ac:	cf 01       	movw	r24, r30
     5ae:	01 97       	sbiw	r24, 0x01	; 1
     5b0:	f1 f7       	brne	.-4      	; 0x5ae <System_init+0x8>
 _delay_ms(1000);

 DDRA=0b00000000;   //PA7:D7  PA6:D6  PA5:D5  PA4:D4  PA3:D3  PA2:D2  PA1:D1  PA0:D0  
     5b2:	1a ba       	out	0x1a, r1	; 26
 PORTA=0b11111111;
     5b4:	1f ef       	ldi	r17, 0xFF	; 255
     5b6:	1b bb       	out	0x1b, r17	; 27

 DDRB=0b00010010;     //PB4:HoldDoor  PB3:TestFlag  PB2:CheckDoorRing     PB1:CallCenter  PB0:CheckCenterHold  
     5b8:	82 e1       	ldi	r24, 0x12	; 18
     5ba:	87 bb       	out	0x17, r24	; 23
 PORTB=0b11111111;
     5bc:	18 bb       	out	0x18, r17	; 24

 DDRC=0b01100111;   //PC7:          PC6:Line2_LedCtr  PC5:Line1_LedCtr      PC4:DTMF2_DV  
     5be:	87 e6       	ldi	r24, 0x67	; 103
     5c0:	84 bb       	out	0x14, r24	; 20
 PORTC=0b00011000;  //PC3:DTMF1_DV  PC2: EnDTMFCreate PC1:P17               PC0:Create10HZ
     5c2:	88 e1       	ldi	r24, 0x18	; 24
     5c4:	85 bb       	out	0x15, r24	; 21
 
 DDRD=0b11111111;    //PD7:Osc450HZ       PD6:Storbe8816    PD5:Music      PD4: Reset8816
     5c6:	11 bb       	out	0x11, r17	; 17
 PORTD=0b10111000;   //PD3:CheckHold_Ring PD2:OSCRingFK     PD1:Playvoice      PD0:Recordvoice
     5c8:	88 eb       	ldi	r24, 0xB8	; 184
     5ca:	82 bb       	out	0x12, r24	; 18
 
 // Time 0 Setting
 TCCR0 = _BV(CS01)|_BV(CS00)|_BV(WGM01); //clkT2S/64 ( 来自预分频器)
     5cc:	8b e0       	ldi	r24, 0x0B	; 11
     5ce:	83 bf       	out	0x33, r24	; 51
 OCR0 = 125;		                       // 64 * N =     1ms
     5d0:	8d e7       	ldi	r24, 0x7D	; 125
     5d2:	8c bf       	out	0x3c, r24	; 60
 TCNT0 =0;
     5d4:	12 be       	out	0x32, r1	; 50

 // Time 1 PWM产生音乐
 TCCR1A = _BV(COM1A0);           //比较匹配时OC1A电平取反,10 bit PWM, using COM0A,PWM相位修正
     5d6:	80 e4       	ldi	r24, 0x40	; 64
     5d8:	8f bd       	out	0x2f, r24	; 47
 TCCR1B = _BV(CS10)|_BV(WGM12); //clkT2S/1 ( 来自预分频器)
     5da:	89 e0       	ldi	r24, 0x09	; 9
     5dc:	8e bd       	out	0x2e, r24	; 46
 //OCR1A = 4000000/450;		// 64 * N = 80000000     1ms
 TCNT1 =0;
     5de:	fd bd       	out	0x2d, r31	; 45
     5e0:	ec bd       	out	0x2c, r30	; 44

  // Time 2 ,PWM产生450HZ频率
 TCCR2 = _BV(COM20)|_BV(CS22)|_BV(CS20)|_BV(WGM21); //clkT2S/8 ( 来自预分频器)

⌨️ 快捷键说明

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