car_main.lis

来自「基于m16的寻迹小车(包含小车题目」· LIS 代码 · 共 1,632 行 · 第 1/5 页

LIS
1,632
字号
 014C 9A93              st -y,R25
 014E AA93              st -y,R26
 0150 BA93              st -y,R27
 0152 2FB6              in R2,0x3f
 0154 2A92              st -y,R2
 0156 AA92              st -y,R10
 0158 BA92              st -y,R11
 015A                   .dbline -1
 015A                   .dbline 185
 015A           ; }
 015A           ; 
 015A           ; #pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
 015A           ; void timer0_comp_isr(void)
 015A           ; {
 015A                   .dbline 187
 015A           ;  //compare occured TCNT0=OCR0
 015A           ;       T0_10_n++;
 015A 81E0              ldi R24,1
 015C 90E0              ldi R25,0
 015E A0E0              ldi R26,0
 0160 B0E0              ldi R27,0
 0162 40901A00          lds R4,_T0_10_n+2
 0166 50901B00          lds R5,_T0_10_n+2+1
 016A 20901800          lds R2,_T0_10_n
 016E 30901900          lds R3,_T0_10_n+1
 0172 280E              add R2,R24
 0174 391E              adc R3,R25
 0176 4A1E              adc R4,R26
 0178 5B1E              adc R5,R27
 017A 30921900          sts _T0_10_n+1,R3
 017E 20921800          sts _T0_10_n,R2
 0182 50921B00          sts _T0_10_n+2+1,R5
 0186 40921A00          sts _T0_10_n+2,R4
 018A                   .dbline 188
 018A           ;       T0_10_set = 1;
 018A 81E0              ldi R24,1
 018C 80931C00          sts _T0_10_set,R24
 0190                   .dbline -2
 0190           L25:
 0190                   .dbline 0 ; func end
 0190 B990              ld R11,y+
 0192 A990              ld R10,y+
 0194 2990              ld R2,y+
 0196 2FBE              out 0x3f,R2
 0198 B991              ld R27,y+
 019A A991              ld R26,y+
 019C 9991              ld R25,y+
 019E 8991              ld R24,y+
 01A0 9990              ld R9,y+
 01A2 8990              ld R8,y+
 01A4 5990              ld R5,y+
 01A6 4990              ld R4,y+
 01A8 3990              ld R3,y+
 01AA 2990              ld R2,y+
 01AC 1895              reti
 01AE                   .dbend
 01AE                   .dbfunc e Time0OnOff _Time0OnOff fV
 01AE           ;          onoff -> R16
                        .even
 01AE           _Time0OnOff::
 01AE                   .dbline -1
 01AE                   .dbline 194
 01AE           ;       //LCD_write_datalongint(1, 10, T0_200_n);
 01AE           ; }
 01AE           ; 
 01AE           ; //计周长开始停止控制, 影响中断使能
 01AE           ; void Time0OnOff (uchar onoff)
 01AE           ; {
 01AE                   .dbline 195
 01AE           ;       if (onoff == ON) {
 01AE 0130              cpi R16,1
 01B0 21F4              brne L27
 01B2           X5:
 01B2                   .dbline 195
 01B2                   .dbline 196
 01B2           ;               TIMSK |= (1 << OCIE0);  //开时间中断
 01B2 89B7              in R24,0x39
 01B4 8260              ori R24,2
 01B6 89BF              out 0x39,R24
 01B8                   .dbline 197
 01B8           ;       }
 01B8 05C0              xjmp L28
 01BA           L27:
 01BA                   .dbline 199
 01BA           ; 
 01BA           ;       else if (onoff == OFF) {
 01BA 0023              tst R16
 01BC 19F4              brne L29
 01BE           X6:
 01BE                   .dbline 199
 01BE                   .dbline 200
 01BE           ;               TIMSK &=~ (1 << OCIE0);  //禁止时间中断
 01BE 89B7              in R24,0x39
 01C0 8D7F              andi R24,253
 01C2 89BF              out 0x39,R24
 01C4                   .dbline 201
 01C4           ;       }               
 01C4           L29:
 01C4           L28:
 01C4                   .dbline -2
 01C4           L26:
 01C4                   .dbline 0 ; func end
 01C4 0895              ret
 01C6                   .dbsym r onoff 16 c
 01C6                   .dbend
                        .area vector(rom, abs)
                        .org 8
 0008 0C94E300          jmp _int1_isr
                        .area text(rom, con, rel)
 01C6                   .dbfile d:\我的文档\桌面\小车\car1\car_main.c
 01C6                   .dbfunc e int1_isr _int1_isr fV
                        .even
 01C6           _int1_isr::
 01C6 0A92              st -y,R0
 01C8 1A92              st -y,R1
 01CA 2A92              st -y,R2
 01CC 3A92              st -y,R3
 01CE 4A92              st -y,R4
 01D0 5A92              st -y,R5
 01D2 6A92              st -y,R6
 01D4 7A92              st -y,R7
 01D6 8A92              st -y,R8
 01D8 9A92              st -y,R9
 01DA 0A93              st -y,R16
 01DC 1A93              st -y,R17
 01DE 2A93              st -y,R18
 01E0 3A93              st -y,R19
 01E2 8A93              st -y,R24
 01E4 9A93              st -y,R25
 01E6 AA93              st -y,R26
 01E8 BA93              st -y,R27
 01EA EA93              st -y,R30
 01EC FA93              st -y,R31
 01EE 0FB6              in R0,0x3f
 01F0 0A92              st -y,R0
 01F2 0E940000          xcall push_xgsetF000
 01F6                   .dbline -1
 01F6                   .dbline 212
 01F6           ; }
 01F6           ; 
 01F6           ; 
 01F6           ; /*------------------------------------TIME END----------------------------------------*/
 01F6           ; 
 01F6           ; /*-------------------------------int0 & int1----------------------------------*/
 01F6           ; 
 01F6           ; //中断1, 用做计算圈数
 01F6           ; #pragma interrupt_handler int1_isr:iv_INT1
 01F6           ; void int1_isr(void)
 01F6           ; {     
 01F6                   .dbline 216
 01F6           ;       //GICR &=~ (1 << INT1);
 01F6           ;       //external interupt on INT1
 01F6           ;       //getlinestart = 1;
 01F6           ;       if (T2_1s_set_n >= nextint_time) {
 01F6 40900B00          lds R4,_nextint_time+2
 01FA 50900C00          lds R5,_nextint_time+2+1
 01FE 20900900          lds R2,_nextint_time
 0202 30900A00          lds R3,_nextint_time+1
 0206 80901500          lds R8,_T2_1s_set_n+2
 020A 90901600          lds R9,_T2_1s_set_n+2+1
 020E 60901300          lds R6,_T2_1s_set_n
 0212 70901400          lds R7,_T2_1s_set_n+1
 0216 6214              cp R6,R2
 0218 7304              cpc R7,R3
 021A 8404              cpc R8,R4
 021C 9504              cpc R9,R5
 021E 58F1              brlo L32
 0220           X7:
 0220                   .dbline 216
 0220                   .dbline 217
 0220           ;               getlinestart = 1;
 0220 81E0              ldi R24,1
 0222 80930800          sts _getlinestart,R24
 0226                   .dbline 218
 0226           ;               nextint_time += 13; //10s后如果果再进入中断,才能使圈数加1
 0226 4DE0              ldi R20,13
 0228 50E0              ldi R21,0
 022A 60E0              ldi R22,0
 022C 70E0              ldi R23,0
 022E 240E              add R2,R20
 0230 351E              adc R3,R21
 0232 461E              adc R4,R22
 0234 571E              adc R5,R23
 0236 30920A00          sts _nextint_time+1,R3
 023A 20920900          sts _nextint_time,R2
 023E 50920C00          sts _nextint_time+2+1,R5
 0242 40920B00          sts _nextint_time+2,R4
 0246                   .dbline 219
 0246           ;               circle_n_new++;
 0246 80910600          lds R24,_circle_n_new
 024A 8F5F              subi R24,255    ; addi 1
 024C 80930600          sts _circle_n_new,R24
 0250                   .dbline 221
 0250           ;               
 0250           ;               if (circle_n_new == 4) {  //跑了三圈
 0250 8430              cpi R24,4
 0252 89F4              brne L34
 0254           X8:
 0254                   .dbline 221
 0254                   .dbline 222
 0254           ;                       CarStop();           //小车停止
 0254 06DF              xcall _CarStop
 0256                   .dbline 223
 0256           ;                       Time2OnOff(OFF);     //关闭时间计数器中断
 0256 0027              clr R16
 0258 5FDF              xcall _Time2OnOff
 025A                   .dbline 224
 025A           ;                       Time0OnOff(OFF);     //关闭路程计算器                   
 025A 0027              clr R16
 025C A8DF              xcall _Time0OnOff
 025E                   .dbline 225
 025E           ;                       CLI();               //关所有中断
 025E F894              cli
 0260                   .dbline 227
 0260           ;               
 0260           ;                       LightOnOff(ON);      //灯闪
 0260 01E0              ldi R16,1
 0262 06DF              xcall _LightOnOff
 0264                   .dbline 228
 0264           ;                       delay_ns(1);
 0264 01E0              ldi R16,1
 0266 0E940000          xcall _delay_ns
 026A                   .dbline 229
 026A           ;               LightOnOff(OFF);
 026A 0027              clr R16
 026C 01DF              xcall _LightOnOff
 026E                   .dbline 230
 026E           ;                       delay_ns(1);
 026E 01E0              ldi R16,1
 0270 0E940000          xcall _delay_ns
 0274           L36:
 0274                   .dbline 232
 0274           ; 
 0274           ;                       while (1) {;}        //死车
 0274                   .dbline 232
 0274                   .dbline 232
 0274           L37:
 0274                   .dbline 232
 0274 FFCF              xjmp L36
 0276           L34:
 0276                   .dbline 234
 0276           ;               }
 0276           ;       }
 0276           L32:
 0276                   .dbline -2
 0276           L31:
 0276                   .dbline 0 ; func end
 0276 0E940000          xcall pop_xgsetF000
 027A 0990              ld R0,y+
 027C 0FBE              out 0x3f,R0
 027E F991              ld R31,y+
 0280 E991              ld R30,y+
 0282 B991              ld R27,y+
 0284 A991              ld R26,y+
 0286 9991              ld R25,y+
 0288 8991              ld R24,y+
 028A 3991              ld R19,y+
 028C 2991              ld R18,y+
 028E 1991              ld R17,y+
 0290 0991              ld R16,y+
 0292 9990              ld R9,y+
 0294 8990              ld R8,y+
 0296 7990              ld R7,y+
 0298 6990              ld R6,y+
 029A 5990              ld R5,y+
 029C 4990              ld R4,y+
 029E 3990              ld R3,y+
 02A0 2990              ld R2,y+
 02A2 1990              ld R1,y+
 02A4 0990              ld R0,y+
 02A6 1895              reti
 02A8                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C945401          jmp _int0_isr
                        .area text(rom, con, rel)
 02A8                   .dbfile d:\我的文档\桌面\小车\car1\car_main.c
 02A8                   .dbfunc e int0_isr _int0_isr fV
                        .even
 02A8           _int0_isr::
 02A8 0A93              st -y,R16
 02AA 1A93              st -y,R17
 02AC 8A93              st -y,R24
 02AE AA93              st -y,R26
 02B0 EA93              st -y,R30
 02B2 0FB7              in R16,0x3f
 02B4 0A93              st -y,R16
 02B6                   .dbline -1
 02B6                   .dbline 244
 02B6           ;       
 02B6           ;       //LCD_write_datalongint(1, 10, lcd_i++);
 02B6           ;       //if(lcd_i == 5)
 02B6           ;       //      GICR &=~ (1 << INT1);
 02B6           ; }
 02B6           ; 
 02B6           ; //扩展中断0, 用做寻线
 02B6           ; #pragma interrupt_handler int0_isr:iv_INT0
 02B6           ; void int0_isr(void)
 02B6           ; {
 02B6                   .dbline 246
 02B6           ;       //external interupt on INT1
 02B6           ;       switch( PIND & 0b01000111 ) {                   
 02B6 00B3              in R16,0x10
 02B8 1127              clr R17
 02BA 0774              andi R16,71
 02BC 1070              andi R17,0
 02BE 0130              cpi R16,1
 02C0 E0E0              ldi R30,0
 02C2 1E07              cpc R17,R30
 02C4 E9F0              breq L45
 02C6           X9:
 02C6 0330              cpi R16,3
 02C8 E0E0              ldi R30,0
 02CA 1E07              cpc R17,R30
 02CC C9F0              breq L45
 02CE           X10:
 02CE 0130              cpi R16,1
 02D0 E0E0              ldi R30,0
 02D2 1E07              cpc R17,R30
 02D4 CCF0              brlt L40
 02D6           X11:
 02D6           L46:
 02D6 0034              cpi R16,64
 02D8 E0E0              ldi R30,0
 02DA 1E07              cpc R17,R30
 02DC 49F0              breq L43
 02DE           X12:

⌨️ 快捷键说明

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