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

📄 mnet.lss

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     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 + -