📄 sl3010_4.s
字号:
.dbline 368
; break;
rjmp L132
L137:
.dbline 370
; case 0x01: // < D >
; sound_add=0;
clr R2
clr R3
sts _sound_add+1,R3
sts _sound_add,R2
.dbline 371
; sound_1 = 0x44;
ldi R24,68
sts _sound_1,R24
.dbline 372
; break;
L131:
L132:
.dbline 374
; }
; if(sound_1 == 0x11)
lds R24,_sound_1
cpi R24,17
brne L138
.dbline 375
; {
.dbline 376
; temp1 = music_11[sound_add];
ldi R24,<_music_11
ldi R25,>_music_11
lds R2,_sound_add
lds R3,_sound_add+1
add R2,R24
adc R3,R25
mov R30,R2
mov R31,R3
lpm
sts _temp1,R0
.dbline 377
; }
L138:
.dbline 378
; if(sound_1 == 0x22)
lds R24,_sound_1
cpi R24,34
brne L140
.dbline 379
; {
.dbline 380
; temp1 = music_22[sound_add];
ldi R24,<_music_22
ldi R25,>_music_22
lds R2,_sound_add
lds R3,_sound_add+1
add R2,R24
adc R3,R25
mov R30,R2
mov R31,R3
lpm
sts _temp1,R0
.dbline 381
; }
L140:
.dbline 382
; if(sound_1 == 0x33)
lds R24,_sound_1
cpi R24,51
brne L142
.dbline 383
; {
.dbline 384
; temp1 = music_33[sound_add];
ldi R24,<_music_33
ldi R25,>_music_33
lds R2,_sound_add
lds R3,_sound_add+1
add R2,R24
adc R3,R25
mov R30,R2
mov R31,R3
lpm
sts _temp1,R0
.dbline 385
; }
L142:
.dbline 386
; if(sound_1 == 0x44)
lds R24,_sound_1
cpi R24,68
brne L144
.dbline 387
; {
.dbline 388
; temp1 = music_44[sound_add];
ldi R24,<_music_44
ldi R25,>_music_44
lds R2,_sound_add
lds R3,_sound_add+1
add R2,R24
adc R3,R25
mov R30,R2
mov R31,R3
lpm
sts _temp1,R0
.dbline 389
; }
L144:
.dbline 390
; if(sound_1 == 0x88)
lds R24,_sound_1
cpi R24,136
brne L146
.dbline 391
; {
.dbline 392
; temp1=EEPROMread((int)&sound[sound_add]);
ldi R24,<_sound
ldi R25,>_sound
lds R16,_sound_add
lds R17,_sound_add+1
add R16,R24
adc R17,R25
rcall _EEPROMread
sts _temp1,R16
.dbline 393
; }
L146:
.dbline 394
; }
L129:
.dbline 395
L127:
.dbline -2
.dbline 396
; }
; }
L65:
rcall pop_gset1
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e stop_timer0 _stop_timer0 fV
.even
_stop_timer0::
.dbline -1
.dbline 399
;
; void stop_timer0()
; {
.dbline 400
; CLI();
cli
.dbline 401
; TCCR0 = 0x00;//停止timer0
clr R2
out 0x33,R2
.dbline 402
; MCUCR = 0x00;
out 0x35,R2
.dbline 403
; GIMSK = 0x00;
out 0x3b,R2
.dbline 404
; TIMSK = 0x00;
out 0x39,R2
.dbline 405
; SEI();
sei
.dbline -2
.dbline 406
; }
L148:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 12
rjmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile E:\icc\iccavr\sl3010\sl3010_4\sl3010_4.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 421
;
; /*******************************************/
; /* 电子音乐演示程序 */
; /*******************************************/
; //使用说明:音乐输出端口:PORTC.0,音乐数据存放
; //于AT90S8515 的EEPROM存贮器中。
; // 可以用并口下载软件写入新的音乐文件
;
; //声控起动音乐机器人程序,未起动时,PA口的8 LED 呈广告灯效果(霓虹灯)
; //声控起动后,机器人开始演奏音乐
; //按遥控器上不同的键后可改变机器人演奏的乐曲。
;
; #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
; void timer1_ovf_isr(void)
; {
.dbline 422
; TCNT1=toneconst;
lds R2,_toneconst
lds R3,_toneconst+1
out 0x2d,R3
out 0x2c,R2
.dbline 423
; PORTC^=1;
ldi R24,1
in R2,0x15
eor R2,R24
out 0x15,R2
.dbline -2
.dbline 424
; }
L149:
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
.even
_music_car::
.dbline -1
.dbline 427
;
; void music_car(void)
; {
.dbline 428
; TCCR1A = 0x00;
clr R2
out 0x2f,R2
.dbline 429
; TCCR1B =(1<<CS11);//8分频
ldi R24,2
out 0x2e,R24
.dbline 430
; temp1=EEPROMread((int)&sound[sound_add]);
ldi R24,<_sound
ldi R25,>_sound
lds R16,_sound_add
lds R17,_sound_add+1
add R16,R24
adc R17,R25
rcall _EEPROMread
sts _temp1,R16
rjmp L152
L151:
.dbline 432
; while(temp1!=0)
; {
.dbline 433
; temp=temp1;
lds R2,_temp1
sts _temp,R2
.dbline 434
; temp&=0x0f;
mov R24,R2
andi R24,15
sts _temp,R24
.dbline 435
; if(temp!=0)
mov R2,R24
tst R24
breq L154
.dbline 436
; {
.dbline 437
; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
in R24,0x39
ori R24,128
out 0x39,R24
.dbline 438
; temp--;
mov R24,R2
subi R24,1
sts _temp,R24
.dbline 439
; toneconst=TONETABLE[temp];
ldi R24,<_TONETABLE
ldi R25,>_TONETABLE
lds R16,_temp
clr R17
lsl R16
rol R17
add R16,R24
adc R17,R25
rcall lpm16
sts _toneconst+1,R17
sts _toneconst,R16
.dbline 440
; TCNT1=toneconst;
out 0x2d,R17
out 0x2c,R16
.dbline 441
; }
L154:
.dbline 442
lds R2,_temp1
sts _temp,R2
.dbline 443
mov R24,R2
swap R24
andi R24,#0x0F
sts _temp,R24
.dbline 444
andi R24,15
sts _temp,R24
.dbline 445
mov R18,R24
clr R19
ldi R16,129
ldi R17,0
rcall mpy16s
rcall _delay_ms
.dbline 446
in R24,0x39
andi R24,127
out 0x39,R24
.dbline 447
lds R24,_sound_add
lds R25,_sound_add+1
adiw R24,1
sts _sound_add+1,R25
sts _sound_add,R24
.dbline 448
ldi R24,<_sound
ldi R25,>_sound
lds R16,_sound_add
lds R17,_sound_add+1
add R16,R24
adc R17,R25
rcall _EEPROMread
sts _temp1,R16
.dbline 449
L152:
.dbline 431
lds R2,_temp1
tst R2
breq X19
rjmp L151
X19:
.dbline 450
; temp=temp1;
; temp>>=4;
; temp&=0x0f;
; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
; TIMSK&=~(1<<TOIE1);
; sound_add++;
; temp1=EEPROMread((int)&sound[sound_add]);
; }
; delay_ms(1000);
ldi R16,1000
ldi R17,3
.dbline -2
.dbline 451
; }
L150:
.dbline 0 ; func end
rjmp _delay_ms
.dbend
.dbfunc e xuanya_car _xuanya_car fV
.even
_xuanya_car::
.dbline -1
.dbline 464
;
; // 电机驱动信号 led灯指示电机状态
; //PORTD = 0xA0;//前行//1010 0000 //PORTA = 0xC3;//1100,0011
; //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来作为电机驱动端
; void xuanya_car(void)
; {
.dbline 465
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 466
; PORTA = 0xa5;//1010,0101
ldi R24,165
out 0x1b,R24
.dbline 467
; delay_ms(1000);
ldi R16,1000
ldi R17,3
rcall _delay_ms
.dbline 468
; work_status = 0x20;//置对应的工作状态标志
ldi R24,32
sts _work_status,R24
.dbline 471
;
;
; gzsl=0x88;timers=0;t0_times=0;
ldi R24,136
sts _gzsl,R24
.dbline 471
clr R2
sts _timers,R2
.dbline 471
sts _t0_times,R2
.dbline 472
; CLI(); //disable all interrupts
cli
.dbline 473
; timer0_init();
rcall _timer0_init
.dbline 475
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 476
; GIMSK = 0x00;
out 0x3b,R2
.dbline 477
; TIMSK|=(1<<TOIE0);
in R24,0x39
ori R24,2
out 0x39,R24
.dbline 478
; SEI(); //re-enable interrupts
sei
.dbline 480
;
; mic_startup();//等待声控启动函数
rcall _mic_startup
.dbline 482
;
; gzsl=0x44;t0_times=0;
ldi R24,68
sts _gzsl,R24
.dbline 482
clr R2
sts _t0_times,R2
.dbline 483
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 484
; TCCR1B =(1<<CS11);//8分频
ldi R24,2
out 0x2e,R24
L157:
.dbline 486
; xuanya_car_rst:
; temp=temp1 = 0;
clr R2
sts _temp1,R2
sts _temp,R2
.dbline 487
; sound_add = 0;
clr R3
sts _sound_add+1,R3
sts _sound_add,R2
rjmp L159
L158:
.dbline 489
; while(temp1!=0)
; {
.dbline 490
; temp=temp1;
lds R2,_temp1
sts _temp,R2
.dbline 491
; temp&=0x0f;
mov R24,R2
andi R24,15
sts _temp,R24
.dbline 492
; if(temp!=0)
mov R2,R24
tst R24
breq L161
.dbline 493
; {
.dbline 494
; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
in R24,0x39
ori R24,128
out 0x39,R24
.dbline 495
; temp--;
mov R24,R2
subi R24,1
sts _temp,R24
.dbline 496
; toneconst=TONETABLE[temp];
ldi R24,<_TONETABLE
ldi R25,>_TONETABLE
lds R16,_temp
clr R17
lsl R16
rol R17
add R16,R24
adc R17,R25
rcall lpm16
sts _toneconst+1,R17
sts _toneconst,R16
.dbline 497
; TCNT1=toneconst;
out 0x2d,R17
out 0x2c,R16
.dbline 498
; }
L161:
.dbline 499
lds R2,_temp1
sts _temp,R2
.dbline 500
mov R24,R2
swap R24
andi R24,#0x0F
sts _temp,R24
.dbline 501
andi R24,15
sts _temp,R24
.dbline 502
mov R18,R24
clr R19
ldi R16,129
ldi R17,0
rcall mpy16s
rcall _delay_ms
.dbline 503
in R24,0x39
andi R24,127
out 0x39,R24
.dbline 504
lds R24,_sound_add
lds R25,_sound_add+1
adiw R24,1
sts _sound_add+1,R25
sts _sound_add,R24
.dbline 505
L159:
.dbline 488
lds R2,_temp1
tst R2
breq X21
rjmp L158
X21:
.dbline 506
rjmp L157
X20:
.dbline -2
L156:
.dbline 0 ; func end
ret
.dbend
.dbfunc e remote_car _remote_car fV
.even
_remote_car::
.dbline -1
.dbline 510
; temp=temp1;
; temp>>=4;
; temp&=0x0f;
; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
; TIMSK&=~(1<<TOIE1);
; sound_add++;
; }
; goto xuanya_car_rst;
; }
;
; void remote_car()
; {//遥控车程序
.dbline 512
;
; port_init();//调用端口初始化函数
rcall _port_init
.dbline 514
;
; work_status = 0x60;//置对应的工作状态标志
ldi R24,96
sts _work_status,R24
L164:
.dbline 517
;
; remote_rst:
; PORTA = 0x0F;
ldi R24,15
out 0x1b,R24
.dbline 518
; delay_ms(1000);
ldi R16,1000
ldi R17,3
rcall _delay_ms
.dbline 520
;
; gzsl=0x88;timers=0;t0_times=0;
ldi R24,136
sts _gzsl,R24
.dbline 520
clr R2
sts _timers,R2
.dbline 520
sts _t0_times,R2
.dbline 521
; CLI(); //disable all interrupts
cli
.dbline 522
; timer0_init();
rcall _timer0_init
.dbline 524
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 525
; GIMSK = 0x00;
out 0x3b,R2
.dbline 526
; TIMSK|=(1<<TOIE0);
in R24,0x39
ori R24,2
out 0x39,R24
.dbline 527
; SEI(); //re-enable interrupts
sei
.dbline 529
;
; mic_startup();//等待声控启动函数
rcall _mic_startup
.dbline 531
;
; gzsl=0x33;t0_times=0;
ldi R24,51
sts _gzsl,R24
.dbline 531
clr R2
sts _t0_times,R2
.dbline 532
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 533
; TCCR1B =(1<<CS11);//8分频
ldi R24,2
out 0x2e,R24
L165:
.dbline 535
; n01:
; temp=temp1 = 0;
clr R2
sts _temp1,R2
sts _temp,R2
.dbline 536
; sound_add = 0;
clr R3
sts _sound_add+1,R3
sts _sound_add,R2
rjmp L167
L166:
.dbline 538
; while(temp1!=0)
; {
.dbline 539
; temp=temp1;
lds R2,_temp1
sts _temp,R2
.dbline 540
; temp&=0x0f;
mov R24,R2
andi R24,15
sts _temp,R24
.dbline 541
; if(temp!=0)
mov R2,R24
tst R24
breq L169
.dbline 542
; {
.dbline 543
; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
in R24,0x39
ori R24,128
out 0x39,R24
.dbline 544
; temp--;
mov R24,R2
subi R24,1
sts _temp,R24
.dbline 545
; toneconst=TONETABLE[temp];
ldi R24,<_TONETABLE
ldi R25,>_TONETABLE
lds R16,_temp
clr R17
lsl R16
rol R17
add R16,R24
adc R17,R25
rcall lpm16
sts _toneconst+1,R17
sts _toneconst,R16
.dbline 546
; TCNT1=toneconst;
out 0x2d,R17
out 0x2c,R16
.dbline 547
; }
L169:
.dbline 548
lds R2,_temp1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -