📄 sl3010_3.lis
字号:
0080 82BB out 0x12,R24
0082 .dbline 140
0082 ; /* 电子音乐演示程序 */
0082 83EC ldi R24,195
0084 8BBB out 0x1b,R24
0086 .dbline -2
0086 .dbline 141
0086 ; /*******************************************/
0086 L15:
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbend
0088 .dbfunc e stop _stop fV
.even
0088 _stop::
0088 .dbline -1
0088 .dbline 144
0088 ; //使用说明:音乐输出端口:PORTC.0,音乐数据存放
0088 ; //于AT90S8515 的EEPROM存贮器中。
0088 ; // 可以用并口下载软件写入新的音乐文件
0088 .dbline 145
0088 ; //PA口为音乐灯,当不同的音乐节奏,点亮不同的灯。
0088 8FEF ldi R24,255
008A 82BB out 0x12,R24
008C .dbline 146
008C ;
008C 8BBB out 0x1b,R24
008E .dbline -2
008E .dbline 147
008E ; #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
008E L16:
008E .dbline 0 ; func end
008E 0895 ret
0090 .dbend
0090 .dbfunc e sw_touch _sw_touch fV
.even
0090 _sw_touch::
0090 .dbline -1
0090 .dbline 163
0090 ; void timer1_ovf_isr(void)
0090 ; {
0090 ; TCNT1=toneconst;
0090 ; PORTC^=1;
0090 ; }
0090 ;
0090 ; void music_car(void)
0090 ; {
0090 ; TCCR1A = 0x00;
0090 ; TCCR1B =(1<<CS11);//8分频
0090 ; temp1=EEPROMread((int)&sound[sound_add]);
0090 ; while(temp1!=0)
0090 ; {
0090 ; temp=temp1;
0090 ; temp&=0x0f;
0090 ; /*
0090 .dbline 164
0090 ; //PA口为音乐灯
0090 83B3 in R24,0x13
0092 8071 andi R24,16
0094 80931700 sts _sw_in,R24
0098 .dbline 165
0098 ; if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
0098 8823 tst R24
009A C9F4 brne L18
009C .dbline 166
009C ; if(temp==5 || temp==6){PORTA = 0xfc;}
009C .dbline 167
009C ; if(temp==7 || temp==8 ){PORTA = 0xf8;}
009C EBDF rcall _backward
009E .dbline 168
009E ; if(temp==9){PORTA = 0xf0;}
009E 0AEF ldi R16,250
00A0 10E0 ldi R17,0
00A2 C6DF rcall _delay_ms
00A4 .dbline 170
00A4 ; if(temp==10){PORTA = 0xe0;}
00A4 ; if(temp==11){PORTA = 0xc0;}
00A4 80911800 lds R24,_work_status
00A8 8037 cpi R24,112
00AA 69F4 brne L20
00AC .dbline 171
00AC ; if(temp==12){PORTA = 0x80;}
00AC .dbline 172
00AC ; if(temp==13 || temp==14 || temp==15){PORTA = 0x00;}
00AC EDDF rcall _stop
00AE 0AC0 rjmp L23
00B0 L22:
00B0 .dbline 174
00B0 .dbline 175
00B0 85E5 ldi R24,85
00B2 8BBB out 0x1b,R24
00B4 .dbline 176
00B4 0AEF ldi R16,250
00B6 10E0 ldi R17,0
00B8 BBDF rcall _delay_ms
00BA .dbline 177
00BA 8AEA ldi R24,170
00BC 8BBB out 0x1b,R24
00BE .dbline 178
00BE 0AEF ldi R16,250
00C0 10E0 ldi R17,0
00C2 B6DF rcall _delay_ms
00C4 .dbline 179
00C4 L23:
00C4 .dbline 173
00C4 ; */
00C4 F5CF rjmp L22
00C6 X1:
00C6 .dbline 180
00C6 ; if(temp!=0)
00C6 ; {
00C6 ; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
00C6 ; temp--;
00C6 ; toneconst=TONETABLE[temp];
00C6 ; TCNT1=toneconst;
00C6 ; }
00C6 L20:
00C6 .dbline 182
00C6 ; temp=temp1;
00C6 ; temp>>=4;
00C6 C7DF rcall _turn_left
00C8 .dbline 183
00C8 ; temp&=0x0f;
00C8 0AEF ldi R16,250
00CA 10E0 ldi R17,0
00CC B1DF rcall _delay_ms
00CE .dbline 184
00CE ; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
00CE L18:
00CE .dbline 186
00CE ; TIMSK&=~(1<<TOIE1);
00CE ; sound_add++;
00CE 86B3 in R24,0x16
00D0 8077 andi R24,112
00D2 80931700 sts _sw_in,R24
00D6 .dbline 187
00D6 ; temp1=EEPROMread((int)&sound[sound_add]);
00D6 8035 cpi R24,80
00D8 41F4 brne L25
00DA .dbline 188
00DA ; }
00DA .dbline 189
00DA ; delay_ms(1000);
00DA D1DF rcall _forward
00DC .dbline 190
00DC ; }
00DC 0AEF ldi R16,250
00DE 10E0 ldi R17,0
00E0 A7DF rcall _delay_ms
00E2 .dbline 192
00E2 ;
00E2 ; // 电机驱动信号 led灯指示电机状态
00E2 B9DF rcall _turn_left
00E4 .dbline 193
00E4 ; //PORTD = 0xA0;//前行//1010 0000 //PORTA = 0xC3;//1100,0011
00E4 0AEF ldi R16,250
00E6 10E0 ldi R17,0
00E8 A3DF rcall _delay_ms
00EA .dbline 194
00EA ; //PORTD = 0x90;//左转//1001 0000快速左转//PORTA = 0x33;//0011,0011
00EA L25:
00EA .dbline 195
00EA ; //PORTD = 0x80;//左转//1000 0000慢速左转//PORTA = 0xF3;//1111,0011
00EA 80911700 lds R24,_sw_in
00EE 8033 cpi R24,48
00F0 41F4 brne L27
00F2 .dbline 196
00F2 ; //PORTD = 0x60;//右转//0110 0000快速右转//PORTA = 0xCC;//1100,1100
00F2 .dbline 197
00F2 ; //PORTD = 0x20;//右转//0010 0000慢速右转//PORTA = 0xCF;//1100,1111
00F2 C0DF rcall _backward
00F4 .dbline 198
00F4 ; //PORTD = 0x50;//后退//0101 0000 //PORTA = 0x3C;//0011,1100
00F4 0AEF ldi R16,250
00F6 10E0 ldi R17,0
00F8 9BDF rcall _delay_ms
00FA .dbline 200
00FA ;
00FA ; //PC3声控启动
00FA ADDF rcall _turn_left
00FC .dbline 201
00FC ; // 用PD7~PD4来作为电机驱动端
00FC 0AEF ldi R16,250
00FE 10E0 ldi R17,0
0100 97DF rcall _delay_ms
0102 .dbline 202
0102 ;
0102 L27:
0102 .dbline 203
0102 ; void xuanya_car(void)
0102 80911700 lds R24,_sw_in
0106 8036 cpi R24,96
0108 41F4 brne L29
010A .dbline 204
010A ; {
010A .dbline 205
010A ; PORTA = 0xa5;//1010,0101
010A B4DF rcall _backward
010C .dbline 206
010C ;
010C 0AEF ldi R16,250
010E 10E0 ldi R17,0
0110 8FDF rcall _delay_ms
0112 .dbline 208
0112 ; work_status = 0x20;//置对应的工作状态标志
0112 ;
0112 A1DF rcall _turn_left
0114 .dbline 209
0114 ; mic_startup(); //等待声控启动
0114 0AEF ldi R16,250
0116 10E0 ldi R17,0
0118 8BDF rcall _delay_ms
011A .dbline 210
011A ;
011A L29:
011A .dbline 211
011A ; while(1)
011A 80911700 lds R24,_sw_in
011E 8032 cpi R24,32
0120 F1F4 brne L31
0122 .dbline 212
0122 ; {//左(pc7) 中(pc6) 右(pc5)
0122 .dbline 213
0122 ;
0122 B2DF rcall _stop
0124 .dbline 214
0124 ; sw_touch(); //检测轻触开关
0124 08EE ldi R16,1000
0126 13E0 ldi R17,3
0128 83DF rcall _delay_ms
012A 18C0 rjmp L34
012C L33:
012C .dbline 216
012C ;
012C ; pc = PINC & 0x10;
012C .dbline 217
012C ; if(pc == 0x00)
012C 83B3 in R24,0x13
012E 8071 andi R24,16
0130 80931700 sts _sw_in,R24
0134 .dbline 218
0134 ; {//后退//左转
0134 8823 tst R24
0136 09F4 brne L36
0138 .dbline 219
0138 ; backward();//后退
0138 .dbline 219
0138 12C0 rjmp L35
013A L36:
013A .dbline 220
013A ; delay_ms(xuanya_delayms);
013A 85E5 ldi R24,85
013C 8BBB out 0x1b,R24
013E .dbline 221
013E ; turn_right();//左转
013E 0AEF ldi R16,250
0140 10E0 ldi R17,0
0142 76DF rcall _delay_ms
0144 .dbline 222
0144 ; delay_ms(xuanya_delayms/2);
0144 8AEA ldi R24,170
0146 8BBB out 0x1b,R24
0148 .dbline 223
0148 ; }
0148 0AEF ldi R16,250
014A 10E0 ldi R17,0
014C 71DF rcall _delay_ms
014E .dbline 224
014E ; pc = PINC & 0xE0;
014E 86B3 in R24,0x16
0150 8F70 andi R24,15
0152 80931600 sts _remote_in,R24
0156 .dbline 225
0156 ; if(pc == 0x40)
0156 8823 tst R24
0158 09F0 breq L38
015A .dbline 226
015A ; {//后退//左转
015A .dbline 226
015A 01C0 rjmp L35
015C L38:
015C .dbline 227
015C L34:
015C .dbline 215
015C E7CF rjmp L33
015E L35:
015E .dbline 228
015E L31:
015E .dbline -2
015E .dbline 229
015E ; backward();//后退
015E ; delay_ms(xuanya_delayms);
015E ; turn_right();//左转
015E L17:
015E .dbline 0 ; func end
015E 0895 ret
0160 .dbend
0160 .dbfunc e mic_startup _mic_startup fV
.even
0160 _mic_startup::
0160 .dbline -1
0160 .dbline 232
0160 ; delay_ms(xuanya_delayms/2);
0160 ; }
0160 ; if(pc == 0x80)
0160 07C0 rjmp L42
0162 L41:
0162 .dbline 235
0162 ; {//后退//左转
0162 ; backward();//后退
0162 ; delay_ms(xuanya_delayms);
0162 .dbline 236
0162 ; turn_right();//左转
0162 83B3 in R24,0x13
0164 8870 andi R24,8
0166 80931500 sts _mic_in,R24
016A .dbline 237
016A ; delay_ms(xuanya_delayms/2);
016A 8823 tst R24
016C 09F4 brne L44
016E .dbline 237
016E .dbline 237
016E 01C0 rjmp L43
0170 L44:
0170 .dbline 238
0170 L42:
0170 .dbline 234
0170 F8CF rjmp L41
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -