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

📄 car1.lst

📁 基于m16的寻迹小车(包含小车题目
💻 LST
📖 第 1 页 / 共 5 页
字号:
     278 9888      CBI	0x11,0
(0345) 	PORTD |= (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD6);
     279 B382      IN	R24,0x12
     27A 648F      ORI	R24,0x4F
     27B BB82      OUT	0x12,R24
(0346) 
(0347) 	DDRA &=~ (1 << PA0);  //小车按钮开关, 上拉
     27C 98D0      CBI	0x1A,0
(0348) 	PORTA |= (1 << PA0);
     27D 9AD8      SBI	0x1B,0
(0349) 
(0350) 	DDRC  |=  0b11110000;
     27E B384      IN	R24,0x14
     27F 6F80      ORI	R24,0xF0
     280 BB84      OUT	0x14,R24
(0351) 	PORTC &=~ 0b01010000;
     281 B385      IN	R24,0x15
     282 7A8F      ANDI	R24,0xAF
     283 BB85      OUT	0x15,R24
(0352) 	PORTC |=  0b10100000; //PC口4,5,6,7输出, 电机停
     284 B385      IN	R24,0x15
     285 6A80      ORI	R24,0xA0
     286 BB85      OUT	0x15,R24
(0353) 
(0354) 	DDRB &=~ (1 << PB0);  //T0做外部计数
     287 98B8      CBI	0x17,0
(0355) 	PORTB |= (1 << PB0);
     288 9AC0      SBI	0x18,0
(0356) 	
(0357)  	MCUCR = 0x0A;  //中断方式, 都是下降沿	
     289 E08A      LDI	R24,0xA
     28A BF85      OUT	0x35,R24
(0358) 	GICR |= (1 << INT1) | (1 << INT0); 	
     28B B78B      IN	R24,0x3B
     28C 6C80      ORI	R24,0xC0
     28D BF8B      OUT	0x3B,R24
     28E 9508      RET
_main:
     28F 9728      SBIW	R28,0x8
(0359)  
(0360) 	//TIMSK = 0x80; //定时器中断使能
(0361)  	//SEI();
(0362) }
(0363) 
(0364) #define debug
(0365) //主函数
(0366) void main(void)
(0367) 
(0368) {		
(0369) 	init_devices();
     290 DFD6      RCALL	_init_devices
(0370) 
(0371) 	LCD_write_string(1, 4, "Good luck");
     291 EC83      LDI	R24,0xC3
     292 E090      LDI	R25,0
     293 8399      STD	Y+1,R25
     294 8388      STD	Y+0,R24
     295 E024      LDI	R18,4
     296 E001      LDI	R16,1
     297 940E 061B CALL	_LCD_write_string
(0372) 	LCD_write_string(2, 0, "made on 09-05-01");
     299 EB82      LDI	R24,0xB2
     29A E090      LDI	R25,0
     29B 8399      STD	Y+1,R25
     29C 8388      STD	Y+0,R24
     29D 2722      CLR	R18
     29E E002      LDI	R16,2
     29F 940E 061B CALL	_LCD_write_string
(0373) 		
(0374) 	#ifdef debug
(0375) 	LightOnOff(ON);
     2A1 E001      LDI	R16,1
     2A2 DE21      RCALL	_LightOnOff
(0376) 	delay_nms(200);
     2A3 EC08      LDI	R16,0xC8
     2A4 E010      LDI	R17,0
     2A5 940E 03CC CALL	_delay_nms
(0377) 	LightOnOff(OFF);
     2A7 2700      CLR	R16
     2A8 DE1B      RCALL	_LightOnOff
(0378) 	delay_nms(200);
     2A9 EC08      LDI	R16,0xC8
     2AA E010      LDI	R17,0
     2AB 940E 03CC CALL	_delay_nms
     2AD C0F7      RJMP	0x03A5
(0379) 	#endif
(0380) 	
(0381) 	//while(1) {;}  
(0382) 	
(0383)     while(1){		
(0384) 		if ((PINA & (1 << PA0)) == 0 ) {  //等待按下开始键	
     2AE 99C8      SBIC	0x19,0
     2AF C0F5      RJMP	0x03A5
(0385) 			SEI(); //打开全局中断
     2B0 9478      BSET	7
(0386) 			
(0387) 			CarGoAheadMidSpeed();  //小车向前		
     2B1 DDF6      RCALL	_CarGoAheadMidSpeed
     2B2 C0F1      RJMP	0x03A4
(0388) 			while (1) {
(0389) 				CarFindLine();     //小车寻线
     2B3 DF67      RCALL	_CarFindLine
(0390) 				
(0391) 				if (getlinestart == 1) { //如果遇到起跑线
     2B4 9180 0068 LDS	R24,getlinestart
     2B6 3081      CPI	R24,1
     2B7 F009      BEQ	0x02B9
     2B8 C0EB      RJMP	0x03A4
(0392) 					LCD_write_string(1, 0, "                   ");
     2B9 E98E      LDI	R24,0x9E
     2BA E090      LDI	R25,0
     2BB 8399      STD	Y+1,R25
     2BC 8388      STD	Y+0,R24
     2BD 2722      CLR	R18
     2BE E001      LDI	R16,1
     2BF 940E 061B CALL	_LCD_write_string
(0393) 					LCD_write_string(2, 0, "                   ");
     2C1 E98E      LDI	R24,0x9E
     2C2 E090      LDI	R25,0
     2C3 8399      STD	Y+1,R25
     2C4 8388      STD	Y+0,R24
     2C5 2722      CLR	R18
     2C6 E002      LDI	R16,2
     2C7 940E 061B CALL	_LCD_write_string
(0394) 					LCD_write_string(1, 0, "circle:      cm ");
     2C9 E88D      LDI	R24,0x8D
     2CA E090      LDI	R25,0
     2CB 8399      STD	Y+1,R25
     2CC 8388      STD	Y+0,R24
     2CD 2722      CLR	R18
     2CE E001      LDI	R16,1
     2CF 940E 061B CALL	_LCD_write_string
(0395) 					LCD_write_string(2, 0, "time  : 0    s ");
     2D1 E78D      LDI	R24,0x7D
     2D2 E090      LDI	R25,0
     2D3 8399      STD	Y+1,R25
     2D4 8388      STD	Y+0,R24
     2D5 2722      CLR	R18
     2D6 E002      LDI	R16,2
     2D7 940E 061B CALL	_LCD_write_string
(0396) 					
(0397) 					Time0OnOff(ON); //开始计算路程
     2D9 E001      LDI	R16,1
     2DA DE88      RCALL	_Time0OnOff
(0398) 					Time2OnOff(ON); //开始计时
     2DB E001      LDI	R16,1
     2DC DE3B      RCALL	_Time2OnOff
     2DD C0C5      RJMP	0x03A3
(0399) 					
(0400) 					while (1) {
(0401) 						CarFindLine(); //寻线
     2DE DF3C      RCALL	_CarFindLine
(0402) 
(0403) 						if (T2_1s_set == 1) { //显示时间
     2DF 9180 0077 LDS	R24,T2_1s_set
     2E1 3081      CPI	R24,1
     2E2 F499      BNE	0x02F6
(0404) 							LCD_write_datalongint(2, 8, T2_1s_set_n);
     2E3 9040 0075 LDS	R4,T2_1s_set_n+2
     2E5 9050 0076 LDS	R5,T2_1s_set_n+3
     2E7 9020 0073 LDS	R2,T2_1s_set_n
     2E9 9030 0074 LDS	R3,T2_1s_set_n+1
     2EB 8228      STD	Y+0,R2
     2EC 8239      STD	Y+1,R3
     2ED 824A      STD	Y+2,R4
     2EE 825B      STD	Y+3,R5
     2EF E028      LDI	R18,0x8
     2F0 E002      LDI	R16,2
     2F1 940E 067A CALL	_LCD_write_datalongint
(0405) 							T2_1s_set = 0;
     2F3 2422      CLR	R2
     2F4 9220 0077 STS	T2_1s_set,R2
(0406) 						}
(0407) 
(0408) 						if (T0_10_set == 1) {  //显示路程
     2F6 9180 007C LDS	R24,T0_10_set
     2F8 3081      CPI	R24,1
     2F9 F009      BEQ	0x02FB
     2FA C04B      RJMP	0x0346
(0409) 							circle = (((10 * T0_10_n) + TCNT0) / 5) * LENGHT_PER_CIRCLE;
     2FB 9040 007A LDS	R4,T0_10_n+2
     2FD 9050 007B LDS	R5,T0_10_n+3
     2FF 9020 0078 LDS	R2,T0_10_n
     301 9030 0079 LDS	R3,T0_10_n+1
     303 E04A      LDI	R20,0xA
     304 E050      LDI	R21,0
     305 E060      LDI	R22,0
     306 E070      LDI	R23,0
     307 925A      ST	R5,-Y
     308 924A      ST	R4,-Y
     309 923A      ST	R3,-Y
     30A 922A      ST	R2,-Y
     30B 018A      MOVW	R16,R20
     30C 019B      MOVW	R18,R22
     30D 940E 0732 CALL	empy32u
     30F 0118      MOVW	R2,R16
     310 0129      MOVW	R4,R18
     311 B662      IN	R6,0x32
     312 2477      CLR	R7
     313 2488      CLR	R8
     314 2499      CLR	R9
     315 0C26      ADD	R2,R6
     316 1C37      ADC	R3,R7
     317 1C48      ADC	R4,R8
     318 1C59      ADC	R5,R9
     319 E045      LDI	R20,5
     31A E050      LDI	R21,0
     31B E060      LDI	R22,0
     31C E070      LDI	R23,0
     31D 937A      ST	R23,-Y
     31E 936A      ST	R22,-Y
     31F 935A      ST	R21,-Y
     320 934A      ST	R20,-Y
     321 0181      MOVW	R16,R2
     322 0192      MOVW	R18,R4
     323 940E 06C8 CALL	div32u
     325 E142      LDI	R20,0x12
     326 E050      LDI	R21,0
     327 E060      LDI	R22,0
     328 E070      LDI	R23,0
     329 933A      ST	R19,-Y
     32A 932A      ST	R18,-Y
     32B 931A      ST	R17,-Y
     32C 930A      ST	R16,-Y
     32D 018A      MOVW	R16,R20
     32E 019B      MOVW	R18,R22
     32F 940E 0732 CALL	empy32u
     331 9310 0063 STS	circle+1,R17
     333 9300 0062 STS	circle,R16
     335 9330 0065 STS	circle+3,R19
     337 9320 0064 STS	circle+2,R18
(0410) 							LCD_write_datalongint(1, 8, circle);
     339 0118      MOVW	R2,R16
     33A 0129      MOVW	R4,R18
     33B 8228      STD	Y+0,R2
     33C 8239      STD	Y+1,R3
     33D 824A      STD	Y+2,R4
     33E 825B      STD	Y+3,R5
     33F E028      LDI	R18,0x8
     340 E001      LDI	R16,1
     341 940E 067A CALL	_LCD_write_datalongint
(0411) 							T0_10_set = 0;
     343 2422      CLR	R2
     344 9220 007C STS	T0_10_set,R2
(0412) 						}
(0413) 						
(0414) 						if (circle_n_new != circle_n_old) {
     346 9020 0067 LDS	R2,circle_n_old
     348 9030 0066 LDS	R3,circle_n_new
     34A 1432      CP	R3,R2
     34B F109      BEQ	0x036D
(0415) 						   LCD_write_datalongint(1, 15, circle_n_new);
     34C 2C23      MOV	R2,R3
     34D 2433      CLR	R3
     34E 2444      CLR	R4
     34F 2455      CLR	R5
     350 8228      STD	Y+0,R2
     351 8239      STD	Y+1,R3
     352 824A      STD	Y+2,R4
     353 825B      STD	Y+3,R5
     354 E02F      LDI	R18,0xF
     355 E001      LDI	R16,1
     356 940E 067A CALL	_LCD_write_datalongint
(0416) 						   circle_n_old = circle_n_new;
     358 9020 0066 LDS	R2,circle_n_new
     35A 9220 0067 STS	circle_n_old,R2
(0417) 
(0418) 						   LightOnOff(ON);
     35C E001      LDI	R16,1
     35D DD66      RCALL	_LightOnOff
(0419) 						   light_set_flag = 1;
     35E E081      LDI	R24,1
     35F 9380 0071 STS	light_set_flag,R24
(0420) 						   Light_time = 0;
     361 E040      LDI	R20,0
     362 E050      LDI	R21,0
     363 E060      LDI	R22,0
     364 E070      LDI	R23,0
     365 9350 006E STS	Light_time+1,R21
     367 9340 006D STS	Light_time,R20
     369 9370 0070 STS	Light_time+3,R23
     36B 9360 006F STS	Light_time+2,R22
(0421) 						}
(0422) 
(0423) 						if ((light_set_flag == 1) && (Light_time++) >= 5000) {
     36D 9180 0071 LDS	R24,light_set_flag
     36F 3081      CPI	R24,1
     370 F591      BNE	0x03A3
     371 9040 006F LDS	R4,Light_time+2
     373 9050 0070 LDS	R5,Light_time+3
     375 9020 006D LDS	R2,Light_time
     377 9030 006E LDS	R3,Light_time+1
     379 822C      STD	Y+4,R2
     37A 823D      STD	Y+5,R3
     37B 824E      STD	Y+6,R4
     37C 825F      STD	Y+7,R5
     37D E041      LDI	R20,1
     37E E050      LDI	R21,0
     37F E060      LDI	R22,0
     380 E070      LDI	R23,0
     381 802C      LDD	R2,Y+4
     382 803D      LDD	R3,Y+5
     383 804E      LDD	R4,Y+6
     384 805F      LDD	R5,Y+7
     385 0E24      ADD	R2,R20
     386 1E35      ADC	R3,R21
     387 1E46      ADC	R4,R22
     388 1E57      ADC	R5,R23
     389 9230 006E STS	Light_time+1,R3
     38B 9220 006D STS	Light_time,R2
     38D 9250 0070 STS	Light_time+3,R5
     38F 9240 006F STS	Light_time+2,R4
     391 E848      LDI	R20,0x88
     392 E153      LDI	R21,0x13
     393 E060      LDI	R22,0
     394 E070      LDI	R23,0
     395 802C      LDD	R2,Y+4
     396 803D      LDD	R3,Y+5
     397 804E      LDD	R4,Y+6
     398 805F      LDD	R5,Y+7
     399 1624      CP	R2,R20
     39A 0635      CPC	R3,R21
     39B 0646      CPC	R4,R22
     39C 0657      CPC	R5,R23
     39D F028      BCS	0x03A3
(0424) 							light_set_flag = 0;
     39E 2422      CLR	R2
     39F 9220 0071 STS	light_set_flag,R2
(0425) 							LightOnOff(OFF);
     3A1 2700      CLR	R16
     3A2 DD21      RCALL	_LightOnOff
     3A3 CF3A      RJMP	0x02DE
     3A4 CF0E      RJMP	0x02B3
     3A5 CF08      RJMP	0x02AE
     3A6 9628      ADIW	R28,0x8
     3A7 9508      RET
FILE: d:\我的文档\桌面\小车\car1\delay.c
(0001) #define _DELAY_C_
(0002) #include "DELAY.H" //用户自己定义的头文件
(0003) 
(0004) //1us延时函数
(0005) void delay_1us( void )
(0006) {
(0007)    uint i = 1;
_delay_1us:
  i                    --> R16
     3A8 E001      LDI	R16,1
     3A9 E010      LDI	R17,0
     3AA C001      RJMP	0x03AC
(0008)    while( i-- )
(0009)    {
(0010)       asm("nop");
     3AB 0000      NOP
     3AC 0118      MOVW	R2,R16
     3AD 5001      SUBI	R16,1
     3AE 4010      SBCI	R17,0
     3AF 2022      TST	R2
     3B0 F7D1      BNE	0x03AB
     3B1 2033      TST	R3
     3B2 F7C1      BNE	0x03AB
     3B3 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R10
     3B4 940E 077C CALL	push_xgset300C
     3B6 0158      MOVW	R10,R16
(0011)    }
(0012) }
(0013) 
(0014) //nus延时函数
(0015) void delay_nus( uint n )
(0016) {
(0017)    uint i = 0;
     3B7 2744      CLR	R20
     3B8 2755      CLR	R21
(0018)    for (i = 0; i < n; i++)
     3B9 C003      RJMP	0x03BD
(0019)    delay_1us();
     3BA DFED      RCALL	_delay_1us
     3BB 5F4F      SUBI	R20,0xFF
     3BC 4F5F      SBCI	R21,0xFF
     3BD 154A      CP	R20,R10
     3BE 055B      CPC	R21,R11
     3BF F3D0      BCS	0x03BA
     3C0 940C 0781 JMP	pop_xgset300C
(0020) }
(0021) 
(0022) //1ms延时函数
(0023) void delay_1ms( void )
(0024) {
(0025)    uint i;
(0026)    for (i = 0; i < 1140; i++)
_delay_1ms:
  i                    --> R16
     3C2 2700      CLR	R16
     3C3 2711      CLR	R17
     3C4 C002      RJMP	0x03C7
     3C5 5F0F      SUBI	R16,0xFF
     3C6 4F1F      SBCI	R17,0xFF
     3C7 3704      CPI	R16,0x74
     3C8 E0E4      LDI	R30,4
     3C9 071E      CPC	R17,R30
     3CA F3D0      BCS	0x03C5
     3CB 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R10
     3CC 940E 077C CALL	push_xgset300C
     3CE 0158      MOVW	R10,R16
(0027)    {;}
(0028) }
(0029) 
(0030) //nms延时函数
(0031) void delay_nms( uint n )
(0032) {
(0033)    uint i = 0;
     3CF 2744      CLR	R20
     3D0 2755      CLR	R21
(0034)    for (i = 0; i < n; i++)
     3D1 C003      RJMP	0x03D5
(0035)    delay_1ms();

⌨️ 快捷键说明

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