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 + -
显示快捷键?