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

📄 change.lss

📁 基于AVR单片机的程近期电话交换机源程序,可实现一拖四(一外线,四内线).
💻 LSS
📖 第 1 页 / 共 4 页
字号:
				  while((num==test_hu(calln))&&(calln != test_hu(num)))	//等等被叫接电话或主叫放下听筒
 638:	81 2f       	mov	r24, r17
 63a:	99 df       	rcall	.-206    	; 0x56e <test_hu>
 63c:	08 17       	cp	r16, r24
 63e:	21 f4       	brne	.+8      	; 0x648 <main+0x6a>
 640:	80 2f       	mov	r24, r16
 642:	95 df       	rcall	.-214    	; 0x56e <test_hu>
 644:	18 17       	cp	r17, r24
 646:	c1 f7       	brne	.-16     	; 0x638 <main+0x5a>
				      {
					   }
				  *(ringflag+(calln-1))=0;//停止响铃
 648:	cd 58       	subi	r28, 0x8D	; 141
 64a:	df 4f       	sbci	r29, 0xFF	; 255
 64c:	18 82       	st	Y, r1
				  
				  clr_decode();		//清除解码阵列
 64e:	87 df       	rcall	.-242    	; 0x55e <clr_decode>
	
				  if(calln==test_hu(num))		//被叫接电话
 650:	80 2f       	mov	r24, r16
 652:	8d df       	rcall	.-230    	; 0x56e <test_hu>
 654:	18 17       	cp	r17, r24
 656:	59 f4       	brne	.+22     	; 0x66e <main+0x90>
				       {
					    L_flash=2;			//LED慢速闪烁
 658:	82 e0       	ldi	r24, 0x02	; 2
 65a:	80 93 68 00 	sts	0x0068, r24
						while(test_hu(0))	//等待通话完毕
 65e:	80 e0       	ldi	r24, 0x00	; 0
 660:	86 df       	rcall	.-244    	; 0x56e <test_hu>
 662:	88 23       	and	r24, r24
 664:	e1 f7       	brne	.-8      	; 0x65e <main+0x80>
						   {				//在这里加入多方通话功能
						   }
						L_flash=3;
 666:	83 e0       	ldi	r24, 0x03	; 3
 668:	80 93 68 00 	sts	0x0068, r24
						L1_c;
 66c:	c6 98       	cbi	0x18, 6	; 24
					   }
				  if(num!=test_hu(calln))		//主叫放下电话
 66e:	81 2f       	mov	r24, r17
 670:	7e df       	rcall	.-260    	; 0x56e <test_hu>
 672:	08 17       	cp	r16, r24
 674:	21 f0       	breq	.+8      	; 0x67e <main+0xa0>
				      {
					   L_flash=3;				//停止LED闪烁
 676:	83 e0       	ldi	r24, 0x03	; 3
 678:	80 93 68 00 	sts	0x0068, r24
					   L1_c;
 67c:	c6 98       	cbi	0x18, 6	; 24
					  }
				  clr_decode();		//清除解码阵列
 67e:	6f df       	rcall	.-290    	; 0x55e <clr_decode>
				}
			  if(decode[0]==9)		//打外线条件
 680:	80 91 6a 00 	lds	r24, 0x006A
 684:	89 30       	cpi	r24, 0x09	; 9
 686:	09 f0       	breq	.+2      	; 0x68a <main+0xac>
 688:	41 c0       	rjmp	.+130    	; 0x70c <main+0x12e>
			     {
				  delay(100);		//延时, 不让'9'拨出去
 68a:	84 e6       	ldi	r24, 0x64	; 100
 68c:	90 e0       	ldi	r25, 0x00	; 0
 68e:	e6 dc       	rcall	.-1588   	; 0x5c <delay>
				  relay_s;			// 接通外线
 690:	90 9a       	sbi	0x12, 0	; 18
				  delay(100);
 692:	84 e6       	ldi	r24, 0x64	; 100
 694:	90 e0       	ldi	r25, 0x00	; 0
 696:	e2 dc       	rcall	.-1596   	; 0x5c <delay>
				  while(test_hu(0))//等待听筒放下
 698:	32 c0       	rjmp	.+100    	; 0x6fe <main+0x120>
				    {				//在这里加入多方通话功能
					 if((decode[2]==11)&&(decode[1]==8)&&
 69a:	80 91 6c 00 	lds	r24, 0x006C
 69e:	8b 30       	cpi	r24, 0x0B	; 11
 6a0:	71 f5       	brne	.+92     	; 0x6fe <main+0x120>
 6a2:	80 91 6b 00 	lds	r24, 0x006B
 6a6:	88 30       	cpi	r24, 0x08	; 8
 6a8:	51 f5       	brne	.+84     	; 0x6fe <main+0x120>
 6aa:	80 91 6a 00 	lds	r24, 0x006A
 6ae:	88 23       	and	r24, r24
 6b0:	31 f1       	breq	.+76     	; 0x6fe <main+0x120>
 6b2:	80 91 6a 00 	lds	r24, 0x006A
 6b6:	85 30       	cpi	r24, 0x05	; 5
 6b8:	10 f5       	brcc	.+68     	; 0x6fe <main+0x120>
 6ba:	80 91 6a 00 	lds	r24, 0x006A
 6be:	80 17       	cp	r24, r16
 6c0:	f1 f0       	breq	.+60     	; 0x6fe <main+0x120>
					        (decode[0]>0&&decode[0]<5&&decode[0]!=num))//拨号条件, 不能打自己
					   {
					      calln=decode[0];		    //保存被叫机号
 6c2:	10 91 6a 00 	lds	r17, 0x006A
						  *(ringflag+(calln-1))=1;	//响铃
 6c6:	c1 2f       	mov	r28, r17
 6c8:	dd 27       	eor	r29, r29
 6ca:	fe 01       	movw	r30, r28
 6cc:	ed 58       	subi	r30, 0x8D	; 141
 6ce:	ff 4f       	sbci	r31, 0xFF	; 255
 6d0:	81 e0       	ldi	r24, 0x01	; 1
 6d2:	80 83       	st	Z, r24
				          L_flash=1;				//LED闪烁
 6d4:	80 93 68 00 	sts	0x0068, r24
						   while((num==test_hu(calln))&&(calln != test_hu(num)))	//等等被叫接电话或主叫放下听筒
 6d8:	81 2f       	mov	r24, r17
 6da:	49 df       	rcall	.-366    	; 0x56e <test_hu>
 6dc:	08 17       	cp	r16, r24
 6de:	21 f4       	brne	.+8      	; 0x6e8 <main+0x10a>
 6e0:	80 2f       	mov	r24, r16
 6e2:	45 df       	rcall	.-374    	; 0x56e <test_hu>
 6e4:	18 17       	cp	r17, r24
 6e6:	c1 f7       	brne	.-16     	; 0x6d8 <main+0xfa>
				               {
					            }
				           *(ringflag+(calln-1))=0;//停止响铃
 6e8:	cd 58       	subi	r28, 0x8D	; 141
 6ea:	df 4f       	sbci	r29, 0xFF	; 255
 6ec:	18 82       	st	Y, r1
				           if(calln==test_hu(num))	//被叫接电话
 6ee:	80 2f       	mov	r24, r16
 6f0:	3e df       	rcall	.-388    	; 0x56e <test_hu>
 6f2:	18 17       	cp	r17, r24
 6f4:	19 f4       	brne	.+6      	; 0x6fc <main+0x11e>
				              {
					            L_flash=2;			//LED慢速闪烁
 6f6:	82 e0       	ldi	r24, 0x02	; 2
 6f8:	80 93 68 00 	sts	0x0068, r24
						      }
				           clr_decode();		   //清除解码阵列
 6fc:	30 df       	rcall	.-416    	; 0x55e <clr_decode>
 6fe:	80 e0       	ldi	r24, 0x00	; 0
 700:	36 df       	rcall	.-404    	; 0x56e <test_hu>
 702:	88 23       	and	r24, r24
 704:	51 f6       	brne	.-108    	; 0x69a <main+0xbc>
						}
					}
				 L1_c;
 706:	c6 98       	cbi	0x18, 6	; 24
				 relay_c;			//返回内线
 708:	90 98       	cbi	0x12, 0	; 18
				 clr_decode();		//清除解码阵列
 70a:	29 df       	rcall	.-430    	; 0x55e <clr_decode>
 70c:	80 e0       	ldi	r24, 0x00	; 0
 70e:	2f df       	rcall	.-418    	; 0x56e <test_hu>
 710:	08 17       	cp	r16, r24
 712:	09 f4       	brne	.+2      	; 0x716 <main+0x138>
 714:	76 cf       	rjmp	.-276    	; 0x602 <main+0x24>
				 }
			}
		  L2_c;
 716:	c7 98       	cbi	0x18, 7	; 24
		  L_flash=0;		  
 718:	10 92 68 00 	sts	0x0068, r1
		  lock(0);		//解除封锁	  
 71c:	80 e0       	ldi	r24, 0x00	; 0
 71e:	43 df       	rcall	.-378    	; 0x5a6 <lock>
 720:	63 cf       	rjmp	.-314    	; 0x5e8 <main+0xa>
	   }
	else			//没分机拿起
	   {
	    if(ringcou>5)				//有外线电话
 722:	80 91 67 00 	lds	r24, 0x0067
 726:	86 30       	cpi	r24, 0x06	; 6
 728:	08 f4       	brcc	.+2      	; 0x72c <main+0x14e>
 72a:	5e cf       	rjmp	.-324    	; 0x5e8 <main+0xa>
		   {
		    L1_s;					//点亮L1
 72c:	c6 9a       	sbi	0x18, 6	; 24
			out_ringflag=1;
 72e:	81 e0       	ldi	r24, 0x01	; 1
 730:	80 93 64 00 	sts	0x0064, r24
			num1=0;
			while(num1==0&&ringcou>5)			//等等有人接电话
			  {
			    num1=test_hu(0);		//等待num1接到了电话			  
 734:	80 91 67 00 	lds	r24, 0x0067
 738:	86 30       	cpi	r24, 0x06	; 6
 73a:	28 f0       	brcs	.+10     	; 0x746 <main+0x168>
 73c:	80 e0       	ldi	r24, 0x00	; 0
 73e:	17 df       	rcall	.-466    	; 0x56e <test_hu>
 740:	08 2f       	mov	r16, r24
 742:	88 23       	and	r24, r24
 744:	b9 f3       	breq	.-18     	; 0x734 <main+0x156>
			  }
			L1_c;  
 746:	c6 98       	cbi	0x18, 6	; 24
			if(num1)		//有人接电话
 748:	00 23       	and	r16, r16
 74a:	09 f4       	brne	.+2      	; 0x74e <main+0x170>
 74c:	4b c0       	rjmp	.+150    	; 0x7e4 <main+0x206>
				{
				 L_flash=3;
 74e:	83 e0       	ldi	r24, 0x03	; 3
 750:	80 93 68 00 	sts	0x0068, r24
				 L2_s;
 754:	c7 9a       	sbi	0x18, 7	; 24
				 out_ringflag=0;	//清除标志
 756:	10 92 64 00 	sts	0x0064, r1
				 RG1_c;RG2_c;RG3_c;RG4_c;	//取消所有响铃
 75a:	ac 98       	cbi	0x15, 4	; 21
 75c:	ad 9a       	sbi	0x15, 5	; 21
 75e:	c4 98       	cbi	0x18, 4	; 24
 760:	c5 9a       	sbi	0x18, 5	; 24
 762:	c2 98       	cbi	0x18, 2	; 24
 764:	c3 9a       	sbi	0x18, 3	; 24
 766:	c0 98       	cbi	0x18, 0	; 24
 768:	c1 9a       	sbi	0x18, 1	; 24
				 
				 lock(num1);		//封锁其它机
 76a:	80 2f       	mov	r24, r16
 76c:	1c df       	rcall	.-456    	; 0x5a6 <lock>
				 relay_s;			//接到外线,和对方通话
 76e:	90 9a       	sbi	0x12, 0	; 18
				 while(test_hu(0))//等待听筒放下
 770:	32 c0       	rjmp	.+100    	; 0x7d6 <main+0x1f8>
				    {				//在这里加入多方通话功能
					  if((decode[2]==11)&&(decode[1]==8)&&
 772:	80 91 6c 00 	lds	r24, 0x006C
 776:	8b 30       	cpi	r24, 0x0B	; 11
 778:	71 f5       	brne	.+92     	; 0x7d6 <main+0x1f8>
 77a:	80 91 6b 00 	lds	r24, 0x006B
 77e:	88 30       	cpi	r24, 0x08	; 8
 780:	51 f5       	brne	.+84     	; 0x7d6 <main+0x1f8>
 782:	80 91 6a 00 	lds	r24, 0x006A
 786:	88 23       	and	r24, r24
 788:	31 f1       	breq	.+76     	; 0x7d6 <main+0x1f8>
 78a:	80 91 6a 00 	lds	r24, 0x006A
 78e:	85 30       	cpi	r24, 0x05	; 5
 790:	10 f5       	brcc	.+68     	; 0x7d6 <main+0x1f8>
 792:	80 91 6a 00 	lds	r24, 0x006A
 796:	80 17       	cp	r24, r16
 798:	f1 f0       	breq	.+60     	; 0x7d6 <main+0x1f8>
					        (decode[0]>0&&decode[0]<5&&decode[0]!=num1))//拨号条件, 不能打自己
					   {
					      calln=decode[0];		    //保存被叫机号
 79a:	10 91 6a 00 	lds	r17, 0x006A
						  *(ringflag+(calln-1))=1;	//响铃
 79e:	c1 2f       	mov	r28, r17
 7a0:	dd 27       	eor	r29, r29
 7a2:	fe 01       	movw	r30, r28
 7a4:	ed 58       	subi	r30, 0x8D	; 141
 7a6:	ff 4f       	sbci	r31, 0xFF	; 255
 7a8:	81 e0       	ldi	r24, 0x01	; 1
 7aa:	80 83       	st	Z, r24
				          L_flash=1;				//LED闪烁
 7ac:	80 93 68 00 	sts	0x0068, r24
						   while((num1==test_hu(calln))&&(calln != test_hu(num1)))	//等等被叫接电话或主叫放下听筒
 7b0:	81 2f       	mov	r24, r17
 7b2:	dd de       	rcall	.-582    	; 0x56e <test_hu>
 7b4:	08 17       	cp	r16, r24
 7b6:	21 f4       	brne	.+8      	; 0x7c0 <main+0x1e2>
 7b8:	80 2f       	mov	r24, r16
 7ba:	d9 de       	rcall	.-590    	; 0x56e <test_hu>
 7bc:	18 17       	cp	r17, r24
 7be:	c1 f7       	brne	.-16     	; 0x7b0 <main+0x1d2>
				               {
					            }
				           *(ringflag+(calln-1))=0;//停止响铃
 7c0:	cd 58       	subi	r28, 0x8D	; 141
 7c2:	df 4f       	sbci	r29, 0xFF	; 255
 7c4:	18 82       	st	Y, r1
				           if(calln==test_hu(num1))	//被叫接电话
 7c6:	80 2f       	mov	r24, r16
 7c8:	d2 de       	rcall	.-604    	; 0x56e <test_hu>
 7ca:	18 17       	cp	r17, r24
 7cc:	19 f4       	brne	.+6      	; 0x7d4 <main+0x1f6>
				              {
					            L_flash=2;			//LED慢速闪烁
 7ce:	82 e0       	ldi	r24, 0x02	; 2
 7d0:	80 93 68 00 	sts	0x0068, r24
						      }
				           clr_decode();		   //清除解码阵列
 7d4:	c4 de       	rcall	.-632    	; 0x55e <clr_decode>
 7d6:	80 e0       	ldi	r24, 0x00	; 0
 7d8:	ca de       	rcall	.-620    	; 0x56e <test_hu>
 7da:	88 23       	and	r24, r24
 7dc:	51 f6       	brne	.-108    	; 0x772 <main+0x194>
						}
					 
					}
					
				 relay_c;			//	返回内线
 7de:	90 98       	cbi	0x12, 0	; 18
				 lock(0);			//解除封锁
 7e0:	e2 de       	rcall	.-572    	; 0x5a6 <lock>
 7e2:	0a c0       	rjmp	.+20     	; 0x7f8 <main+0x21a>
				}
			else		//主叫放下听筒
			    {
				 out_ringflag=0;	//清除标志
 7e4:	00 93 64 00 	sts	0x0064, r16
				 RG1_c;RG2_c;RG3_c;RG4_c;	//取消所有响铃
 7e8:	ac 98       	cbi	0x15, 4	; 21
 7ea:	ad 9a       	sbi	0x15, 5	; 21
 7ec:	c4 98       	cbi	0x18, 4	; 24
 7ee:	c5 9a       	sbi	0x18, 5	; 24
 7f0:	c2 98       	cbi	0x18, 2	; 24
 7f2:	c3 9a       	sbi	0x18, 3	; 24
 7f4:	c0 98       	cbi	0x18, 0	; 24
 7f6:	c1 9a       	sbi	0x18, 1	; 24
				}
			ringcou=0;
 7f8:	10 92 67 00 	sts	0x0067, r1
			ringcoutime=0;
 7fc:	10 92 66 00 	sts	0x0066, r1
 800:	10 92 65 00 	sts	0x0065, r1
			L1_c;
 804:	c6 98       	cbi	0x18, 6	; 24
			L2_c;
 806:	c7 98       	cbi	0x18, 7	; 24
			L_flash=0;			//LED flash
 808:	10 92 68 00 	sts	0x0068, r1
 80c:	ed ce       	rjmp	.-550    	; 0x5e8 <main+0xa>

0000080e <__udivmodhi4>:
 80e:	aa 1b       	sub	r26, r26
 810:	bb 1b       	sub	r27, r27
 812:	51 e1       	ldi	r21, 0x11	; 17
 814:	07 c0       	rjmp	.+14     	; 0x824 <__udivmodhi4_ep>

00000816 <__udivmodhi4_loop>:
 816:	aa 1f       	adc	r26, r26
 818:	bb 1f       	adc	r27, r27
 81a:	a6 17       	cp	r26, r22
 81c:	b7 07       	cpc	r27, r23
 81e:	10 f0       	brcs	.+4      	; 0x824 <__udivmodhi4_ep>
 820:	a6 1b       	sub	r26, r22
 822:	b7 0b       	sbc	r27, r23

00000824 <__udivmodhi4_ep>:
 824:	88 1f       	adc	r24, r24
 826:	99 1f       	adc	r25, r25
 828:	5a 95       	dec	r21
 82a:	a9 f7       	brne	.-22     	; 0x816 <__udivmodhi4_loop>
 82c:	80 95       	com	r24
 82e:	90 95       	com	r25
 830:	bc 01       	movw	r22, r24
 832:	cd 01       	movw	r24, r26
 834:	08 95       	ret

⌨️ 快捷键说明

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