car_main.lis
来自「基于m16的寻迹小车(包含小车题目」· LIS 代码 · 共 1,632 行 · 第 1/5 页
LIS
1,632 行
02DE 0134 cpi R16,65
02E0 E0E0 ldi R30,0
02E2 1E07 cpc R17,R30
02E4 49F0 breq L44
02E6 X13:
02E6 0234 cpi R16,66
02E8 E0E0 ldi R30,0
02EA 1E07 cpc R17,R30
02EC 09F0 breq L43
02EE X14:
02EE 0CC0 xjmp L40
02F0 L43:
02F0 .dbline 249
02F0 ; case 0b01000010: //左红外遇到黑线
02F0 ; case 0b01000000: //左中遇到
02F0 ; modle_now = 1;
02F0 81E0 ldi R24,1
02F2 80930000 sts _modle_now,R24
02F6 .dbline 250
02F6 ; break;
02F6 0BC0 xjmp L41
02F8 L44:
02F8 .dbline 253
02F8 ;
02F8 ; case 0b01000001: //中红外遇到黑线
02F8 ; modle_now = 2;
02F8 82E0 ldi R24,2
02FA 80930000 sts _modle_now,R24
02FE .dbline 254
02FE ; break;
02FE 07C0 xjmp L41
0300 L45:
0300 .dbline 258
0300 ;
0300 ; case 0b00000011: //右红外遇到黑线
0300 ; case 0b00000001: //右中遇到
0300 ; modle_now = 3;
0300 83E0 ldi R24,3
0302 80930000 sts _modle_now,R24
0306 .dbline 259
0306 ; break;
0306 03C0 xjmp L41
0308 L40:
0308 .dbline 262
0308 ;
0308 ; default :
0308 ; modle_now = 4;
0308 84E0 ldi R24,4
030A 80930000 sts _modle_now,R24
030E .dbline 263
030E ; break;
030E L41:
030E .dbline -2
030E L39:
030E .dbline 0 ; func end
030E 0991 ld R16,y+
0310 0FBF out 0x3f,R16
0312 E991 ld R30,y+
0314 A991 ld R26,y+
0316 8991 ld R24,y+
0318 1991 ld R17,y+
031A 0991 ld R16,y+
031C 1895 reti
031E .dbend
031E .dbfunc e CarFindLine _CarFindLine fV
.even
031E _CarFindLine::
031E 4A93 st -y,R20
0320 5A93 st -y,R21
0322 .dbline -1
0322 .dbline 269
0322 ; }
0322 ; }
0322 ;
0322 ; //小车寻线
0322 ; void CarFindLine (void)
0322 ; {
0322 .dbline 270
0322 ; if (modle_last == 1) {
0322 80910100 lds R24,_modle_last
0326 8130 cpi R24,1
0328 A9F4 brne L48
032A X15:
032A .dbline 270
032A .dbline 271
032A ; CarTurnLeft();
032A 8DDE xcall _CarTurnLeft
032C .dbline 273
032C ;
032C ; switch (modle_now) {
032C 40910000 lds R20,_modle_now
0330 5527 clr R21
0332 4230 cpi R20,2
0334 E0E0 ldi R30,0
0336 5E07 cpc R21,R30
0338 29F0 breq L53
033A X16:
033A 4330 cpi R20,3
033C E0E0 ldi R30,0
033E 5E07 cpc R21,R30
0340 29F0 breq L54
0342 X17:
0342 36C0 xjmp L49
0344 L53:
0344 .dbline 275
0344 ; case 2:
0344 ; modle_last = 4;
0344 84E0 ldi R24,4
0346 80930100 sts _modle_last,R24
034A .dbline 276
034A ; break;
034A 32C0 xjmp L49
034C L54:
034C .dbline 279
034C ;
034C ; case 3:
034C ; modle_last = 3;
034C 83E0 ldi R24,3
034E 80930100 sts _modle_last,R24
0352 .dbline 280
0352 ; break;
0352 .dbline 283
0352 ;
0352 ; default :
0352 ; break;
0352 .dbline 285
0352 ; }
0352 ; }
0352 2EC0 xjmp L49
0354 L48:
0354 .dbline 287
0354 ;
0354 ; else if (modle_last == 3) {
0354 80910100 lds R24,_modle_last
0358 8330 cpi R24,3
035A A9F4 brne L55
035C X18:
035C .dbline 287
035C .dbline 288
035C ; CarTurnRight();
035C 7BDE xcall _CarTurnRight
035E .dbline 290
035E ;
035E ; switch (modle_now) {
035E 40910000 lds R20,_modle_now
0362 5527 clr R21
0364 4130 cpi R20,1
0366 E0E0 ldi R30,0
0368 5E07 cpc R21,R30
036A 29F0 breq L60
036C X19:
036C 4230 cpi R20,2
036E E0E0 ldi R30,0
0370 5E07 cpc R21,R30
0372 29F0 breq L61
0374 X20:
0374 1DC0 xjmp L56
0376 L60:
0376 .dbline 292
0376 ; case 1:
0376 ; modle_last = 1;
0376 81E0 ldi R24,1
0378 80930100 sts _modle_last,R24
037C .dbline 293
037C ; break;
037C 19C0 xjmp L56
037E L61:
037E .dbline 296
037E ;
037E ; case 2:
037E ; modle_last = 4;
037E 84E0 ldi R24,4
0380 80930100 sts _modle_last,R24
0384 .dbline 297
0384 ; break;
0384 .dbline 300
0384 ;
0384 ; default :
0384 ; break;
0384 .dbline 302
0384 ; }
0384 ; }
0384 15C0 xjmp L56
0386 L55:
0386 .dbline 304
0386 ;
0386 ; else if (modle_last == 4) {
0386 80910100 lds R24,_modle_last
038A 8430 cpi R24,4
038C 89F4 brne L62
038E X21:
038E .dbline 304
038E .dbline 305
038E ; CarGoAheadMidSpeed();
038E 54DE xcall _CarGoAheadMidSpeed
0390 .dbline 307
0390 ;
0390 ; switch (modle_now) {
0390 40910000 lds R20,_modle_now
0394 5527 clr R21
0396 4130 cpi R20,1
0398 E0E0 ldi R30,0
039A 5E07 cpc R21,R30
039C 29F0 breq L67
039E X22:
039E 4330 cpi R20,3
03A0 E0E0 ldi R30,0
03A2 5E07 cpc R21,R30
03A4 09F0 breq L67
03A6 X23:
03A6 04C0 xjmp L65
03A8 L67:
03A8 .dbline 310
03A8 ; case 1:
03A8 ; case 3:
03A8 ; modle_last = modle_now;
03A8 20900000 lds R2,_modle_now
03AC 20920100 sts _modle_last,R2
03B0 .dbline 311
03B0 ; break;
03B0 .dbline 314
03B0 ;
03B0 ; default :
03B0 ; break;
03B0 L65:
03B0 .dbline 316
03B0 ; }
03B0 ; }
03B0 L62:
03B0 L56:
03B0 L49:
03B0 .dbline -2
03B0 L47:
03B0 .dbline 0 ; func end
03B0 5991 ld R21,y+
03B2 4991 ld R20,y+
03B4 0895 ret
03B6 .dbend
03B6 .dbfunc e init_devices _init_devices fV
.even
03B6 _init_devices::
03B6 .dbline -1
03B6 .dbline 322
03B6 ; }
03B6 ; /*-------------------------------end---------------------------------------------*/
03B6 ;
03B6 ; //call this routine to initialize all peripherals
03B6 ; void init_devices(void)
03B6 ; {
03B6 .dbline 324
03B6 ; //stop errant interrupts until set up
03B6 ; closeJTAG();
03B6 24DE xcall _closeJTAG
03B8 .dbline 325
03B8 ; CLI(); //disable all interrupts
03B8 F894 cli
03BA .dbline 328
03BA ;
03BA ; //时间使用
03BA ; timer2_init();
03BA 63DE xcall _timer2_init
03BC .dbline 329
03BC ; Time2OnOff(OFF);
03BC 0027 clr R16
03BE ACDE xcall _Time2OnOff
03C0 .dbline 332
03C0 ;
03C0 ; //计圈数使用
03C0 ; timer0_init();
03C0 B7DE xcall _timer0_init
03C2 .dbline 333
03C2 ; Time0OnOff(OFF);
03C2 0027 clr R16
03C4 F4DE xcall _Time0OnOff
03C6 .dbline 336
03C6 ;
03C6 ; //lcd
03C6 ; LCD_init();
03C6 0E940000 xcall _LCD_init
03CA .dbline 339
03CA ;
03CA ; //pwm
03CA ; PwmInit();
03CA 21DE xcall _PwmInit
03CC .dbline 340
03CC ; PwmASet(PWMA_MIN_VAL);
03CC 0027 clr R16
03CE 1127 clr R17
03D0 26DE xcall _PwmASet
03D2 .dbline 341
03D2 ; PwmBSet(PWMB_MIN_VAL);
03D2 0027 clr R16
03D4 1127 clr R17
03D6 26DE xcall _PwmBSet
03D8 .dbline 344
03D8 ;
03D8 ; //INT1:0
03D8 ; DDRD &=~ (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD6); //PD口的0,1,6做扩展中断, 2,3做中断
03D8 8898 cbi 0x11,0
03DA .dbline 345
03DA ; PORTD |= (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD6);
03DA 82B3 in R24,0x12
03DC 8F64 ori R24,79
03DE 82BB out 0x12,R24
03E0 .dbline 347
03E0 ;
03E0 ; DDRA &=~ (1 << PA0); //小车按钮开关, 上拉
03E0 D098 cbi 0x1a,0
03E2 .dbline 348
03E2 ; PORTA |= (1 << PA0);
03E2 D89A sbi 0x1b,0
03E4 .dbline 350
03E4 ;
03E4 ; DDRC |= 0b11110000;
03E4 84B3 in R24,0x14
03E6 806F ori R24,240
03E8 84BB out 0x14,R24
03EA .dbline 351
03EA ; PORTC &=~ 0b01010000;
03EA 85B3 in R24,0x15
03EC 8F7A andi R24,175
03EE 85BB out 0x15,R24
03F0 .dbline 352
03F0 ; PORTC |= 0b10100000; //PC口4,5,6,7输出, 电机停
03F0 85B3 in R24,0x15
03F2 806A ori R24,160
03F4 85BB out 0x15,R24
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?