📄 sl3010_2.s
字号:
.byte 'J,'J
.byte 43,43
.byte 43,43
.byte 43,42
.byte 42,42
.byte 44,44
.byte 43,41
.byte 'H,'H
.byte 'J,42
.byte 41,40
.byte 41,40
.byte 39,'F
.byte 'F,'F
.byte 'F,'K
.byte 43,42
.byte 41,40
.byte 41,43
.byte 'J,'J
.byte 'J,'K
.byte 43,42
.byte 'I,41
.byte 43,'J
.byte 42,40
.byte 'F,'H
.byte 'G,'J
.byte 41,40
.byte 39,40
.byte 'F,'F
.byte 'F,'F
.byte 'J,42
.byte 41,40
.byte 41,40
.byte 39,'F
.byte 'F,'F
.byte 'F,'K
.byte 43,42
.byte 41,40
.byte 41,43
.byte 'J,'J
.byte 'J,'K
.byte 43,42
.byte 'I,41
.byte 43,'J
.byte 42,40
.byte 'F,'H
.byte 'G,'J
.byte 41,40
.byte 39,40
.byte 'F,'F
.byte 'F,'F
.byte 0
.dbsym e sound _sound A[137:137]c
.area data(ram, con, rel)
.dbfile E:\icc\iccavr\sl3010\sl3010_2\sl3010_2.c
.area lit(rom, con, rel)
_TONETABLE::
.word 64580
.word 64684
.word 64777
.word 64820
.word 64898
.word 64968
.word 65030
.word 65058
.word 65110
.word 65157
.word 65178
.word 65217
.word 65252
.word 65283
.word 65297
.dbsym e TONETABLE _TONETABLE A[30:15]ki
.area vector(rom, abs)
.org 12
rjmp _timer1_ovf_isr
.area lit(rom, con, rel)
.area text(rom, con, rel)
.dbfile E:\icc\iccavr\sl3010\sl3010_2\sl3010_2.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
st -y,R2
st -y,R3
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 228
.dbline 229
lds R2,_toneconst
lds R3,_toneconst+1
out 0x2d,R3
out 0x2c,R2
.dbline 230
ldi R24,1
in R2,0x15
eor R2,R24
out 0x15,R2
.dbline -2
.dbline 231
L131:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e music_car _music_car fV
; sound_add -> R20,R21
; temp1 -> R22
; temp -> R10
.even
_music_car::
rcall push_gset3
.dbline -1
.dbline 234
.dbline 236
clr R20
clr R21
.dbline 238
ldi R24,24
out 0x1b,R24
.dbline 240
ldi R24,48
sts _work_status,R24
.dbline 242
sei
.dbline 244
rcall _mic_startup
.dbline 246
clr R2
out 0x2f,R2
.dbline 247
ldi R24,2
out 0x2e,R24
.dbline 248
ldi R24,<_sound
ldi R25,>_sound
mov R16,R20
mov R17,R21
add R16,R24
adc R17,R25
rcall _EEPROMread
mov R22,R16
rjmp L134
L133:
.dbline 250
.dbline 251
mov R10,R22
.dbline 252
mov R24,R10
andi R24,15
mov R10,R24
.dbline 254
cpi R24,1
breq L140
cpi R24,2
breq L140
cpi R24,3
breq L140
cpi R24,4
brne L136
L140:
.dbline 254
.dbline 254
ldi R24,254
out 0x1b,R24
.dbline 254
L136:
.dbline 255
mov R24,R10
cpi R24,5
breq L143
cpi R24,6
brne L141
L143:
.dbline 255
.dbline 255
ldi R24,252
out 0x1b,R24
.dbline 255
L141:
.dbline 256
mov R24,R10
cpi R24,7
breq L146
cpi R24,8
brne L144
L146:
.dbline 256
.dbline 256
ldi R24,248
out 0x1b,R24
.dbline 256
L144:
.dbline 257
mov R24,R10
cpi R24,9
brne L147
.dbline 257
.dbline 257
ldi R24,240
out 0x1b,R24
.dbline 257
L147:
.dbline 258
mov R24,R10
cpi R24,10
brne L149
.dbline 258
.dbline 258
ldi R24,224
out 0x1b,R24
.dbline 258
L149:
.dbline 259
mov R24,R10
cpi R24,11
brne L151
.dbline 259
.dbline 259
ldi R24,192
out 0x1b,R24
.dbline 259
L151:
.dbline 260
mov R24,R10
cpi R24,12
brne L153
.dbline 260
.dbline 260
ldi R24,128
out 0x1b,R24
.dbline 260
L153:
.dbline 261
mov R24,R10
cpi R24,13
breq L158
cpi R24,14
breq L158
cpi R24,15
brne L155
L158:
.dbline 261
.dbline 261
clr R2
out 0x1b,R2
.dbline 261
L155:
.dbline 263
tst R10
breq L159
.dbline 264
.dbline 265
in R24,0x39
ori R24,128
out 0x39,R24
.dbline 266
dec R10
.dbline 267
ldi R24,<_TONETABLE
ldi R25,>_TONETABLE
mov R16,R10
clr R17
lsl R16
rol R17
add R16,R24
adc R17,R25
rcall lpm16
sts _toneconst+1,R17
sts _toneconst,R16
.dbline 268
out 0x2d,R17
out 0x2c,R16
.dbline 269
L159:
.dbline 270
mov R10,R22
.dbline 271
mov R24,R10
swap R24
andi R24,#0x0F
.dbline 272
andi R24,15
mov R10,R24
.dbline 273
mov R18,R24
clr R19
ldi R16,129
ldi R17,0
rcall mpy16s
rcall _delay_ms
.dbline 274
in R24,0x39
andi R24,127
out 0x39,R24
.dbline 275
subi R20,255 ; offset = 1
sbci R21,255
.dbline 276
ldi R24,<_sound
ldi R25,>_sound
mov R16,R20
mov R17,R21
add R16,R24
adc R17,R25
rcall _EEPROMread
mov R22,R16
.dbline 277
L134:
.dbline 249
tst R22
breq X8
rjmp L133
X8:
.dbline 278
ldi R16,1000
ldi R17,3
rcall _delay_ms
.dbline -2
.dbline 279
L132:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r sound_add 20 i
.dbsym r temp1 22 c
.dbsym r temp 10 c
.dbend
.dbfunc e xuanya_car _xuanya_car fV
.even
_xuanya_car::
.dbline -1
.dbline 296
; //PORTD = 0x90;//左转//1001 0000快速左转//PORTA = 0x33;//0011,0011
; //PORTD = 0x80;//左转//1000 0000慢速左转//PORTA = 0xF3;//1111,0011
; //PORTD = 0x60;//右转//0110 0000快速右转//PORTA = 0xCC;//1100,1100
; //PORTD = 0x20;//右转//0010 0000慢速右转//PORTA = 0xCF;//1100,1111
; //PORTD = 0x50;//后退//0101 0000 //PORTA = 0x3C;//0011,1100
;
; //PC3声控启动
; // 用PD7~PD4来作为电机驱动端
;
; #define xuanya_delayms 300
;
; unsigned char pa,pb,pc,pd;
;
; void xuanya_car(void)
; {
.dbline 297
; PORTA = 0xa5;//1010,0101
ldi R24,165
out 0x1b,R24
.dbline 299
;
; work_status = 0x20;//置对应的工作状态标志
ldi R24,32
sts _work_status,R24
.dbline 301
;
; mic_startup(); //等待声控启动
rcall _mic_startup
rjmp L163
L162:
.dbline 304
;
; while(1)
; {//左(pc7) 中(pc6) 右(pc5)
.dbline 306
;
; sw_touch(); //检测轻触开关
rcall _sw_touch
.dbline 308
;
; pc = PINC & 0x10;
in R24,0x13
andi R24,16
sts _pc,R24
.dbline 309
; if(pc == 0x00)
tst R24
brne L165
.dbline 310
; {//后退//左转
.dbline 311
; backward();//后退
rcall _backward
.dbline 312
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 313
; turn_right();//左转
rcall _turn_right
.dbline 314
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 315
; }
L165:
.dbline 316
; pc = PINC & 0xE0;
in R24,0x13
andi R24,224
sts _pc,R24
.dbline 317
; if(pc == 0x40)
cpi R24,64
brne L167
.dbline 318
; {//后退//左转
.dbline 319
; backward();//后退
rcall _backward
.dbline 320
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 321
; turn_right();//左转
rcall _turn_right
.dbline 322
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 323
; }
L167:
.dbline 324
; if(pc == 0x80)
lds R24,_pc
cpi R24,128
brne L169
.dbline 325
; {//后退//左转
.dbline 326
; backward();//后退
rcall _backward
.dbline 327
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 328
; turn_right();//左转
rcall _turn_right
.dbline 329
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 330
; }
L169:
.dbline 331
; if(pc == 0x20)
lds R24,_pc
cpi R24,32
brne L171
.dbline 332
; {//后退//左转
.dbline 333
; backward();//后退
rcall _backward
.dbline 334
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 335
; turn_right();//左转
rcall _turn_right
.dbline 336
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 337
; }
L171:
.dbline 338
; if(pc == 0xc0)
lds R24,_pc
cpi R24,192
brne L173
.dbline 339
; {//后退//左转
.dbline 340
; backward();//后退
rcall _backward
.dbline 341
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 342
; turn_right();//左转
rcall _turn_right
.dbline 343
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 344
; }
L173:
.dbline 345
; if(pc == 0x60)
lds R24,_pc
cpi R24,96
brne L175
.dbline 346
; {//后退//左转
.dbline 347
; backward();//后退
rcall _backward
.dbline 348
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 349
; turn_right();//左转
rcall _turn_right
.dbline 350
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 351
; }
L175:
.dbline 352
; if(pc == 0xE0)
lds R24,_pc
cpi R24,224
brne L177
.dbline 353
; {
.dbline 355
; //刹车 //led灯为流水灯
; stop();
rcall _stop
.dbline 356
; PORTA = 0x3C;
ldi R24,60
out 0x1b,R24
.dbline 357
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 358
; PORTA = 0xC3;
ldi R24,195
out 0x1b,R24
.dbline 359
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 360
; }
rjmp L178
L177:
.dbline 362
; else
; {
.dbline 363
; forward();//前行
rcall _forward
.dbline 364
; }
L178:
.dbline 365
L163:
.dbline 303
rjmp L162
X9:
.dbline -2
.dbline 366
; }
; }
L161:
.dbline 0 ; func end
ret
.dbend
.dbfunc e remote_car _remote_car fV
; remote_in -> R22
.even
_remote_car::
rcall push_gset2
.dbline -1
.dbline 369
;
; void remote_car()
; {//遥控车程序
.dbline 372
; unsigned char remote_in;
;
; PORTA = 0x0f;
ldi R24,15
out 0x1b,R24
.dbline 374
;
; work_status = 0x60;//置对应的工作状态标志
ldi R24,96
sts _work_status,R24
.dbline 376
;
; mic_startup();//等待声控启动函数
rcall _mic_startup
rjmp L181
L180:
.dbline 379
;
; while(1)
; {
.dbline 381
;
; sw_touch();//检测轻触开关
rcall _sw_touch
.dbline 383
;
; remote_in = PINB & 0x0F;
in R22,0x16
andi R22,15
.dbline 384
; switch (remote_in)
mov R20,R22
clr R21
cpi R20,0
cpc R20,R21
breq L190
X10:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L189
cpi R20,2
ldi R30,0
cpc R21,R30
breq L187
cpi R20,4
ldi R30,0
cpc R21,R30
breq L186
cpi R20,8
ldi R30,0
cpc R21,R30
breq L188
rjmp L183
X11:
.dbline 385
; {//检测遥控器是否有键按下
L186:
.dbline 387
; case 0x04: // < A >
; turn_right(); //右转
rcall _turn_right
.dbline 388
; break;
rjmp L184
L187:
.dbline 390
; case 0x02: // < B >
; backward(); //后退
rcall _backward
.dbline 391
; break;
rjmp L184
L188:
.dbline 393
; case 0x08: // < C >
; stop(); //停止运动
rcall _stop
.dbline 394
; break;
rjmp L184
L189:
.dbline 396
; case 0x01: // < D >
; turn_left(); //左转
rcall _turn_left
.dbline 397
; break;
rjmp L184
L190:
.dbline 399
; case 0x00:
; forward(); //前行
rcall _forward
.dbline 400
; break;
L183:
L184:
.dbline 402
ldi R16,100
ldi R17,0
rcall _delay_ms
.dbline 403
L181:
.dbline 378
rjmp L180
X12:
.dbline -2
.dbline 404
; }
; delay_ms(100);
; }
; }
L179:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r remote_in 22 c
.dbend
.dbfunc e auto_car1 _auto_car1 fV
.even
_auto_car1::
.dbline -1
.dbline 410
;
; //自走车 机器人走四方形路线,遥控器调节行走路线
; unsigned int delay_time1,delay_time2;
;
; void auto_car1()
; {
.dbline 411
; port_init();//PA,PB,PC,PD 初始化
rcall _port_init
.dbline 413
;
; work_status = 0x51;//置对应的工作状态标志
ldi R24,81
sts _work_status,R24
.dbline 415
;
; PORTA = 0x44;//0100,0100
ldi R24,68
out 0x1b,R24
.dbline 417
;
; delay_time1=510; //转弯时间
ldi R24,510
ldi R25,1
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 418
; delay_time2=1200; //前行时间
ldi R24,1200
ldi R25,4
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 420
;
; mic_startup();//等待声控启动
rcall _mic_startup
.dbline 422
;
; forward(); //前行
rcall _forward
.dbline 423
; delay_ms(200);
ldi R16,200
ldi R17,0
rcall _delay_ms
rjmp L193
L192:
.dbline 426
.dbline 427
rcall _sw_touch
.dbline 429
rcall _remote_auto_time
.dbline 431
rcall _turn_right
.dbline 432
lds R16,_delay_time1
lds R17,_delay_time1+1
rcall _delay_ms
.dbline 434
rcall _forward
.dbline 435
lds R16,_delay_time2
lds R17,_delay_time2+1
rcall _delay_ms
.dbline 437
rcall _turn_right
.dbline 438
lds R16,_delay_time1
lds R17,_delay_time1+1
rcall _delay_ms
.dbline 440
rcall _forward
.dbline 441
lds R16,_delay_time2
lds R17,_delay_time2+1
rcall _delay_ms
.dbline 442
L193:
.dbline 425
rjmp L192
X13:
.dbline -2
.dbline 443
;
; while(1)
; {
; sw_touch(); //检测轻触开关
;
; remote_auto_time(); //遥控器控制直行和转弯时间
;
; turn_right(); //右转
; delay_ms(delay_time1);
;
; forward(); //前行
; delay_ms(delay_time2);
;
; turn_right(); //右转
; delay_ms(delay_time1);
;
; forward(); //前行
; delay_ms(delay_time2);
; }
; }
L191:
.dbline 0 ; func end
ret
.dbend
.dbfunc e auto_car8 _auto_car8 fV
.even
_auto_car8::
.dbline -1
.dbline 447
;
; //自走车 机器人走< 8 >字,遥控器调节行走路线
; void auto_car8()
; {
.dbline 448
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 450
;
; work_status = 0x50;//置对应的工作状态标志
ldi R24,80
sts _work_status,R24
.dbline 452
;
; PORTA = 0x88;//1000,1000
ldi R24,136
out 0x1b,R24
.dbline 454
;
; delay_time1=1000; //转弯时间
ldi R24,1000
ldi R25,3
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 455
; delay_time2=1200; //前行时间
ldi R24,1200
ldi R25,4
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 457
;
; mic_startup(); //等待声控启动
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -