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