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

📄 main.s

📁 一个小型的遥控玩具飞行机器人的电子调速器控制源程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	inc R18
L75:
	.dbline 262
	cpi R18,8
	brlo L77
	.dbline 269
; 		while(!rxd_flag);
; 		temp += Timer;
; 		rxd_flag  = 0;
; 		Timer= 0;
; 	}
; 	temp = (temp>>3);
	movw R2,R16
	lsr R3
	ror R2
	lsr R3
	ror R2
	lsr R3
	ror R2
	movw R16,R2
	.dbline 271
; 	
; 	return temp;
	.dbline -2
L71:
	.dbline 0 ; func end
	ret
	.dbsym r temp 16 i
	.dbsym r i 18 c
	.dbend
	.dbfunc e Buz _Buz fV
	.even
_Buz::
	.dbline -1
	.dbline 276
; }
; 
; 
; void Buz()
; {
	.dbline 277
; 	Pwm_set(20,1);
	ldi R18,1
	ldi R16,20
	rcall _Pwm_set
	.dbline 278
; 	delay(15);	
	ldi R16,15
	ldi R17,0
	rcall _delay
	.dbline 279
; 	Pwm_set(0,0);	
	clr R18
	clr R16
	rcall _Pwm_set
	.dbline 280
; 	delay(20);
	ldi R16,20
	ldi R17,0
	rcall _delay
	.dbline 281
; 	Pwm_set(20,1);	
	ldi R18,1
	ldi R16,20
	rcall _Pwm_set
	.dbline 282
; 	delay(15);	
	ldi R16,15
	ldi R17,0
	rcall _delay
	.dbline 283
; 	Pwm_set(0,0);
	clr R18
	clr R16
	rcall _Pwm_set
	.dbline -2
L79:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Rev_Setup _Rev_Setup fV
	.even
_Rev_Setup::
	.dbline -1
	.dbline 287
; }
; 
; void Rev_Setup()
; {
	.dbline 288
; 	e2rom[6] = EEPROM_read(6);
	ldi R16,6
	rcall _EEPROM_read
	sts _e2rom+6,R16
	.dbline 290
; 	
; 	if(key()>3)	
	rcall _key
	ldi R24,3
	cp R24,R16
	brsh L82
	.dbline 291
; 	{
	.dbline 292
; 		if(e2rom[6]) e2rom[6]=0;
	lds R2,_e2rom+6
	tst R2
	breq L84
	.dbline 292
	clr R2
	sts _e2rom+6,R2
	rjmp L85
L84:
	.dbline 293
; 		else e2rom[6] =1;
	ldi R24,1
	sts _e2rom+6,R24
L85:
	.dbline 294
; 		Buz();
	rcall _Buz
L89:
	.dbline 295
L90:
	.dbline 295
; 		while(!(PINB&0x80)); // 等待按键松开
	sbis 0x3,7
	rjmp L89
	.dbline 296
; 	}
L82:
	.dbline 297
; 	EEPROM_write(6,e2rom[6]);
	lds R18,_e2rom+6
	ldi R16,6
	rcall _EEPROM_write
	.dbline -2
L80:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Setup _Setup fV
;              i -> R20
	.even
_Setup::
	rcall push_gset1
	.dbline -1
	.dbline 306
; }
; 
; 
; 
; /*---------------------------------------------------------------
;    			中点设置
; ----------------------------------------------------------------*/
; void Setup()
; {
	.dbline 310
;  	 uchar i;
; 	 
; 
; 	if(key()>3)		// 设置
	rcall _key
	ldi R24,3
	cp R24,R16
	brlo X4
	rjmp L94
X4:
	.dbline 311
; 	{
L96:
	.dbline 312
; loop:	Buz();	
	rcall _Buz
	.dbline 313
; 		middle = compute();		// 中位设置
	rcall _compute
	sts _middle+1,R17
	sts _middle,R16
	.dbline 315
; 		
; 		delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	rjmp L98
L97:
	.dbline 317
	.dbline 318
	rcall _LED_set
	.dbline 319
	ldi R16,40
	ldi R17,0
	rcall _delay
	.dbline 320
L98:
	.dbline 316
; 		while(key()<3)
	rcall _key
	cpi R16,3
	brlo L97
	.dbline 321
; 		{
; 			LED_set();
; 			delay(40);
; 		}
; 		Buz();
	rcall _Buz
L100:
	.dbline 322
L101:
	.dbline 322
; 		while(!(PINB&0x80));
	sbis 0x3,7
	rjmp L100
	.dbline 323
; 		high = compute();		// 高位设置
	rcall _compute
	sts _high+1,R17
	sts _high,R16
	.dbline 325
; 		
; 		delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	rjmp L104
L103:
	.dbline 328
	.dbline 329
	rcall _LED_set
	.dbline 330
	rcall _LED_set
	.dbline 331
	ldi R16,40
	ldi R17,0
	rcall _delay
	.dbline 332
L104:
	.dbline 327
; 		
; 		while(key()<3)
	rcall _key
	cpi R16,3
	brlo L103
	.dbline 333
; 		{
; 			LED_set();
; 			LED_set();
; 			delay(40);
; 		}
; 		Buz();
	rcall _Buz
L106:
	.dbline 334
L107:
	.dbline 334
; 		while(!(PINB&0x80));
	sbis 0x3,7
	rjmp L106
	.dbline 335
; 		low = compute();		// W低位设置
	rcall _compute
	sts _low+1,R17
	sts _low,R16
	.dbline 336
; 		delay(50);
	ldi R16,50
	ldi R17,0
	rcall _delay
	.dbline 339
; 
; 		// 设置数据正确存盘
; 		if((low>800&&low<1300)&&(middle>1350&&middle<1650)&&(high>1700&&high<2200))
	ldi R24,800
	ldi R25,3
	lds R2,_low
	lds R3,_low+1
	cp R24,R2
	cpc R25,R3
	brlo X5
	rjmp L124
X5:
	movw R24,R2
	cpi R24,20
	ldi R30,5
	cpc R25,R30
	brlo X6
	rjmp L124
X6:
	ldi R24,1350
	ldi R25,5
	lds R2,_middle
	lds R3,_middle+1
	cp R24,R2
	cpc R25,R3
	brlo X7
	rjmp L124
X7:
	movw R24,R2
	cpi R24,114
	ldi R30,6
	cpc R25,R30
	brlo X8
	rjmp L124
X8:
	ldi R24,1700
	ldi R25,6
	lds R2,_high
	lds R3,_high+1
	cp R24,R2
	cpc R25,R3
	brlo X9
	rjmp L124
X9:
	movw R24,R2
	cpi R24,152
	ldi R30,8
	cpc R25,R30
	brlo X10
	rjmp L124
X10:
	.dbline 340
; 		{							
	.dbline 341
; 			PE1 = ((high-middle)*10)/256+2;
	lds R2,_middle
	lds R3,_middle+1
	movw R18,R24
	sub R18,R2
	sbc R19,R3
	ldi R16,10
	ldi R17,0
	rcall empy16s
	movw R24,R16
	mov R24,R25
	clr R25
	adiw R24,2
	sts _PE1+1,R25
	sts _PE1,R24
	.dbline 342
; 			PE2 = ((middle-low )*10)/256+2;
	lds R2,_low
	lds R3,_low+1
	lds R18,_middle
	lds R19,_middle+1
	sub R18,R2
	sbc R19,R3
	ldi R16,10
	ldi R17,0
	rcall empy16s
	movw R24,R16
	mov R24,R25
	clr R25
	adiw R24,2
	sts _PE2+1,R25
	sts _PE2,R24
	.dbline 344
; 			
; 			e2rom[0] = low/256;
	lds R2,_low
	lds R3,_low+1
	mov R2,R3
	clr R3
	sts _e2rom,R2
	.dbline 345
; 			e2rom[1] = low%256;
	lds R24,_low
	lds R25,_low+1
	andi R25,0
	sts _e2rom+1,R24
	.dbline 347
; 		
; 			e2rom[2] = high/256;
	lds R2,_high
	lds R3,_high+1
	mov R2,R3
	clr R3
	sts _e2rom+2,R2
	.dbline 348
; 			e2rom[3] = high%256;
	lds R24,_high
	lds R25,_high+1
	andi R25,0
	sts _e2rom+3,R24
	.dbline 350
; 		
; 			e2rom[4] = middle/256;
	lds R2,_middle
	lds R3,_middle+1
	mov R2,R3
	clr R3
	sts _e2rom+4,R2
	.dbline 351
; 			e2rom[5] = middle%256;
	lds R24,_middle
	lds R25,_middle+1
	andi R25,0
	sts _e2rom+5,R24
	.dbline 353
; 		
; 			Buz();
	rcall _Buz
	.dbline 354
; 			for(i=0;i<6;i++)	// 写EEPOM
	clr R20
	rjmp L119
L116:
	.dbline 355
; 			{
	.dbline 356
; 				EEPROM_write(i,e2rom[i]);
	ldi R24,<_e2rom
	ldi R25,>_e2rom
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	mov R16,R20
	rcall _EEPROM_write
	.dbline 357
; 				delay(5);
	ldi R16,5
	ldi R17,0
	rcall _delay
L120:
	.dbline 358
L121:
	.dbline 358
	rcall _compute
	cpi R16,70
	ldi R30,5
	cpc R17,R30
	brlo L120
	rcall _compute
	ldi R24,1650
	ldi R25,6
	cp R24,R16
	cpc R25,R17
	brlo L120
	.dbline 359
L117:
	.dbline 354
	inc R20
L119:
	.dbline 354
	cpi R20,6
	brlo L116
	.dbline 360
; 				while(compute()<1350||compute()>1650);
; 			}
; 			LED_set();
	rcall _LED_set
	.dbline 361
; 			delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 362
; 			LED_set();
	rcall _LED_set
	.dbline 363
; 		}
	rjmp L110
X3:
	.dbline 365
; 		else 	// 设置不对重来
; 		{
L123:
	.dbline 367
	.dbline 368
	rcall _LED_set
	.dbline 369
L124:
	.dbline 366
; 			while(key()<3)
	rcall _key
	cpi R16,3
	brlo L123
	.dbline 370
; 			{
; 				LED_set();
; 			}
; 			delay(100);
	ldi R16,100
	ldi R17,0
	rcall _delay
	.dbline 371
; 			goto loop;
	rjmp L96
L110:
	.dbline 374
L94:
	.dbline -2
L93:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e Read_E2rom _Read_E2rom fV
;              i -> R20
	.even
_Read_E2rom::
	rcall push_gset1
	.dbline -1
	.dbline 379
; 			
; 		}
; 	}	
; }
; 		
; 
; void Read_E2rom(void)
; {	
	.dbline 382
; 	uchar i;
; 	
; 	for(i=0;i<7;i++)	// 读EEPOM
	clr R20
	rjmp L130
L127:
	.dbline 383
	.dbline 384
	mov R16,R20
	rcall _EEPROM_read
	ldi R24,<_e2rom
	ldi R25,>_e2rom
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 385
	ldi R16,5
	ldi R17,0
	rcall _delay
	.dbline 386
L128:
	.dbline 382
	inc R20
L130:
	.dbline 382
	cpi R20,7
	brlo L127
	.dbline 388
; 	{
; 		e2rom[i] = EEPROM_read(i);
; 		delay(5);
; 	}
; 	
; 	low 	= e2rom[0]*256+e2rom[1];	// 油门低位
	lds R18,_e2rom
	clr R19
	ldi R16,256
	ldi R17,1
	rcall empy16s
	movw R2,R16
	lds R4,_e2rom+1
	clr R5
	add R2,R4
	adc R3,R5
	sts _low+1,R3
	sts _low,R2
	.dbline 389
; 	high 	= e2rom[2]*256+e2rom[3];	// 高位
	lds R18,_e2rom+2
	clr R19
	ldi R16,256
	ldi R17,1
	rcall empy16s
	movw R2,R16
	lds R4,_e2rom+3
	clr R5
	add R2,R4
	adc R3,R5
	sts _high+1,R3
	sts _high,R2
	.dbline 390
; 	middle 	= e2rom[4]*256+e2rom[5];	// 中位
	lds R18,_e2rom+4
	clr R19
	ldi R16,256
	ldi R17,1
	rcall empy16s
	movw R2,R16
	lds R4,_e2rom+5
	clr R5
	add R2,R4
	adc R3,R5
	sts _middle+1,R3
	sts _middle,R2
	.dbline 391
; 	REV		= e2rom[6];		// 倒车标致
	lds R2,_e2rom+6
	sts _REV,R2
	.dbline 393
; 	
; 	if((low>800&&low<1300)&&(middle>1350&&middle<1650)&&(high>1700&&high<2200))
	ldi R24,800
	ldi R25,3
	lds R2,_low
	lds R3,_low+1
	cp R24,R2
	cpc R25,R3
	brlo X11
	rjmp L137
X11:
	movw R24,R2
	cpi R24,20
	ldi R30,5
	cpc R25,R30
	brlo X12
	rjmp L137
X12:
	ldi R24,1350
	ldi R25,5
	lds R2,_middle
	lds R3,_middle+1
	cp R24,R2
	cpc R25,R3
	brlo X13
	rjmp L137
X13:
	movw R24,R2
	cpi R24,114
	ldi R30,6
	cpc R25,R30
	brsh L137
	ldi R24,1700
	ldi R25,6
	lds R2,_high
	lds R3,_high+1
	cp R24,R2
	cpc R25,R3
	brsh L137
	movw R24,R2
	cpi R24,152
	ldi R30,8
	cpc R25,R30
	brsh L137
	.dbline 394
; 	{	// 读起的数据正确
	.dbline 395
; 		PE1 = ((high-middle)*10)/256+2;
	lds R2,_middle
	lds R3,_middle+1
	movw R18,R24
	sub R18,R2
	sbc R19,R3
	ldi R16,10
	ldi R17,0
	rcall empy16s
	movw R24,R16
	mov R24,R25
	clr R25
	adiw R24,2
	sts _PE1+1,R25
	sts _PE1,R24
	.dbline 396
; 		PE2 = ((middle-low )*10)/256+2;
	lds R2,_low
	lds R3,_low+1
	lds R18,_middle
	lds R19,_middle+1
	sub R18,R2
	sbc R19,R3
	ldi R16,10
	ldi R17,0
	rcall empy16s
	movw R24,R16
	mov R24,R25
	clr R25
	adiw R24,2
	sts _PE2+1,R25
	sts _PE2,R24
	.dbline 397
; 	}
	rjmp L138
L137:
	.dbline 399
	.dbline 400
	ldi R24,23
	ldi R25,0
	sts _PE1+1,R25
	sts _PE1,R24
	.dbline 401
	sts _PE2+1,R25
	sts _PE2,R24
	.dbline 402
	ldi R24,1500
	ldi R25,5
	sts _middle+1,R25
	sts _middle,R24
	.dbline 403
	ldi R24,1100
	ldi R25,4
	sts _low+1,R25
	sts _low,R24
	.dbline 404
	ldi R24,1900
	ldi R25,7
	sts _high+1,R25
	sts _high,R24
	.dbline 405
	ldi R24,1
	sts _REV,R24
	.dbline 406
L138:
	.dbline -2
L126:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int0_isr
	.area text(rom, con, rel)
	.dbfile E:\TWINTI~1\main.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 416
; 	else // 读起的数据不正确使用默认值
; 	{
; 		PE1 = 23;
; 		PE2 = 23;
; 		middle = 1500;
; 		low	   = 1100;
; 		high   = 1900;
; 		REV	   = 1;
; 	}
; }
; 
; 
; 
; /*---------------------------------------------------------------
;    			INT0 中断油门接收
; ----------------------------------------------------------------*/
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 417
; 	if(EICRA==0x03)		// 上升沿开始记时
	lds R24,105
	cpi R24,3
	brne L140
	.dbline 418
; 	{
	.dbline 419
; 		TCNT1H = 0x00; 
	clr R2
	sts 133,R2
	.dbline 420
;  		TCNT1L = 0x00; 
	sts 132,R2
	.dbline 421
;  		TCCR1B = 0x02;  //start Timer1
	ldi R24,2
	sts 129,R24
	.dbline 422
; 		EICRA  = 0x02;
	sts 105,R24
	.dbline 423
; 	}
	rjmp L141
L140:
	.dbline 424
; 	else if(EICRA==0x02)	// 下降沿读计时数据
	lds R24,105
	cpi R24,2
	brne L142
	.dbline 425
; 	{
	.dbline 426
; 		time.data[0] = TCNT1L;
	lds R2,132
	sts _time,R2
	.dbline 427
; 		time.data[1] = TCNT1H;
	lds R2,133
	sts _time+1,R2
	.dbline 428
; 		Timer  	= time.temp;
	lds R2,_time
	lds R3,_time+1
	sts _Timer+1,R3
	sts _Timer,R2
	.dbline 429
; 		TCNT1H 	= 0x00; 
	clr R2
	sts 133,R2
	.dbline 430
;  		TCNT1L	= 0x00; 
	sts 132,R2
	.dbline 431
; 		EICRA  	= 0x03;
	ldi R24,3
	sts 105,R24
	.dbline 432
; 		rxd_flag =1;	// 置接收 flag
	ldi R24,1
	sts _rxd_flag,R24
	.dbline 433
; 	}
L142:
L141:
	.dbline -2
