📄 car_main.s
字号:
_T0_10_n::
.blkb 4
.area idata
.word 0,0
.area data(ram, con, rel)
.dbfile d:\我的文档\桌面\小车\car1\car_main.c
.dbsym e T0_10_n _T0_10_n l
_T0_10_set::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile d:\我的文档\桌面\小车\car1\car_main.c
.dbsym e T0_10_set _T0_10_set c
.area text(rom, con, rel)
.dbfile d:\我的文档\桌面\小车\car1\car_main.c
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 177
; }
;
; //-----------------------T0------------------------------------
; unsigned long int T0_10_n = 0; //处部计数满10后溢出次数, 周长 = [((10 * T0_10_n) + TCNT0) / 5 ]* LENGHT_PER_CIRCLE
; uchar T0_10_set = 0;
; //TIMER0 initialize - prescale:Falling edge
; // WGM: CTC
; // desired value: 1Hz
; // actual value: Out of range
; void timer0_init(void)
; {
.dbline 178
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 179
; OCR0 = 9 /*INVALID SETTING*/; //set compare
ldi R24,9
out 0x3c,R24
.dbline 180
; TCCR0 = 0x0E; //start timer
ldi R24,14
out 0x33,R24
.dbline -2
L24:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 76
jmp _timer0_comp_isr
.area text(rom, con, rel)
.dbfile d:\我的文档\桌面\小车\car1\car_main.c
.dbfunc e timer0_comp_isr _timer0_comp_isr fV
.even
_timer0_comp_isr::
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R8
st -y,R9
st -y,R24
st -y,R25
st -y,R26
st -y,R27
in R2,0x3f
st -y,R2
st -y,R10
st -y,R11
.dbline -1
.dbline 185
; }
;
; #pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
; void timer0_comp_isr(void)
; {
.dbline 187
; //compare occured TCNT0=OCR0
; T0_10_n++;
ldi R24,1
ldi R25,0
ldi R26,0
ldi R27,0
lds R4,_T0_10_n+2
lds R5,_T0_10_n+2+1
lds R2,_T0_10_n
lds R3,_T0_10_n+1
add R2,R24
adc R3,R25
adc R4,R26
adc R5,R27
sts _T0_10_n+1,R3
sts _T0_10_n,R2
sts _T0_10_n+2+1,R5
sts _T0_10_n+2,R4
.dbline 188
; T0_10_set = 1;
ldi R24,1
sts _T0_10_set,R24
.dbline -2
L25:
.dbline 0 ; func end
ld R11,y+
ld R10,y+
ld R2,y+
out 0x3f,R2
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R9,y+
ld R8,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
reti
.dbend
.dbfunc e Time0OnOff _Time0OnOff fV
; onoff -> R16
.even
_Time0OnOff::
.dbline -1
.dbline 194
; //LCD_write_datalongint(1, 10, T0_200_n);
; }
;
; //计周长开始停止控制, 影响中断使能
; void Time0OnOff (uchar onoff)
; {
.dbline 195
; if (onoff == ON) {
cpi R16,1
brne L27
X5:
.dbline 195
.dbline 196
; TIMSK |= (1 << OCIE0); //开时间中断
in R24,0x39
ori R24,2
out 0x39,R24
.dbline 197
; }
xjmp L28
L27:
.dbline 199
;
; else if (onoff == OFF) {
tst R16
brne L29
X6:
.dbline 199
.dbline 200
; TIMSK &=~ (1 << OCIE0); //禁止时间中断
in R24,0x39
andi R24,253
out 0x39,R24
.dbline 201
; }
L29:
L28:
.dbline -2
L26:
.dbline 0 ; func end
ret
.dbsym r onoff 16 c
.dbend
.area vector(rom, abs)
.org 8
jmp _int1_isr
.area text(rom, con, rel)
.dbfile d:\我的文档\桌面\小车\car1\car_main.c
.dbfunc e int1_isr _int1_isr fV
.even
_int1_isr::
st -y,R0
st -y,R1
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R8
st -y,R9
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R26
st -y,R27
st -y,R30
st -y,R31
in R0,0x3f
st -y,R0
xcall push_xgsetF000
.dbline -1
.dbline 212
; }
;
;
; /*------------------------------------TIME END----------------------------------------*/
;
; /*-------------------------------int0 & int1----------------------------------*/
;
; //中断1, 用做计算圈数
; #pragma interrupt_handler int1_isr:iv_INT1
; void int1_isr(void)
; {
.dbline 216
; //GICR &=~ (1 << INT1);
; //external interupt on INT1
; //getlinestart = 1;
; if (T2_1s_set_n >= nextint_time) {
lds R4,_nextint_time+2
lds R5,_nextint_time+2+1
lds R2,_nextint_time
lds R3,_nextint_time+1
lds R8,_T2_1s_set_n+2
lds R9,_T2_1s_set_n+2+1
lds R6,_T2_1s_set_n
lds R7,_T2_1s_set_n+1
cp R6,R2
cpc R7,R3
cpc R8,R4
cpc R9,R5
brlo L32
X7:
.dbline 216
.dbline 217
; getlinestart = 1;
ldi R24,1
sts _getlinestart,R24
.dbline 218
; nextint_time += 13; //10s后如果果再进入中断,才能使圈数加1
ldi R20,13
ldi R21,0
ldi R22,0
ldi R23,0
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _nextint_time+1,R3
sts _nextint_time,R2
sts _nextint_time+2+1,R5
sts _nextint_time+2,R4
.dbline 219
; circle_n_new++;
lds R24,_circle_n_new
subi R24,255 ; addi 1
sts _circle_n_new,R24
.dbline 221
;
; if (circle_n_new == 4) { //跑了三圈
cpi R24,4
brne L34
X8:
.dbline 221
.dbline 222
; CarStop(); //小车停止
xcall _CarStop
.dbline 223
; Time2OnOff(OFF); //关闭时间计数器中断
clr R16
xcall _Time2OnOff
.dbline 224
; Time0OnOff(OFF); //关闭路程计算器
clr R16
xcall _Time0OnOff
.dbline 225
; CLI(); //关所有中断
cli
.dbline 227
;
; LightOnOff(ON); //灯闪
ldi R16,1
xcall _LightOnOff
.dbline 228
; delay_ns(1);
ldi R16,1
xcall _delay_ns
.dbline 229
; LightOnOff(OFF);
clr R16
xcall _LightOnOff
.dbline 230
; delay_ns(1);
ldi R16,1
xcall _delay_ns
L36:
.dbline 232
;
; while (1) {;} //死车
.dbline 232
.dbline 232
L37:
.dbline 232
xjmp L36
L34:
.dbline 234
; }
; }
L32:
.dbline -2
L31:
.dbline 0 ; func end
xcall pop_xgsetF000
ld R0,y+
out 0x3f,R0
ld R31,y+
ld R30,y+
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R9,y+
ld R8,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
ld R1,y+
ld R0,y+
reti
.dbend
.area vector(rom, abs)
.org 4
jmp _int0_isr
.area text(rom, con, rel)
.dbfile d:\我的文档\桌面\小车\car1\car_main.c
.dbfunc e int0_isr _int0_isr fV
.even
_int0_isr::
st -y,R16
st -y,R17
st -y,R24
st -y,R26
st -y,R30
in R16,0x3f
st -y,R16
.dbline -1
.dbline 244
;
; //LCD_write_datalongint(1, 10, lcd_i++);
; //if(lcd_i == 5)
; // GICR &=~ (1 << INT1);
; }
;
; //扩展中断0, 用做寻线
; #pragma interrupt_handler int0_isr:iv_INT0
; void int0_isr(void)
; {
.dbline 246
; //external interupt on INT1
; switch( PIND & 0b01000111 ) {
in R16,0x10
clr R17
andi R16,71
andi R17,0
cpi R16,1
ldi R30,0
cpc R17,R30
breq L45
X9:
cpi R16,3
ldi R30,0
cpc R17,R30
breq L45
X10:
cpi R16,1
ldi R30,0
cpc R17,R30
brlt L40
X11:
L46:
cpi R16,64
ldi R30,0
cpc R17,R30
breq L43
X12:
cpi R16,65
ldi R30,0
cpc R17,R30
breq L44
X13:
cpi R16,66
ldi R30,0
cpc R17,R30
breq L43
X14:
xjmp L40
L43:
.dbline 249
; case 0b01000010: //左红外遇到黑线
; case 0b01000000: //左中遇到
; modle_now = 1;
ldi R24,1
sts _modle_now,R24
.dbline 250
; break;
xjmp L41
L44:
.dbline 253
;
; case 0b01000001: //中红外遇到黑线
; modle_now = 2;
ldi R24,2
sts _modle_now,R24
.dbline 254
; break;
xjmp L41
L45:
.dbline 258
;
; case 0b00000011: //右红外遇到黑线
; case 0b00000001: //右中遇到
; modle_now = 3;
ldi R24,3
sts _modle_now,R24
.dbline 259
; break;
xjmp L41
L40:
.dbline 262
;
; default :
; modle_now = 4;
ldi R24,4
sts _modle_now,R24
.dbline 263
; break;
L41:
.dbline -2
L39:
.dbline 0 ; func end
ld R16,y+
out 0x3f,R16
ld R30,y+
ld R26,y+
ld R24,y+
ld R17,y+
ld R16,y+
reti
.dbend
.dbfunc e CarFindLine _CarFindLine fV
.even
_CarFindLine::
st -y,R20
st -y,R21
.dbline -1
.dbline 269
; }
; }
;
; //小车寻线
; void CarFindLine (void)
; {
.dbline 270
; if (modle_last == 1) {
lds R24,_modle_last
cpi R24,1
brne L48
X15:
.dbline 270
.dbline 271
; CarTurnLeft();
xcall _CarTurnLeft
.dbline 273
;
; switch (modle_now) {
lds R20,_modle_now
clr R21
cpi R20,2
ldi R30,0
cpc R21,R30
breq L53
X16:
cpi R20,3
ldi R30,0
cpc R21,R30
breq L54
X17:
xjmp L49
L53:
.dbline 275
; case 2:
; modle_last = 4;
ldi R24,4
sts _modle_last,R24
.dbline 276
; break;
xjmp L49
L54:
.dbline 279
;
; case 3:
; modle_last = 3;
ldi R24,3
sts _modle_last,R24
.dbline 280
; break;
.dbline 283
;
; default :
; break;
.dbline 285
; }
; }
xjmp L49
L48:
.dbline 287
;
; else if (modle_last == 3) {
lds R24,_modle_last
cpi R24,3
brne L55
X18:
.dbline 287
.dbline 288
; CarTurnRight();
xcall _CarTurnRight
.dbline 290
;
; switch (modle_now) {
lds R20,_modle_now
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L60
X19:
cpi R20,2
ldi R30,0
cpc R21,R30
breq L61
X20:
xjmp L56
L60:
.dbline 292
; case 1:
; modle_last = 1;
ldi R24,1
sts _modle_last,R24
.dbline 293
; break;
xjmp L56
L61:
.dbline 296
;
; case 2:
; modle_last = 4;
ldi R24,4
sts _modle_last,R24
.dbline 297
; break;
.dbline 300
;
; default :
; break;
.dbline 302
; }
; }
xjmp L56
L55:
.dbline 304
;
; else if (modle_last == 4) {
lds R24,_modle_last
cpi R24,4
brne L62
X21:
.dbline 304
.dbline 305
; CarGoAheadMidSpeed();
xcall _CarGoAheadMidSpeed
.dbline 307
;
; switch (modle_now) {
lds R20,_modle_now
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -