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

📄 main.s

📁 基于MEAG16的电机PID控制程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 550
; 	//Delay100();
; 	delay_nus(600);
	ldi R16,600
	ldi R17,2
	xcall _delay_nus
	.dbline 551
; 	NRF_DDR&=~(1<<DATA);
	cbi 0x14,5
	.dbline -2
L69:
	.dbline 0 ; func end
	ret
	.dbend
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
_TxAddress::
	.blkb 2
	.area idata
	.byte 204,204
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
	.blkb 2
	.area idata
	.byte 204,204
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
	.dbsym e TxAddress _TxAddress A[4:4]c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
	.dbfunc e nRF2401_TxPacket _nRF2401_TxPacket fV
;      variable2 -> R20
;              i -> R22,R23
;          TxBuf -> R10,R11
	.even
_nRF2401_TxPacket::
	xcall push_gset3
	movw R10,R16
	.dbline -1
	.dbline 558
; }
; 
; //接收方通道硬件地址
; unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};
; //nRF2401 数据发送函数
; void nRF2401_TxPacket(unsigned char TxBuf[])
; {
	.dbline 562
; 	int i;
; 	unsigned char variable2;
; 	//CE=1;
; 	CE_SET();
	.dbline 562
	sbi 0x15,1
	.dbline 562
	.dbline 562
	.dbline 564
; 	//Delay100();
; 	delay_nus(600);
	ldi R16,600
	ldi R17,2
	xcall _delay_nus
	.dbline 565
; 	for (i=0;i< (ADDR_W/8);i++)//写入接收地址(按字节对齐)
	clr R22
	clr R23
L71:
	.dbline 566
	.dbline 567
	ldi R24,<_TxAddress
	ldi R25,>_TxAddress
	movw R30,R22
	add R30,R24
	adc R31,R25
	ldd R20,z+0
	.dbline 568
	mov R16,R20
	xcall _ByteWrite
	.dbline 569
L72:
	.dbline 565
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 565
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	brlt L71
	.dbline 570
; 	{
; 		variable2=TxAddress[i];
; 		ByteWrite(variable2);
; 	}
; 	for (i=0;i<(DATA1_W/8);i++)//写入需要发送的数据(按字节对齐)
	clr R22
	clr R23
L75:
	.dbline 571
	.dbline 572
	movw R30,R22
	add R30,R10
	adc R31,R11
	ldd R20,z+0
	.dbline 573
	mov R16,R20
	xcall _ByteWrite
	.dbline 574
L76:
	.dbline 570
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 570
	cpi R22,28
	ldi R30,0
	cpc R23,R30
	brlt L75
	.dbline 576
; 	{
; 		variable2=TxBuf[i];
; 		ByteWrite(variable2);
; 	}
; 	//CE=0; //CE 置低使发送有效
; 	CE_CLR();
	.dbline 576
	cbi 0x15,1
	.dbline 576
	.dbline 576
	.dbline 579
; 	//Delay100(); //时钟信号高电平保持
; 	//Delay100();
; 	delay_nus(1200);
	ldi R16,1200
	ldi R17,4
	xcall _delay_nus
	.dbline -2
L70:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r variable2 20 c
	.dbsym r i 22 I
	.dbsym r TxBuf 10 pc
	.dbend
	.dbfunc e nRF2401_RxPacket _nRF2401_RxPacket fc
;              i -> R20,R21
;          RxBuf -> R22,R23
	.even
_nRF2401_RxPacket::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 587
; }
; 
; /*----------------------------------------------------------------*/
; //检测并接收数据函数
; //返回  0:没有数据接收
; //      1:接收到数据
; unsigned char nRF2401_RxPacket(unsigned char *RxBuf)
; {
	.dbline 590
; 	unsigned int i;
; 	//DR1=1;
; 	NRF_DDR&=~(1<<DR1);
	cbi 0x14,2
	.dbline 591
; 	DR1_SET();
	.dbline 591
	sbi 0x15,2
	.dbline 591
	.dbline 591
	.dbline 593
; 	//if (DR1)
; 	if(DR1_STATE)
	in R24,0x13
	andi R24,4
	cpi R24,4
	brne L80
	.dbline 594
; 	{
	.dbline 595
; 		for (i=0; i<DATA1_W/8; i++)
	clr R20
	clr R21
	xjmp L85
L82:
	.dbline 596
	.dbline 597
	xcall _ByteRead
	movw R30,R22
	std z+0,R16
	.dbline 598
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 599
L83:
	.dbline 595
	subi R20,255  ; offset = 1
	sbci R21,255
L85:
	.dbline 595
	cpi R20,28
	ldi R30,0
	cpc R21,R30
	brlo L82
	.dbline 600
; 		{
; 			*RxBuf      = ByteRead();
; 				RxBuf++;
; 			}
; 		return 1;
	ldi R16,1
	xjmp L79
L80:
	.dbline 602
; 	}
; 	return 0;
	clr R16
	.dbline -2
L79:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r RxBuf 22 pc
	.dbend
	.area lit(rom, con, rel)
L87:
	.byte 'U,'a,'r,'t,32,'O,'K,32,0
L88:
	.byte 'N,'o,'w,32,'s,'p,'e,'e,'d,32,'i,'s,32,0
L89:
	.byte 'N,'o,'w,32,'a,'d,'c,32,'i,'s,32,0
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
	.dbfunc e main _main fV
;            add -> <dead>
;              i -> <dead>
;            ada -> <dead>
;           adcs -> y+23
;         speedi -> y+9
;         uartok -> y+0
;         speedb -> R22,R23
;         speeda -> R10,R11
;            sj3 -> R20,R21
;            sj1 -> R14,R15
;            sj0 -> y+35
;            sj2 -> R12,R13
	.even
_main::
	sbiw R28,37
	.dbline -1
	.dbline 613
; }
; 
; 
; 
; ///////////////////////////////////////////////////////////////////////////////////////////////////
; 
; unsigned char TxRxBuf[32];
; 
; 
; void main (void)
; {
	.dbline 615
; 	unsigned int ada,i,add,sj0,sj1,sj2,sj3,speeda,speedb;
; 	unsigned char uartok[] = "Uart OK ";
	ldi R24,<L87
	ldi R25,>L87
	movw R30,R28
	ldi R16,9
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 616
; 	unsigned char speedi[] = "Now speed is ";
	ldi R24,<L88
	ldi R25,>L88
	movw R30,R28
	adiw R30,9
	ldi R16,14
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 617
; 	unsigned char adcs[] = "Now adc is ";
	ldi R24,<L89
	ldi R25,>L89
	movw R30,R28
	adiw R30,23
	ldi R16,12
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 618
; 	port_init();
	xcall _port_init
	.dbline 619
; 	motor_init();
	xcall _motor_init
	.dbline 620
; 	uart_init(19200);
	ldi R16,19200
	ldi R17,75
	xcall _uart_init
	.dbline 621
; 	adc_init();
	xcall _adc_init
	.dbline 622
; 	uart_senddata(uartok);
	movw R16,R28
	xcall _uart_senddata
	.dbline 623
; 	Config2401(); 
	xcall _Config2401
	.dbline 624
; 	delay_nus(600);
	ldi R16,600
	ldi R17,2
	xcall _delay_nus
	.dbline 625
; 	SetRxMode(); //  设置RF2401 为接收模式
	xcall _SetRxMode
	xjmp L91
L90:
	.dbline 628
; 	                         
; 	while(1)
; 	{
	.dbline 629
; 	    delay_nms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay_nms
	.dbline 630
; 		if (nRF2401_RxPacket(TxRxBuf)==1)         //返回 1  表明有数据包接收到
	ldi R16,<_TxRxBuf
	ldi R17,>_TxRxBuf
	xcall _nRF2401_RxPacket
	cpi R16,1
	breq X1
	xjmp L93
X1:
	.dbline 631
; 		{
	.dbline 633
; 			
; 			sj0 = TxRxBuf[0];
	lds R2,_TxRxBuf
	clr R3
	std y+36,R3
	std y+35,R2
	.dbline 634
; 			sj0 <<= 8;
	movw R0,R2
	mov R1,R0
	clr R0
	std y+36,R1
	std y+35,R0
	.dbline 635
; 			sj0 |= TxRxBuf[1];
	lds R2,_TxRxBuf+1
	clr R3
	or R0,R2
	or R1,R3
	std y+36,R1
	std y+35,R0
	.dbline 636
; 			sj1 = TxRxBuf[2];
	lds R14,_TxRxBuf+2
	clr R15
	.dbline 637
; 			sj1 <<= 8;
	mov R15,R14
	clr R14
	.dbline 638
; 			sj1 |= TxRxBuf[3];
	lds R2,_TxRxBuf+3
	clr R3
	or R14,R2
	or R15,R3
	.dbline 639
; 			sj2 = TxRxBuf[4];
	lds R12,_TxRxBuf+4
	clr R13
	.dbline 640
; 			sj2 <<= 8;
	mov R13,R12
	clr R12
	.dbline 641
; 			sj2 |= TxRxBuf[5];
	lds R2,_TxRxBuf+5
	clr R3
	or R12,R2
	or R13,R3
	.dbline 642
; 			sj3 = TxRxBuf[6];
	lds R20,_TxRxBuf+6
	clr R21
	.dbline 643
; 			sj3 <<= 8;
	mov R21,R20
	clr R20
	.dbline 644
; 			sj3 |= TxRxBuf[7];
	lds R2,_TxRxBuf+7
	clr R3
	or R20,R2
	or R21,R3
	.dbline 645
; 			uart_send(sj2);
	movw R16,R12
	xcall _uart_send
	.dbline 646
; 			uart_send(sj2);
	movw R16,R12
	xcall _uart_send
	.dbline 647
; 			uart_send(sj2);
	movw R16,R12
	xcall _uart_send
	.dbline 648
; 			uart_send(sj2);
	movw R16,R12
	xcall _uart_send
	.dbline 649
; 			if(sj0>sj1)
	ldd R0,y+35
	ldd R1,y+36
	cp R14,R0
	cpc R15,R1
	brsh L102
	.dbline 650
; 			{
	.dbline 651
; 		        speeda = sj0-sj1;
	movw R10,R0
	sub R10,R14
	sbc R11,R15
	.dbline 652
; 				if(speeda<50)
	movw R24,R10
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L104
	.dbline 653
; 				    motor_a(1,0);
	clr R18
	clr R19
	ldi R16,1
	xcall _motor_a
	xjmp L103
L104:
	.dbline 655
; 				else
; 				{
	.dbline 656
; 					speeda = 5*(speeda-50);
	movw R18,R10
	subi R18,50
	sbci R19,0
	ldi R16,5
	ldi R17,0
	xcall empy16s
	movw R10,R16
	.dbline 657
; 					if(speeda > 1020)
	ldi R24,1020
	ldi R25,3
	cp R24,R16
	cpc R25,R17
	brsh L106
	.dbline 658
; 					    speeda = 1020;
	movw R10,R24
L106:
	.dbline 659
; 					motor_a(1,speeda);
	movw R18,R10
	ldi R16,1
	xcall _motor_a
	.dbline 660
; 				}
	.dbline 661
; 			}
	xjmp L103
L102:
	.dbline 663
; 		    else
; 			{
	.dbline 664
; 				speeda = sj1-sj0;
	movw R10,R14
	ldd R0,y+35
	ldd R1,y+36
	sub R10,R0
	sbc R11,R1
	.dbline 665
; 				if(speeda<50)
	movw R24,R10
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L108
	.dbline 666
; 				    motor_a(0,0);
	clr R18
	clr R19
	clr R16
	xcall _motor_a
	xjmp L109
L108:
	.dbline 668
; 				else
; 				{
	.dbline 669
; 					speeda = 5*(speeda-50);
	movw R18,R10
	subi R18,50
	sbci R19,0
	ldi R16,5
	ldi R17,0
	xcall empy16s
	movw R10,R16
	.dbline 670
; 					if(speeda > 1020)
	ldi R24,1020
	ldi R25,3
	cp R24,R16
	cpc R25,R17
	brsh L110
	.dbline 671
; 					    speeda = 1020;
	movw R10,R24
L110:
	.dbline 672
; 					motor_a(0,speeda);
	movw R18,R10
	clr R16
	xcall _motor_a
	.dbline 673
; 				}
L109:
	.dbline 674
; 			}
L103:
	.dbline 675
; 		    if(sj2>sj3)
	cp R20,R12
	cpc R21,R13
	brsh L112
	.dbline 676
; 			{
	.dbline 677
; 		        speedb = sj2-sj3;
	movw R22,R12
	sub R22,R20
	sbc R23,R21
	.dbline 678
; 				if(speedb<50)
	cpi R22,50
	ldi R30,0
	cpc R23,R30
	brsh L114
	.dbline 679
; 				    motor_b(1,0);
	clr R18
	clr R19
	ldi R16,1
	xcall _motor_b
	xjmp L113
L114:
	.dbline 681
; 				else
; 				{
	.dbline 682
; 				    speedb = 5*(speedb-50);
	movw R18,R22
	subi R18,50
	sbci R19,0
	ldi R16,5
	ldi R17,0
	xcall empy16s
	movw R22,R16
	.dbline 683
; 					if(speedb > 1020)
	ldi R24,1020
	ldi R25,3
	cp R24,R16
	cpc R25,R17
	brsh L116
	.dbline 684
; 					    speedb = 1020;
	ldi R22,1020
	ldi R23,3
L116:
	.dbline 685
; 					motor_b(1,speedb);
	movw R18,R22
	ldi R16,1
	xcall _motor_b
	.dbline 686
; 				}
	.dbline 687
; 			}
	xjmp L113
L112:
	.dbline 689
; 		    else
; 			{
	.dbline 690
; 				speedb = sj1-sj0;
	movw R22,R14
	ldd R0,y+35
	ldd R1,y+36
	sub R22,R0
	sbc R23,R1
	.dbline 691
; 				if(speedb<50)
	cpi R22,50
	ldi R30,0
	cpc R23,R30
	brsh L118
	.dbline 692
; 				    motor_b(0,0);
	clr R18
	clr R19
	clr R16
	xcall _motor_b
	xjmp L119
L118:
	.dbline 694
; 				else
; 				{	
	.dbline 695
; 					speedb = 5*(speedb-50);
	movw R18,R22
	subi R18,50
	sbci R19,0
	ldi R16,5
	ldi R17,0
	xcall empy16s
	movw R22,R16
	.dbline 696
; 					if(speedb > 1020)
	ldi R24,1020
	ldi R25,3
	cp R24,R16
	cpc R25,R17
	brsh L120
	.dbline 697
; 					    speedb = 1020;
	ldi R22,1020
	ldi R23,3
L120:
	.dbline 698
; 					motor_b(0,5*(speedb-50));
	movw R18,R22
	subi R18,50
	sbci R19,0
	ldi R16,5
	ldi R17,0
	xcall empy16s
	movw R18,R16
	clr R16
	xcall _motor_b
	.dbline 699
; 				}
L119:
	.dbline 700
; 			}
L113:
	.dbline 702
; 			
; 		}
L93:
	.dbline 704
L91:
	.dbline 627
	xjmp L90
X0:
	.dbline -2
L86:
	adiw R28,37
	.dbline 0 ; func end
	ret
	.dbsym l add 1 i
	.dbsym l i 1 i
	.dbsym l ada 1 i
	.dbsym l adcs 23 A[12:12]c
	.dbsym l speedi 9 A[14:14]c
	.dbsym l uartok 0 A[9:9]c
	.dbsym r speedb 22 i
	.dbsym r speeda 10 i
	.dbsym r sj3 20 i
	.dbsym r sj1 14 i
	.dbsym l sj0 35 i
	.dbsym r sj2 12 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
_TxRxBuf::
	.blkb 32
	.dbsym e TxRxBuf _TxRxBuf A[32:32]c
_DATA_BUF::
	.blkb 1
	.dbsym e DATA_BUF _DATA_BUF c

⌨️ 快捷键说明

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