L139:
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 442
; }
; 
; 
; /*---------------------------------------------------------------
;    			main
; ----------------------------------------------------------------*/
; 
; void main(void)
; {
	.dbline 443
; 	delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 445
; 	
; 	init_devices();		// 初始化
	rcall _init_devices
	.dbline 447
; 	
; 	Rev_Setup();
	rcall _Rev_Setup
	.dbline 449
; 	
; 	Read_E2rom();		// 读EEPROM
	rcall _Read_E2rom
L146:
	.dbline 451
L147:
	.dbline 451
; 	
; 	while(!rxd_flag);	// 等待油门信号
	lds R2,_rxd_flag
	tst R2
	breq L146
	.dbline 452
; 	Buz();
	rcall _Buz
	.dbline 454
; 	
; 	LED_set();
	rcall _LED_set
	.dbline 455
; 	delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 456
; 	LED_set();
	rcall _LED_set
	.dbline 458
; 	
; 	rxd_flag = 0 ;
	clr R2
	sts _rxd_flag,R2
	rjmp L150
L149:
	.dbline 461
	.dbline 462
	rcall _Gun_set
	.dbline 463
	rcall _Setup
	.dbline 464
L150:
	.dbline 460
	rjmp L149
X14:
	.dbline -2
L145:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\TWINTI~1\main.c
_time::
	.blkb 2
	.dbunion 0 2 .1
	.dbfield 0 temp i
	.dbfield 0 data A[2:2]c
	.dbend
	.dbsym e time _time S[.1]
_heat::
	.blkb 1
	.dbsym e heat _heat c
_power::
	.blkb 1
	.dbsym e power _power c
_REV::
	.blkb 1
	.dbsym e REV _REV c
_low::
	.blkb 2
	.dbsym e low _low i
_middle::
	.blkb 2
	.dbsym e middle _middle i
_high::
	.blkb 2
	.dbsym e high _high i
_Timer::
	.blkb 2
	.dbsym e Timer _Timer i
_PWM::
	.blkb 1
	.dbsym e PWM _PWM c
_rxd_flag::
	.blkb 1
	.dbsym e rxd_flag _rxd_flag c
_mode::
	.blkb 1
	.dbsym e mode _mode c
_PE2::
	.blkb 2
	.dbsym e PE2 _PE2 i
_PE1::
	.blkb 2
	.dbsym e PE1 _PE1 i
_e2rom::
	.blkb 7
	.dbsym e e2rom _e2rom A[7:7]c

⌨️ 快捷键说明

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