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

📄 communication.s

📁 基于PIC单片机
💻 S
📖 第 1 页 / 共 5 页
字号:
L322:
	.dbline 618
	ldd R24,y+13
	cpi R24,33
	brlo L319
	.dbline 621
; 	    det_link[k]=EEPROM_read(0x0090+k) ; 	
; 	//以下是为了显示屏蔽灯而编写的程序段
; 	gal3data|=0x22;         //关闭两个屏蔽灯
	lds R24,_gal3data
	ori R24,34
	sts _gal3data,R24
	.dbline 622
; 	GAL3ADDR=gal3data;    
	mov R2,R24
	sts 12288,R2
	.dbline 623
; 	for(fl=1;fl<=32;fl++)   //32个转换器  fu le
	ldi R24,1
	sts _fl,R24
	xjmp L326
L323:
	.dbline 624
; 	{   
	.dbline 625
; 	    wdr();
	xcall _wdr
	.dbline 626
; 	    if((gal3data|0xdd)==0xdd)            //两个屏蔽灯都亮
	lds R24,_gal3data
	ori R24,221
	cpi R24,221
	brne L327
	.dbline 627
; 		    break;
	xjmp L325
L327:
	.dbline 628
; 	    temp1=(fl-1)%8;  //余数
	ldi R17,8
	lds R16,_fl
	subi R16,1
	xcall mod8u
	std y+22,R16
	.dbline 629
; 		temp2=(fl-1)/8;  //商
	lds R20,_fl
	subi R20,1
	lsr R20
	lsr R20
	lsr R20
	.dbline 630
; 	    if((xuanbit2[temp1]&canuse[temp2])==0)      //表示对应的转换器投用
	ldi R24,<_canuse
	ldi R25,>_canuse
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R24,R28
	adiw R24,5
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	ldd R3,z+0
	and R3,R2
	breq X4
	xjmp L329
X4:
	.dbline 631
; 		{
	.dbline 632
; 		    for(i=1;i<=8;i++)                       //前8号节点
	clr R0
	inc R0
	std y+14,R0
	xjmp L334
L331:
	.dbline 633
; 			{
	.dbline 634
; 			    temp3=(i-1)%8;                       //余数
	ldi R17,8
	ldd R16,y+14
	subi R16,1
	xcall mod8u
	mov R22,R16
	.dbline 635
; 			    temp4=(i-1)/8;                       //商 
	ldd R24,y+14
	subi R24,1
	mov R10,R24
	lsr R10
	lsr R10
	lsr R10
	.dbline 636
; 				temp5=i%8;                           //余数
	ldi R17,8
	ldd R16,y+14
	xcall mod8u
	mov R12,R16
	.dbline 637
; 			    temp6=i/8;                           //商 
	ldd R14,y+14
	lsr R14
	lsr R14
	lsr R14
	.dbline 638
; 			    if(((detuse[fl][temp4]& xuanbit2[temp3])!=0)&&((detuse[fl][temp6]&xuanbit2[temp5])==0)) //该节点不投用下个节点投用
	lds R2,_fl
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_detuse
	ldi R25,>_detuse
	add R2,R24
	adc R3,R25
	movw R24,R28
	adiw R24,5
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	ldd R5,z+0
	and R5,R4
	brne X5
	xjmp L335
X5:
	movw R24,R28
	adiw R24,5
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	mov R30,R14
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	and R2,R4
	breq X6
	xjmp L335
X6:
	.dbline 639
; 			    {
	.dbline 641
; 				    //读取外部ram中的标志字节
; 					addrxy=(uint)(fl*256)+(i-1)*8;   //探测器和节点对应的RAM地址                  
	ldi R24,8
	ldd R0,y+14
	mul R24,R0
	movw R24,R0
	sbiw R24,8
	lds R18,_fl
	clr R19
	ldi R16,256
	ldi R17,1
	xcall empy16s
	movw R2,R16
	add R2,R24
	adc R3,R25
	std y+19,R3
	std y+18,R2
	.dbline 642
; 			        addrxyh=(uchar)(((addrxy&0xff00)>>8)); //高址
	movw R24,R2
	andi R24,0
	mov R24,R25
	clr R25
	std y+20,R24
	.dbline 643
; 			        addrxyl=(uchar)(addrxy&0x00ff);        //低址
	ldd R24,y+18
	ldd R25,y+19
	andi R25,0
	std y+21,R24
	.dbline 644
; 			        EIMSK&=~(1<<INT6);
	in R24,0x39
	andi R24,191
	out 0x39,R24
	.dbline 645
; 					fhz=I2cRead(SLA1_W,SLA1_R, addrxyh,addrxyl,1);  //读出
	ldi R24,1
	std y+4,R24
	ldd R0,y+21
	std y+2,R0
	ldd R0,y+20
	std y+0,R0
	ldi R18,161
	ldi R16,160
	xcall _I2cRead
	sts _fhz,R16
	.dbline 646
; 					k=i2c_rd_buff[0];           //转移命令
	lds R2,_i2c_rd_buff
	std y+13,R2
	.dbline 647
; 					EIMSK|=(1<<INT6);	
	in R24,0x39
	ori R24,64
	out 0x39,R24
	.dbline 648
; 					if(k==0x55)                 //探测器屏蔽
	mov R24,R2
	cpi R24,85
	brne L337
	.dbline 649
; 					{
	.dbline 650
; 					    gal3data&=0xfd;        //探测器屏蔽灯亮
	lds R24,_gal3data
	andi R24,253
	sts _gal3data,R24
	.dbline 651
; 						GAL3ADDR=gal3data;
	mov R2,R24
	sts 12288,R2
	.dbline 652
; 					}
	xjmp L338
L337:
	.dbline 653
; 					else if(k==0xa9)           //联动
	ldd R24,y+13
	cpi R24,169
	brne L339
	.dbline 654
; 					{
	.dbline 655
; 					    gal3data&=0xdf;        //联动屏蔽灯亮
	lds R24,_gal3data
	andi R24,223
	sts _gal3data,R24
	.dbline 656
; 						GAL3ADDR=gal3data;     //
	mov R2,R24
	sts 12288,R2
	.dbline 657
; 					}
L339:
L338:
	.dbline 658
; 			    }
L335:
	.dbline 659
L332:
	.dbline 632
	ldd R0,y+14
	inc R0
	std y+14,R0
L334:
	.dbline 632
	ldi R24,8
	ldd R0,y+14
	cp R24,R0
	brlo X7
	xjmp L331
X7:
	.dbline 660
; 			}	
; 			for(i=9;i<=31;i++)                 //9-32
	ldi R24,9
	std y+14,R24
	xjmp L344
L341:
	.dbline 661
; 			{
	.dbline 662
; 			    temp3=(i-1)%8;                       //余数
	ldi R17,8
	ldd R16,y+14
	subi R16,1
	xcall mod8u
	mov R22,R16
	.dbline 663
; 			    temp4=(i-1)/8;                       //商 
	ldd R24,y+14
	subi R24,1
	mov R10,R24
	lsr R10
	lsr R10
	lsr R10
	.dbline 664
; 				temp5=i%8;                           //余数
	ldi R17,8
	ldd R16,y+14
	xcall mod8u
	mov R12,R16
	.dbline 665
; 			    temp6=i/8;                           //商 
	ldd R14,y+14
	lsr R14
	lsr R14
	lsr R14
	.dbline 666
; 			    if(((detuse[fl][temp4]& xuanbit2[temp3])!=0)&&((detuse[fl][temp6]&xuanbit2[temp5])==0)) //该节点不投用下个节点投用
	lds R2,_fl
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_detuse
	ldi R25,>_detuse
	add R2,R24
	adc R3,R25
	movw R24,R28
	adiw R24,5
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	ldd R5,z+0
	and R5,R4
	breq L345
	movw R24,R28
	adiw R24,5
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	mov R30,R14
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	and R2,R4
	brne L345
	.dbline 667
; 			    {
	.dbline 668
; 				     gal3data&=0xfd;        //探测器屏蔽灯亮
	lds R24,_gal3data
	andi R24,253
	sts _gal3data,R24
	.dbline 669
; 					 GAL3ADDR=gal3data;
	mov R2,R24
	sts 12288,R2
	.dbline 670
; 					 break;
	xjmp L343
L345:
	.dbline 672
L342:
	.dbline 660
	ldd R0,y+14
	inc R0
	std y+14,R0
L344:
	.dbline 660
	ldi R24,31
	ldd R0,y+14
	cp R24,R0
	brlo X8
	xjmp L341
X8:
L343:
	.dbline 673
; 				}
; 			}
; 		}
L329:
	.dbline 674
L324:
	.dbline 623
	lds R24,_fl
	subi R24,255    ; addi 1
	sts _fl,R24
L326:
	.dbline 623
	ldi R24,32
	lds R2,_fl
	cp R24,R2
	brlo X9
	xjmp L323
X9:
L325:
	.dbline -2
L274:
	adiw R28,23
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r temp2 20 c
	.dbsym l temp1 22 c
	.dbsym l addrxyl 21 c
	.dbsym l addrxyh 20 c
	.dbsym l addrxy 18 i
	.dbsym l t 16 i
	.dbsym r temp6 14 c
	.dbsym r temp5 12 c
	.dbsym r temp4 10 c
	.dbsym r temp3 22 c
	.dbsym l xuanbit2 5 A[8:8]c
	.dbsym l j 15 c
	.dbsym l i 14 c
	.dbsym l k 13 c
	.dbend
	.area lit(rom, con, rel)
L348:
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.byte 0,0
	.area text(rom, con, rel)
	.dbfile F:\AVR\zhulast\communication.c
	.dbfunc e conv_auto_search _conv_auto_search fV
;           tem2 -> R10
;           tem1 -> R10
;        tempbuf -> y+0
;              i -> R22
;              t -> R20,R21
	.even
_conv_auto_search::
	xcall push_gset3
	sbiw R28,10
	.dbline -1
	.dbline 679
; 	}			     
; }
; 
; //转换器自动搜索
; void conv_auto_search(void)
; {
	.dbline 680
;     uchar i=0; uint t=0;
	clr R22
	.dbline 680
	clr R20
	clr R21
	.dbline 681
; 	uchar tempbuf[10]={0,0,0,0,0,0,0,0,0,0};
	ldi R24,<L348
	ldi R25,>L348
	movw R30,R28
	ldi R16,10
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 682
; 	uchar tem1=0,tem2=0;
	clr R10
	.dbline 682
	.dbline 683
; 	EEPROM_write(0x0008,0xff);
	ldi R18,255
	ldi R16,8
	ldi R17,0
	xcall _EEPROM_write
	.dbline 684
; 	EEPROM_write(0x0009,0xff);
	ldi R18,255
	ldi R16,9
	ldi R17,0
	xcall _EEPROM_write
	.dbline 685
; 	EEPROM_write(0x000a,0xff);
	ldi R18,255
	ldi R16,10
	ldi R17,0
	xcall _EEPROM_write
	.dbline 686
; 	EEPROM_write(0x000b,0xff);
	ldi R18,255
	ldi R16,11
	ldi R17,0
	xcall _EEPROM_write
	.dbline 687
; 	for(i=0;i<32;i++)
	xjmp L352
L349:
	.dbline 688
	ldi R24,<_can_cuo_flag
	ldi R25,>_can_cuo_flag
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
L350:
	.dbline 687
	inc R22
L352:
	.dbline 687
	cpi R22,32
	brlo L349
	.dbline 689
; 	    can_cuo_flag[i]=0;
; 	for(nnn=1;nnn<=32;nnn++)
	ldi R24,1
	sts _nnn,R24
	xjmp L356
L353:
	.dbline 690
; 	{
	.dbline 691
; 	    write_MCP(TXB0SIDH,nnn);         //接收方的地址
	lds R18,_nnn
	ldi R16,49
	xcall _write_MCP
	.dbline 692
;    		write_MCP(TXB0SIDL,0x08);      //扩展帧格式   
	ldi R18,8
	ldi R16,50
	xcall _write_MCP
	.dbline 693
;    		write_MCP(TXB0EID8,0x00);         //标识发送方地址
	clr R18
	ldi R16,51
	xcall _write_MCP
	.dbline 694
;    		write_MCP(TXB0EID0,0x00);         //485节点地址
	clr R18
	ldi R16,52
	xcall _write_MCP
	.dbline 695
;    		write_MCP(TXB0DLC, 8);         //发送8个字节
	ldi R18,8
	ldi R16,53
	xcall _write_MCP
	.dbline 696
;    		write_MCP(TXB0D0, 0xaa);  	   //命令字节1
	ldi R18,170
	ldi R16,54
	xcall _write_MCP
	.dbline 697
;    		write_MCP(TXB0D1, 0xbb);  	   //命令字节2
	ldi R18,187
	ldi R16,55
	xcall _write_MCP
	.dbline 698
;    		write_MCP(TXB0D2, 0x00);         
	clr R18
	ldi R16,56
	xcall _write_MCP
	.dbline 699
;    		write_MCP(TXB0D3, 0x00);         
	clr R18
	ldi R16,57
	xcall _write_MCP
	.dbline 700
;    		write_MCP(TXB0D4, 0x00);         
	clr R18
	ldi R16,58
	xcall _write_MCP
	.dbline 701
;    		write_MCP(TXB0D5, 0x00);         
	clr R18
	ldi R16,59
	xcall _write_MCP
	.dbline 702
;    		write_MCP(TXB0D6, 0x00);         
	clr R18
	ldi R16,60
	xcall _write_MCP
	.dbline 703
;    		write_MCP(TXB0D7, 0x00);
	clr R18
	ldi R16,61
	xcall _write_MCP
	.dbline 704
; 		mcu_ok(1);
	ldi R16,1
	xcall _mcu_ok
	.dbline 705
; 		wdr();
	xcall _wdr
	.dbline 706
; 		EIMSK&=~(1<<INT6) ;
	in R24,0x39
	andi R24,191
	out 0x39,R24
	.dbline 707
; 		UCSR1B&=~(1<<RXCIE1);  	
	lds R24,154
	andi R24,127
	sts 154,R24
	.dbline 708
; 		send_box_0();  //发送
	xcall _send_box_0
	.dbline 709
; 		delay_nms(5);
	ldi R16,5
	ldi R17,0
	xcall _delay_nms
	xjmp L358
L357:
	.dbline 711
; 		while(zhongbuff[0][2]!=0xbd)    //一直等待
; 		{
	.dbline 712
; 		    t++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 713
; 			if(t>10000)
	ldi R24,10000
	ldi R25,39
	cp R24,R20
	cpc R25,R21
	brsh L361
	.dbline 714
; 			{
	.dbline 715
; 				t=0;
	clr R20
	clr R21
	.dbline 716
; 				break;
	xjmp L359
L361:
	.dbline 718
L358:
	.dbline 710
	lds R24,_zhongbuff+2
	cpi R24,189
	brne L357
L359:
	.dbline 719
; 			}	 
; 		}
; 		t=0;
	clr R20
	clr R21
	.dbline 720
; 		mcu_ok(0);
	clr R16
	xcall _mcu_ok
	.dbline 721
; 		if(zhongbuff[0][2]==0xbd)        //正确返回时
	lds R24,_zhongbuff+2
	cpi R24,189
	brne L363
	.dbline 722
; 		{
	.dbline 723
; 		    save1(0x0008 ,nnn);
	lds R18,_nnn
	ldi R16,8
	ldi R17,0
	xcall _save1
	.dbline 724
; 		}	
L363:
	.dbline 725
	clr R2
	sts _zhongbuff+2,R2
	.dbline 726
	in R24,0x39
	ori R24,64
	out 0x39,R24
	.dbline 727
	lds R24,154
	ori R24,128
	sts 154,R24
	.dbline 728
	ldi R16,3
	ldi R17,0
	xcall _delay_nms
	.dbline 729
L354:
	.dbline 689
	lds R24,_nnn
	subi R24,255    ; addi 1
	sts _nnn,R24
L356:
	.dbline 689
	ldi R24,32
	lds R2,_nnn
	cp R24,R2
	brlo X10
	xjmp L353
X10:
	.dbline 730
; 		zhongbuff[0][2]=0;
; 		EIMSK|=(1<<INT6) ;
; 		UCSR1B|=(1<<RXCIE1); 
; 		delay_nms(3);
; 	} 
; 	delay_nms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_nms
	.dbline -2
L347:
	adiw R28,10
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r tem2 10 c
	.dbsym r tem1 10 c
	.dbsym l tempbuf 0 A[10:10]c
	.dbsym r i 22 c
	.dbsym r t 20 i
	.dbend
	.area lit(rom, con, rel)
L368:
	.byte 254,253
	.byte 251,247
	.byte 239,223
	.byte 191,127
L369:
	.byte 1,2
	.b

⌨️ 快捷键说明

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