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

📄 jidong.lst

📁 基于m16的寻迹寻光小车程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
     2E5 91E9      LD	R30,Y+
     2E6 91B9      LD	R27,Y+
     2E7 91A9      LD	R26,Y+
     2E8 9199      LD	R25,Y+
     2E9 9189      LD	R24,Y+
     2EA 9139      LD	R19,Y+
     2EB 9129      LD	R18,Y+
     2EC 9119      LD	R17,Y+
     2ED 9109      LD	R16,Y+
     2EE 9099      LD	R9,Y+
     2EF 9089      LD	R8,Y+
     2F0 9079      LD	R7,Y+
     2F1 9069      LD	R6,Y+
     2F2 9059      LD	R5,Y+
     2F3 9049      LD	R4,Y+
     2F4 9039      LD	R3,Y+
     2F5 9029      LD	R2,Y+
     2F6 9019      LD	R1,Y+
     2F7 9009      LD	R0,Y+
     2F8 9518      RETI
(0213) }
(0214) //////////////////////////////寻光部分结束///////////////////////////////
(0215) 
(0216) 
(0217) ///////////////////////////////避障部分///////////////////////////////
(0218) //定义全局变量
(0219) uchar model = 0;
(0220) uchar model_a = 0;
(0221) uchar flag_zhangai;
(0222) long int count_1 = 0;
(0223) long int count_2 = 0;
(0224) long int count_3 = 0;
(0225) 
(0226) //time0 allow
(0227) void time_off( void )
(0228) {
(0229)  	 TCCR0 &=~ ( 1 << OCIE0 );
_time_off:
     2F9 B783      IN	R24,0x33
     2FA 7F8D      ANDI	R24,0xFD
     2FB BF83      OUT	0x33,R24
     2FC 9508      RET
(0230) }
(0231) 
(0232) //time0 ON
(0233) void time_on( void )
(0234) {
(0235)  	 TCCR0 |= ( 1 << OCIE0 );
_time_on:
     2FD B783      IN	R24,0x33
     2FE 6082      ORI	R24,2
     2FF BF83      OUT	0x33,R24
     300 9508      RET
(0236) }
(0237) 
(0238) //TIMER0 initialize - prescale:256
(0239) // WGM: CTC
(0240) // desired value: 4mSec
(0241) // actual value:  4.032mSec (-0.8%)
(0242) void timer0_init(void)
(0243) {
(0244)  TCCR0 = 0x00; //stop
_timer0_init:
     301 2422      CLR	R2
     302 BE23      OUT	0x33,R2
(0245)  TCNT0 = 0x83; //set count
     303 E883      LDI	R24,0x83
     304 BF82      OUT	0x32,R24
(0246)  OCR0  = 0x7D;  //set compare
     305 E78D      LDI	R24,0x7D
     306 BF8C      OUT	0x3C,R24
(0247)  TCCR0 = 0x0C; //start timer
     307 E08C      LDI	R24,0xC
     308 BF83      OUT	0x33,R24
     309 9508      RET
(0248) }
(0249) 
(0250) //扫描端口初始化
(0251) void hw_port_init( void )
(0252) {
(0253)     DDRC &=~ ( 1 << PC0 ) | ( 1 << PC1 );     //定义PC0, PC1口为上拉
_hw_port_init:
     30A 98A0      CBI	0x14,0
(0254)     PORTC |= ( 1 << PC0 ) | ( 1 << PC1 );
     30B B385      IN	R24,0x15
     30C 6083      ORI	R24,3
     30D BB85      OUT	0x15,R24
     30E 9508      RET
(0255) }
(0256) 
(0257) //红外返回值
(0258) uchar int_scan( void )   //判断障碍,并执行相应动作
(0259) {
(0260)     switch( PINC & 0b00000011 )
_int_scan:
     30F B303      IN	R16,0x13
     310 2711      CLR	R17
     311 7003      ANDI	R16,3
     312 7010      ANDI	R17,0
     313 3000      CPI	R16,0
     314 0701      CPC	R16,R17
     315 F049      BEQ	0x031F
     316 3001      CPI	R16,1
     317 E0E0      LDI	R30,0
     318 071E      CPC	R17,R30
     319 F079      BEQ	0x0329
     31A 3002      CPI	R16,2
     31B E0E0      LDI	R30,0
     31C 071E      CPC	R17,R30
     31D F031      BEQ	0x0324
     31E C00F      RJMP	0x032E
(0261)     {
(0262)         case 0b00000000: model = 1; return 1; break;     //左右同时遇到障碍
     31F E081      LDI	R24,1
     320 9380 007D STS	model,R24
     322 E001      LDI	R16,1
     323 C00E      RJMP	0x0332
(0263)         case 0b00000010: model = 2; return 2; break;     //左遇到障碍
     324 E082      LDI	R24,2
     325 9380 007D STS	model,R24
     327 E002      LDI	R16,2
     328 C009      RJMP	0x0332
(0264)         case 0b00000001: model = 3; return 3; break;     //右遇到障碍
     329 E083      LDI	R24,3
     32A 9380 007D STS	model,R24
     32C E003      LDI	R16,3
     32D C004      RJMP	0x0332
(0265)         default : model = 0; return 0; break;            //没有遇到障碍
     32E 2422      CLR	R2
     32F 9220 007D STS	model,R2
     331 2700      CLR	R16
     332 9508      RET
_timer0_comp_isr:
     333 920A      ST	R0,-Y
     334 921A      ST	R1,-Y
     335 922A      ST	R2,-Y
     336 923A      ST	R3,-Y
     337 924A      ST	R4,-Y
     338 925A      ST	R5,-Y
     339 926A      ST	R6,-Y
     33A 927A      ST	R7,-Y
     33B 928A      ST	R8,-Y
     33C 929A      ST	R9,-Y
     33D 930A      ST	R16,-Y
     33E 931A      ST	R17,-Y
     33F 932A      ST	R18,-Y
     340 933A      ST	R19,-Y
     341 938A      ST	R24,-Y
     342 939A      ST	R25,-Y
     343 93AA      ST	R26,-Y
     344 93BA      ST	R27,-Y
     345 93EA      ST	R30,-Y
     346 93FA      ST	R31,-Y
     347 B60F      IN	R0,0x3F
     348 920A      ST	R0,-Y
     349 92AA      ST	R10,-Y
     34A 92BA      ST	R11,-Y
     34B 972C      SBIW	R28,0xC
(0266)     }
(0267) }
(0268) 
(0269) 
(0270) #pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
(0271) void timer0_comp_isr(void)        // CTC模式, 比较匹配中断服务程序
(0272) {	
(0273) 	//CLI();
(0274) 	//time_off();			  
(0275) 	
(0276) 	if( model == 0 )              //如果没有障碍返回值,刚继续前一动作
     34C 9020 007D LDS	R2,model
     34E 2022      TST	R2
     34F F451      BNE	0x035A
(0277) 	{
(0278) 	    if( flag_zhangai == 1 ) model = model_a;
     350 9180 008B LDS	R24,flag_zhangai
     352 3081      CPI	R24,1
     353 F429      BNE	0x0359
     354 9020 007E LDS	R2,model_a
     356 9220 007D STS	model,R2
     358 C001      RJMP	0x035A
(0279) 	    else ADC_start();
     359 DE66      RCALL	_ADC_start
(0280) 	}
(0281) 	
(0282) 	if( model == 1 )         //左方右方有障碍, 即是前方有障碍
     35A 9180 007D LDS	R24,model
     35C 3081      CPI	R24,1
     35D F009      BEQ	0x035F
     35E C09A      RJMP	0x03F9
(0283) 	{
(0284) 	    model_a = model;
     35F 2E28      MOV	R2,R24
     360 9220 007E STS	model_a,R2
(0285) 	    flag_zhangai = 1;
     362 E081      LDI	R24,1
     363 9380 008B STS	flag_zhangai,R24
(0286) 	    turn_r();
     365 DD1C      RCALL	_turn_r
(0287) 	    if( int_scan() == 0 )
     366 DFA8      RCALL	_int_scan
     367 2300      TST	R16
     368 F009      BEQ	0x036A
     369 C08F      RJMP	0x03F9
(0288) 	    {
(0289)             if( ++count_1 >= 100 )
     36A E081      LDI	R24,1
     36B E090      LDI	R25,0
     36C E0A0      LDI	R26,0
     36D E0B0      LDI	R27,0
     36E 9040 0081 LDS	R4,count_1+2
     370 9050 0082 LDS	R5,count_1+3
     372 9020 007F LDS	R2,count_1
     374 9030 0080 LDS	R3,count_1+1
     376 0E28      ADD	R2,R24
     377 1E39      ADC	R3,R25
     378 1E4A      ADC	R4,R26
     379 1E5B      ADC	R5,R27
     37A 8228      STD	Y+0,R2
     37B 8239      STD	Y+1,R3
     37C 824A      STD	Y+2,R4
     37D 825B      STD	Y+3,R5
     37E 8028      LDD	R2,Y+0
     37F 8039      LDD	R3,Y+1
     380 804A      LDD	R4,Y+2
     381 805B      LDD	R5,Y+3
     382 9230 0080 STS	count_1+1,R3
     384 9220 007F STS	count_1,R2
     386 9250 0082 STS	count_1+3,R5
     388 9240 0081 STS	count_1+2,R4
     38A E684      LDI	R24,0x64
     38B E090      LDI	R25,0
     38C E0A0      LDI	R26,0
     38D E0B0      LDI	R27,0
     38E 1628      CP	R2,R24
     38F 0639      CPC	R3,R25
     390 064A      CPC	R4,R26
     391 065B      CPC	R5,R27
     392 F40C      BGE	0x0394
     393 C065      RJMP	0x03F9
(0290)             {
(0291)                 go_ahead();
     394 DCD8      RCALL	_go_ahead
(0292)                 if( ++count_1 >= 250 )
     395 E081      LDI	R24,1
     396 E090      LDI	R25,0
     397 E0A0      LDI	R26,0
     398 E0B0      LDI	R27,0
     399 9040 0081 LDS	R4,count_1+2
     39B 9050 0082 LDS	R5,count_1+3
     39D 9020 007F LDS	R2,count_1
     39F 9030 0080 LDS	R3,count_1+1
     3A1 0E28      ADD	R2,R24
     3A2 1E39      ADC	R3,R25
     3A3 1E4A      ADC	R4,R26
     3A4 1E5B      ADC	R5,R27
     3A5 822C      STD	Y+4,R2
     3A6 823D      STD	Y+5,R3
     3A7 824E      STD	Y+6,R4
     3A8 825F      STD	Y+7,R5
     3A9 802C      LDD	R2,Y+4
     3AA 803D      LDD	R3,Y+5
     3AB 804E      LDD	R4,Y+6
     3AC 805F      LDD	R5,Y+7
     3AD 9230 0080 STS	count_1+1,R3
     3AF 9220 007F STS	count_1,R2
     3B1 9250 0082 STS	count_1+3,R5
     3B3 9240 0081 STS	count_1+2,R4
     3B5 EF8A      LDI	R24,0xFA
     3B6 E090      LDI	R25,0
     3B7 E0A0      LDI	R26,0
     3B8 E0B0      LDI	R27,0
     3B9 1628      CP	R2,R24
     3BA 0639      CPC	R3,R25
     3BB 064A      CPC	R4,R26
     3BC 065B      CPC	R5,R27
     3BD F1DC      BLT	0x03F9
(0293)                 {
(0294)                     turn_l();
     3BE DCBC      RCALL	_turn_l
(0295)                     if( ++count_1 >= 350 )
     3BF E081      LDI	R24,1
     3C0 E090      LDI	R25,0
     3C1 E0A0      LDI	R26,0
     3C2 E0B0      LDI	R27,0
     3C3 9040 0081 LDS	R4,count_1+2
     3C5 9050 0082 LDS	R5,count_1+3
     3C7 9020 007F LDS	R2,count_1
     3C9 9030 0080 LDS	R3,count_1+1
     3CB 0E28      ADD	R2,R24
     3CC 1E39      ADC	R3,R25
     3CD 1E4A      ADC	R4,R26
     3CE 1E5B      ADC	R5,R27
     3CF 8628      STD	Y+8,R2
     3D0 8639      STD	Y+9,R3
     3D1 864A      STD	Y+10,R4
     3D2 865B      STD	Y+11,R5
     3D3 8428      LDD	R2,Y+8
     3D4 8439      LDD	R3,Y+9
     3D5 844A      LDD	R4,Y+10
     3D6 845B      LDD	R5,Y+11
     3D7 9230 0080 STS	count_1+1,R3
     3D9 9220 007F STS	count_1,R2
     3DB 9250 0082 STS	count_1+3,R5
     3DD 9240 0081 STS	count_1+2,R4
     3DF E58E      LDI	R24,0x5E
     3E0 E091      LDI	R25,1
     3E1 E0A0      LDI	R26,0
     3E2 E0B0      LDI	R27,0
     3E3 1628      CP	R2,R24
     3E4 0639      CPC	R3,R25
     3E5 064A      CPC	R4,R26
     3E6 065B      CPC	R5,R27
     3E7 F08C      BLT	0x03F9
(0296)                     {
(0297)                         model = 0;
     3E8 2422      CLR	R2
     3E9 9220 007D STS	model,R2
(0298)                         count_1 = 0;
     3EB E080      LDI	R24,0
     3EC E090      LDI	R25,0
     3ED E0A0      LDI	R26,0
     3EE E0B0      LDI	R27,0
     3EF 9390 0080 STS	count_1+1,R25
     3F1 9380 007F STS	count_1,R24
     3F3 93B0 0082 STS	count_1+3,R27
     3F5 93A0 0081 STS	count_1+2,R26
(0299)                         flag_zhangai = 0;
     3F7 9220 008B STS	flag_zhangai,R2
(0300)                     }
(0301)                 }
(0302)             }	
(0303)         }
(0304)     }
(0305) 
(0306)     if( model == 2 )              //左边有障碍
     3F9 9180 007D LDS	R24,model
     3FB 3082      CPI	R24,2
     3FC F009      BEQ	0x03FE
     3FD C09A      RJMP	0x0498
(0307)     {
(0308) 		model_a = model;
     3FE 2E28      MOV	R2,R24
     3FF 9220 007E STS	model_a,R2
(0309) 	    flag_zhangai = 1;
     401 E081      LDI	R24,1
     402 9380 008B STS	flag_zhangai,R24
(0310) 	    turn_r();
     404 DC7D      RCALL	_turn_r
(0311) 	    if( int_scan() == 0 )
     405 DF09      RCALL	_int_scan
     406 2300      TST	R16
     407 F009      BEQ	0x0409
     408 C08F      RJMP	0x0498
(0312) 	    {
(0313)             if( ++count_2 >= 100 )
     409 E081      LDI	R24,1
     40A E090      LDI	R25,0
     40B E0A0      LDI	R26,0
     40C E0B0      LDI	R27,0
     40D 9040 0085 LDS	R4,count_2+2
     40F 9050 0086 LDS	R5,count_2+3
     411 9020 0083 LDS	R2,count_2
     413 9030 0084 LDS	R3,count_2+1
     415 0E28      ADD	R2,R24
     416 1E39      ADC	R3,R25
     417 1E4A      ADC	R4,R26
     418 1E5B      ADC	R5,R27
     419 8228      STD	Y+0,R2
     41A 8239      STD	Y+1,R3
     41B 824A      STD	Y+2,R4
     41C 825B      STD	Y+3,R5
     41D 8028      LDD	R2,Y+0
     41E 8039      LDD	R3,Y+1
     41F 804A      LDD	R4,Y+2
     420 805B      LDD	R5,Y+3
     421 9230 0084 STS	count_2+1,R3
     423 9220 0083 STS	count_2,R2
     425 9250 0086 STS	count_2+3,R5
     427 9240 0085 STS	count_2+2,R4
     429 E684      LDI	R24,0x64
     42A E090      LDI	R25,0
     42B E0A0      LDI	R26,0
     42C E0B0      LDI	R27,0
     42D 1628      CP	R2,R24
     42E 0639      CPC	R3,R25
     42F 064A      CPC	R4,R26
     430 065B      CPC	R5,R27
     431 F40C      BGE	0x0433
     432 C065      RJMP	0x0498
(0314)             {
(0315)                 go_ahead();
     433 DC39      RCALL	_go_ahead
(0316)                 if( ++count_2 >= 250 )
     434 E081      LDI	R24,1
     435 E090      LDI	R25,0
     436 E0A0      LDI	R26,0
     437 E0B0      LDI	R27,0
     438 9040 0085 LDS	R4,count_2+2
     43A 9050 0086 LDS	R5,count_2+3
     43C 9020 0083 LDS	R2,count_2
     43E 9030 0084 LDS	R3,count_2+1
     440 0E28      ADD	R2,R24
     441 1E39      ADC	R3,R25
     442 1E4A      ADC	R4,R26
     443 1E5B      ADC	R5,R27
     444 822C      STD	Y+4,R2
     445 823D      STD	Y+5,R3
     446 824E      STD	Y+6,R4
     447 825F      STD	Y+7,R5
     448 802C      LDD	R2,Y+4
     449 803D      LDD	R3,Y+5
     44A 804E      LDD	R4,Y+6
     44B 805F      LDD	R5,Y+7

⌨️ 快捷键说明

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