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

📄 双足机器人.s

📁 这段源代码是基于atmel公司mega16单片机做的双足机器人控制程序
💻 S
📖 第 1 页 / 共 3 页
字号:
;  {
	.dbline 317
;    DDRA&=0xf8;       // PC0 1分别为探测光源的左 右端口,
	in R24,0x1a
	andi R24,248
	out 0x1a,R24
	.dbline 318
;    PORTA&=0xf8;
	in R24,0x1b
	andi R24,248
	out 0x1b,R24
	.dbline 319
;   ADMUX=0x60;         //初始化ADC0 
	ldi R24,96
	out 0x7,R24
	.dbline 320
;   ADCSRA=0x82;         //初始化ADC0,64分频
	ldi R24,130
	out 0x6,R24
	.dbline -2
L93:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e trace_light _trace_light fV
;            adc -> R20
	.even
_trace_light::
	xcall push_gset2
	.dbline -1
	.dbline 323
;  }
; void trace_light(void)
; {
	.dbline 325
;    unsigned char adc;
;     for(adc=0;adc<3;adc++)
	clr R20
	xjmp L98
L95:
	.dbline 326
; 	{
	.dbline 327
; 	   if(adc==0)
	tst R20
	brne L99
	.dbline 328
;           ADMUX=0x60;
	ldi R24,96
	out 0x7,R24
	xjmp L100
L99:
	.dbline 329
; 	        else if(adc==1)
	cpi R20,1
	brne L101
	.dbline 330
;                ADMUX=0x61;
	ldi R24,97
	out 0x7,R24
	xjmp L102
L101:
	.dbline 332
; 			     else 
;                     ADMUX=0x62;
	ldi R24,98
	out 0x7,R24
L102:
L100:
	.dbline 333
;    delay_us(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_us
	.dbline 334
;     ADCSRA|=0x40;
	sbi 0x6,6
	.dbline 335
;    delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 336
;    switch(adc)
	mov R22,R20
	clr R23
	cpi R22,0
	cpc R22,R23
	breq L106
X1:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L107
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L108
	xjmp L104
X2:
	.dbline 337
;        {
L106:
	.dbline 338
;         case 0: left=(ADC>>6);break;
	ldi R18,6
	ldi R19,0
	in R16,0x4
	in R17,0x5
	xcall lsr16
	sts _left+1,R17
	sts _left,R16
	.dbline 338
	xjmp L104
L107:
	.dbline 339
; 	    case 1: right=(ADC>>6);break;
	ldi R18,6
	ldi R19,0
	in R16,0x4
	in R17,0x5
	xcall lsr16
	sts _right+1,R17
	sts _right,R16
	.dbline 339
	xjmp L104
L108:
	.dbline 340
; 		case 2: interval=(ADC>>6);break;
	ldi R18,6
	ldi R19,0
	in R16,0x4
	in R17,0x5
	xcall lsr16
	sts _interval+1,R17
	sts _interval,R16
	.dbline 340
	.dbline 341
; 	        default:  break;
L104:
	.dbline 343
L96:
	.dbline 325
	inc R20
L98:
	.dbline 325
	cpi R20,3
	brsh X4
	xjmp L95
X4:
	.dbline 344
;         }
;     }
;   zhong=right-left;
	lds R2,_left
	lds R3,_left+1
	lds R4,_right
	lds R5,_right+1
	sub R4,R2
	sbc R5,R3
	sts _zhong+1,R5
	sts _zhong,R4
	.dbline 345
;   right=1024-right;
	lds R2,_right
	lds R3,_right+1
	ldi R24,1024
	ldi R25,4
	sub R24,R2
	sbc R25,R3
	sts _right+1,R25
	sts _right,R24
	.dbline 346
;   if(interval<420)
	lds R24,_interval
	lds R25,_interval+1
	cpi R24,164
	ldi R30,1
	cpc R25,R30
	brsh L109
	.dbline 347
;    {
	.dbline 348
;       TIMSK&=0xbf;//停止计时
	in R24,0x39
	andi R24,191
	out 0x39,R24
	.dbline 349
; 	       for(;;)
L111:
	.dbline 350
; 	            stop();
	xcall _stop
	.dbline 349
	.dbline 349
	xjmp L111
L109:
	.dbline 352
; 		}		
;    else if((interval>419)&&(zhong<left)&&(zhong<right)&&((left<(right+10))|(right<(left+10))))
	ldi R24,419
	ldi R25,1
	lds R2,_interval
	lds R3,_interval+1
	cp R24,R2
	cpc R25,R3
	brlo X5
	xjmp L115
X5:
	lds R2,_left
	lds R3,_left+1
	lds R4,_zhong
	lds R5,_zhong+1
	cp R4,R2
	cpc R5,R3
	brsh L115
	lds R2,_right
	lds R3,_right+1
	cp R4,R2
	cpc R5,R3
	brsh L115
	movw R24,R2
	adiw R24,10
	lds R2,_left
	lds R3,_left+1
	cp R2,R24
	cpc R3,R25
	brsh L117
	ldi R22,1
	ldi R23,0
	xjmp L118
L117:
	clr R22
	clr R23
L118:
	lds R24,_left
	lds R25,_left+1
	adiw R24,10
	lds R2,_right
	lds R3,_right+1
	cp R2,R24
	cpc R3,R25
	brsh L119
	ldi R20,1
	ldi R21,0
	xjmp L120
L119:
	clr R20
	clr R21
L120:
	movw R2,R22
	or R2,R20
	or R3,R21
	tst R2
	brne X3
	tst R3
	breq L115
X3:
	.dbline 353
;               {run();}
	.dbline 353
	xcall _run
	.dbline 353
	xjmp L116
L115:
	.dbline 354
; 	      else if((interval>419)&&(zhong<left)&&(zhong<right)&&(left>(right+10)))
	ldi R24,419
	ldi R25,1
	lds R2,_interval
	lds R3,_interval+1
	cp R24,R2
	cpc R25,R3
	brsh L121
	lds R2,_left
	lds R3,_left+1
	lds R4,_zhong
	lds R5,_zhong+1
	cp R4,R2
	cpc R5,R3
	brsh L121
	lds R2,_right
	lds R3,_right+1
	cp R4,R2
	cpc R5,R3
	brsh L121
	movw R24,R2
	adiw R24,10
	lds R2,_left
	lds R3,_left+1
	cp R24,R2
	cpc R25,R3
	brsh L121
	.dbline 355
; 		       {turn_left();}
	.dbline 355
	xcall _turn_left
	.dbline 355
	xjmp L122
L121:
	.dbline 356
; 		   else if((interval>419)&&(zhong<left)&&(zhong<right)&&(right>(left+10)))
	ldi R24,419
	ldi R25,1
	lds R2,_interval
	lds R3,_interval+1
	cp R24,R2
	cpc R25,R3
	brsh L123
	lds R2,_left
	lds R3,_left+1
	lds R4,_zhong
	lds R5,_zhong+1
	cp R4,R2
	cpc R5,R3
	brsh L123
	lds R2,_right
	lds R3,_right+1
	cp R4,R2
	cpc R5,R3
	brsh L123
	lds R24,_left
	lds R25,_left+1
	adiw R24,10
	cp R24,R2
	cpc R25,R3
	brsh L123
	.dbline 357
; 		 	   {turn_right();}
	.dbline 357
	xcall _turn_right
	.dbline 357
	xjmp L124
L123:
	.dbline 358
;                   else  if((interval>419)&&(left<zhong)&&(left<right))
	ldi R24,419
	ldi R25,1
	lds R2,_interval
	lds R3,_interval+1
	cp R24,R2
	cpc R25,R3
	brsh L125
	lds R2,_zhong
	lds R3,_zhong+1
	lds R4,_left
	lds R5,_left+1
	cp R4,R2
	cpc R5,R3
	brsh L125
	lds R2,_right
	lds R3,_right+1
	cp R4,R2
	cpc R5,R3
	brsh L125
	.dbline 359
;                       {turn_right();}
	.dbline 359
	xcall _turn_right
	.dbline 359
	xjmp L126
L125:
	.dbline 360
; 		            else if((interval>419)&&(right<left)&&(right<left))
	ldi R24,419
	ldi R25,1
	lds R2,_interval
	lds R3,_interval+1
	cp R24,R2
	cpc R25,R3
	brsh L127
	lds R2,_left
	lds R3,_left+1
	lds R4,_right
	lds R5,_right+1
	cp R4,R2
	cpc R5,R3
	brsh L127
	cp R4,R2
	cpc R5,R3
	brsh L127
	.dbline 361
; 		                  {turn_left();} 
	.dbline 361
	xcall _turn_left
	.dbline 361
L127:
L126:
L124:
L122:
L116:
	.dbline 362
; delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline -2
L94:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r adc 20 c
	.dbend
	.dbfunc e time_inite _time_inite fV
	.even
_time_inite::
	.dbline -1
	.dbline 369
; }
; ////////////////////探测光源函数///////////////////////////////////
; 
; 
; ///////////////计时中断函数/////////////////////////////////////////
; void time_inite(void)
; {
	.dbline 370
; TCCR2|= 0x07;//分频比1024
	in R24,0x25
	ori R24,7
	out 0x25,R24
	.dbline 371
;  mini=0;
	clr R2
	sts _mini,R2
	.dbline 372
;  second=0;
	sts _second,R2
	.dbline 373
;  minisecond=0;
	sts _minisecond,R2
	.dbline -2
L129:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 16
	jmp _time2_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
	.dbfunc e time2_isr _time2_isr fV
	.even
_time2_isr::
	xcall push_lset
	sbiw R28,3
	.dbline -1
	.dbline 378
; }
; 
; #pragma interrupt_handler  time2_isr:5
; void   time2_isr(void)
;  {
	.dbline 379
;  TCNT2=0xb2;
	ldi R24,178
	out 0x24,R24
	.dbline 380
;  minisecond++;
	lds R24,_minisecond
	subi R24,255    ; addi 1
	sts _minisecond,R24
	.dbline 381
;  if (minisecond<100)//计算总时间
	cpi R24,100
	brsh L131
	.dbline 382
; 	  	;
	xjmp L132
L131:
	.dbline 384
; 	  else
; 	    {
	.dbline 385
; 		 minisecond=0;
	clr R2
	sts _minisecond,R2
	.dbline 386
; 		 if (second<60)
	lds R24,_second
	cpi R24,60
	brsh L133
	.dbline 387
; 		    second++;
	subi R24,255    ; addi 1
	sts _second,R24
	xjmp L134
L133:
	.dbline 389
; 		 else  
; 		    {
	.dbline 390
; 			second=0;
	clr R2
	sts _second,R2
	.dbline 391
; 			minute++;
	lds R24,_minute
	subi R24,255    ; addi 1
	sts _minute,R24
	.dbline 392
; 			if(minute==100)
	cpi R24,100
	brne L135
	.dbline 393
; 			  minute=0;
	sts _minute,R2
L135:
	.dbline 394
; 	      }
L134:
	.dbline 395
; 		 }
L132:
	.dbline 396
;         display_time(10,minute,second,0);
	clr R2
	std y+2,R2
	lds R2,_second
	std y+0,R2
	lds R18,_minute
	ldi R16,10
	xcall _display_time
	.dbline -2
L130:
	adiw R28,3
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
;              i -> <dead>
	.even
_main::
	.dbline -1
	.dbline 404
;   
; } 
; ///////////////计时中断函数/////////////////////////////////////////
; 
; 
; //////////////主函数///////////////////////////////////////////////
; void main(void)
; {
	.dbline 406
;  unsigned  int i;  
;  MCUCSR|=0x80;//禁止PC5第二功能,使之为普通I/O口
	in R24,0x34
	ori R24,128
	out 0x34,R24
	.dbline 407
;  MCUCSR|=0x80;
	in R24,0x34
	ori R24,128
	out 0x34,R24
	.dbline 408
;  DDRD|=0xc0;//PD 6 7控制左右电机
	in R24,0x11
	ori R24,192
	out 0x11,R24
	.dbline 409
;  DDRC&=0xf8;//PC0 1 2为右中左红外传感器输入
	in R24,0x14
	andi R24,248
	out 0x14,R24
	.dbline 410
;  DDRC|=0x18;//PC3,4控制显示,PC3传送数据,PC4为时钟信号线
	in R24,0x14
	ori R24,24
	out 0x14,R24
	.dbline 411
;  PORTC&=0xe7;
	in R24,0x15
	andi R24,231
	out 0x15,R24
	.dbline 412
;  PORTC&=0xf8;
	in R24,0x15
	andi R24,248
	out 0x15,R24
	.dbline 413
;  PORTD&=0x3f;
	in R24,0x12
	andi R24,63
	out 0x12,R24
	.dbline 414
;  time_inite();
	xcall _time_inite
	.dbline 416
;  
;  SEI();
	sei
	.dbline 417
;   TIMSK|=0x40;//开始计时
	in R24,0x39
	ori R24,64
	out 0x39,R24
	.dbline 422
; //while(1)stop();
; 
; //while(1)	LeftUp(2);//抬左脚
; 
; 	delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 423
; 	LeftFwd(10);//迈左脚步
	ldi R16,10
	xcall _LeftFwd
	.dbline 424
; 	delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	xjmp L139
L138:
	.dbline 427
	.dbline 429
	ldi R16,5
	xcall _RightUp
	.dbline 430
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 431
	ldi R16,20
	xcall _RightFwd
	.dbline 432
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 434
	ldi R16,7
	xcall _LeftUp
	.dbline 435
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 436
	ldi R16,20
	xcall _LeftFwd
	.dbline 437
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 440
L139:
	.dbline 426
	xjmp L138
X6:
	.dbline -2
L137:
	.dbline 0 ; func end
	ret
	.dbsym l i 1 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\eda\桌面\双足机器人.c
_interval::
	.blkb 2
	.dbsym e interval _interval i
_zhong::
	.blkb 2
	.dbsym e zhong _zhong i
_right::
	.blkb 2
	.dbsym e right _right i
_left::
	.blkb 2
	.dbsym e left _left i
_minisecond::
	.blkb 1
	.dbsym e minisecond _minisecond c
_mini::
	.blkb 1
	.dbsym e mini _mini c
_second::
	.blkb 1
	.dbsym e second _second c
_sec::
	.blkb 1
	.dbsym e sec _sec c

⌨️ 快捷键说明

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