📄 remote_car.lst
字号:
014A DFB2 RCALL _stop
(0214) delay_ms(touch_time*4);
014B EE08 LDI R16,0xE8
014C E013 LDI R17,3
014D DF83 RCALL _delay_ms
014E C018 RJMP 0x0167
(0215) while(1)
(0216) {
(0217) sw_in = PINC & 0x10;
014F B383 IN R24,0x13
0150 7180 ANDI R24,0x10
0151 9380007D STS _sw_in,R24
(0218) if(sw_in == 0x00)
0153 2388 TST R24
0154 F409 BNE 0x0156
(0219) {break;}
0155 C012 RJMP 0x0168
(0220) PORTA = 0x55;
0156 E585 LDI R24,0x55
0157 BB8B OUT 0x1B,R24
(0221) delay_ms(250);
0158 EF0A LDI R16,0xFA
0159 E010 LDI R17,0
015A DF76 RCALL _delay_ms
(0222) PORTA = 0xAA;
015B EA8A LDI R24,0xAA
015C BB8B OUT 0x1B,R24
(0223) delay_ms(250);
015D EF0A LDI R16,0xFA
015E E010 LDI R17,0
015F DF71 RCALL _delay_ms
(0224) remote_in = PINB & 0x0f;
0160 B386 IN R24,0x16
0161 708F ANDI R24,0xF
0162 9380007C STS _remote_in,R24
(0225) if(remote_in != 0x00)
0164 2388 TST R24
0165 F009 BEQ 0x0167
(0226) {break;}
0166 C001 RJMP 0x0168
0167 CFE7 RJMP 0x014F
(0227) }
(0228) }
(0229) }
0168 9508 RET
(0230)
(0231) void mic_startup()
(0232) {//声控启动程序运行
_mic_startup:
0169 C007 RJMP 0x0171
(0233)
(0234) while(1)//等待pc3(声控键)按键按下
(0235) { //无键按下等待
(0236) mic_in = PINC & 0x08; //pc2=0
016A B383 IN R24,0x13
016B 7088 ANDI R24,0x8
016C 9380007B STS _mic_in,R24
(0237) if(mic_in == 0){break;}
016E 2388 TST R24
016F F409 BNE 0x0171
0170 C001 RJMP 0x0172
0171 CFF8 RJMP 0x016A
(0238) }//有键按下运行下面的程序
(0239) }
0172 9508 RET
(0240)
(0241) // #
(0242) // #
(0243) // #
(0244) // #
(0245) // # // delay_time1 转弯时间
(0246) // # # # # # // delay_time2 直行时间
(0247) // # X # //<A> 0x04 delay_time2-50
(0248) // # B C # //<B> 0x02 delay_time1+50
(0249) // # D A # //<C> 0x08 delay_time1-50
(0250) // # # //<D> 0x01 delay_time2+50
(0251) // # # # # // max: 2000 min: 200
(0252)
(0253) void remote_auto_time()
(0254) {
(0255) remote_in = PINB & 0x0F;
_remote_auto_time:
0173 B386 IN R24,0x16
0174 708F ANDI R24,0xF
0175 9380007C STS _remote_in,R24
(0256) switch (remote_in)
0177 2F08 MOV R16,R24
0178 2711 CLR R17
0179 3000 CPI R16,0
017A 0701 CPC R16,R17
017B F409 BNE 0x017D
017C C062 RJMP 0x01DF
017D 3001 CPI R16,1
017E E0E0 LDI R30,0
017F 071E CPC R17,R30
0180 F409 BNE 0x0182
0181 C04A RJMP 0x01CC
0182 3002 CPI R16,2
0183 E0E0 LDI R30,0
0184 071E CPC R17,R30
0185 F0F1 BEQ 0x01A4
0186 3004 CPI R16,4
0187 E0E0 LDI R30,0
0188 071E CPC R17,R30
0189 F029 BEQ 0x018F
018A 3008 CPI R16,0x8
018B E0E0 LDI R30,0
018C 071E CPC R17,R30
018D F151 BEQ 0x01B8
018E C050 RJMP 0x01DF
(0257) {//检测遥控器是否有键按下
(0258) case 0x04: // < A >
(0259) delay_time2 = delay_time2 - 50;
018F 91800077 LDS R24,_delay_time2
0191 91900078 LDS R25,_delay_time2+1
0193 97C2 SBIW R24,0x32
0194 93900078 STS _delay_time2+1,R25
0196 93800077 STS _delay_time2,R24
(0260) if(delay_time2 == 50)
0198 3382 CPI R24,0x32
0199 E0E0 LDI R30,0
019A 079E CPC R25,R30
019B F009 BEQ 0x019D
019C C042 RJMP 0x01DF
(0261) {delay_time2 = 100;}
019D E684 LDI R24,0x64
019E E090 LDI R25,0
019F 93900078 STS _delay_time2+1,R25
01A1 93800077 STS _delay_time2,R24
(0262) break;
01A3 C03B RJMP 0x01DF
(0263) case 0x02: // < B >
(0264) delay_time1 = delay_time1 + 50;
01A4 91800079 LDS R24,_delay_time1
01A6 9190007A LDS R25,_delay_time1+1
01A8 96C2 ADIW R24,0x32
01A9 9390007A STS _delay_time1+1,R25
01AB 93800079 STS _delay_time1,R24
(0265) if(delay_time1 == 2050)
01AD 3082 CPI R24,2
01AE E0E8 LDI R30,0x8
01AF 079E CPC R25,R30
01B0 F571 BNE 0x01DF
(0266) {delay_time1 = 2000;}
01B1 ED80 LDI R24,0xD0
01B2 E097 LDI R25,7
01B3 9390007A STS _delay_time1+1,R25
01B5 93800079 STS _delay_time1,R24
(0267) break;
01B7 C027 RJMP 0x01DF
(0268) case 0x08: // < C >
(0269) delay_time1 = delay_time1 - 50;
01B8 91800079 LDS R24,_delay_time1
01BA 9190007A LDS R25,_delay_time1+1
01BC 97C2 SBIW R24,0x32
01BD 9390007A STS _delay_time1+1,R25
01BF 93800079 STS _delay_time1,R24
(0270) if(delay_time1 == 50)
01C1 3382 CPI R24,0x32
01C2 E0E0 LDI R30,0
01C3 079E CPC R25,R30
01C4 F4D1 BNE 0x01DF
(0271) {delay_time1 = 100;}
01C5 E684 LDI R24,0x64
01C6 E090 LDI R25,0
01C7 9390007A STS _delay_time1+1,R25
01C9 93800079 STS _delay_time1,R24
(0272) break;
01CB C013 RJMP 0x01DF
(0273) case 0x01: // < D >
(0274) delay_time2 = delay_time2 + 50;
01CC 91800077 LDS R24,_delay_time2
01CE 91900078 LDS R25,_delay_time2+1
01D0 96C2 ADIW R24,0x32
01D1 93900078 STS _delay_time2+1,R25
01D3 93800077 STS _delay_time2,R24
(0275) if(delay_time2 == 2050)
01D5 3082 CPI R24,2
01D6 E0E8 LDI R30,0x8
01D7 079E CPC R25,R30
01D8 F431 BNE 0x01DF
(0276) {delay_time2 = 2000;}
01D9 ED80 LDI R24,0xD0
01DA E097 LDI R25,7
01DB 93900078 STS _delay_time2+1,R25
01DD 93800077 STS _delay_time2,R24
(0277) break;
(0278) case 0x00: // 无按键
(0279) break;
(0280) }
(0281) }
01DF 9508 RET
FILE: E:\icc\iccavr\sl3010\remote_car\remote_car.c
(0001) #include <io8515v.h>
(0002) #include <macros.h>
(0003) #include <sl3010.c>
(0004)
(0005) //声控起动遥控车程序,未起动时,PA口的8 LED 呈广告灯效果(霓虹灯)
(0006) //声控起动后,机器人开始动作
(0007) //遥控器无按键,机器人直行
(0008) //按住 < A > 键,机器人右转,同时演奏右转指示音乐;
(0009) //按住 < B > 键,机器人后退,同时演奏后退指示音乐;
(0010) //按住 < C > 键,机器人停止,同时演奏停止指示音乐;
(0011) //按住 < D > 键,机器人左转,同时演奏左转指示音乐;
(0012) //释放遥控器按键,音乐停止
(0013) //连续 按住 < C > 键时间超过 10s,遥控机器人复位,等待声控重新起动
(0014)
(0015) /* 音阶表 */
(0016) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0017) RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0018) /* 音阶重装常数 */
(0019) unsigned int toneconst;
(0020) unsigned int sound_add=0;
(0021) unsigned int delay_time1,delay_time2,led_delayms=600;
(0022) unsigned char temp,temp1;
(0023) unsigned char pa,pb,pc,pd,remote_in,timers,cny_in,cny_times,rst_time,cds,pd_select,remote_select;
(0024) unsigned char gzsl,t0_times;
(0025) unsigned char sound_1,sound_2;
(0026)
(0027) const unsigned char led_data[]=
(0028) {//设置LED广告灯数据表
(0029) 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0030) 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
(0031) 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0032) 0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
(0033) 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0034) 0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
(0035) 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0036) 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
(0037) 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0038) 0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
(0039) 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,
(0040)
(0041) 0x0a,0x0a
(0042) };
(0043)
(0044) const unsigned char sound_none[]={0x28,0x27,0x36,0x16,0x45,0x47,0x46,0x46,0x46,0x23,0x25,0x46,0x4a,0x39,0x18,0x27,
(0045) 0x28,0x48,0x48,0x28,0x27,0x36,0x16,0x45,0x27,0x26,0x46,0x46,0x46,0x46,0x46,0x46,0x00,0x00};
(0046) const unsigned char sound_right[]={0x23,0x25,0x46,0x4a,0x39,0x18,0x27,0x28,0x48,0x48,0x48,
(0047) 0x28,0x27,0x36,0x16,0x45,0x47,0x46,0x46,0x46,0x00,0x00};
(0048) const unsigned char sound_back[]={0x2a,0x2c,0x4d,0x4d,0x4d,0x2a,0x2c,0x49,0x49,0x49,0x2a,0x2c,0x2d,0x4f,
(0049) 0x2d,0x4c,0x1d,0x18,0x2a,0x49,0x49,0x49,0x00,0x00};
(0050) const unsigned char sound_stop[]={0x23,0x24,0x25,0x44,0x45,0x24,0x23,0x22,0x42,0x40,0x40,0x23,0x22,0x21,0x41,0x28,
(0051) 0x48,0x23,0x25,0x45,0x40,0x40,0x00,0x00};
(0052) const unsigned char sound_left[]={0x68,0x26,0x25,0x23,0x22,0x13,0x12,0x41,0x41,0x41,0x23,0x25,
(0053) 0x28,0x48,0x28,0x29,0x2a,0x29,0x26,0x45,0x45,0x45,0x00,0x00};
(0054)
(0055) //TIMER0 initialisation - prescale:1024
(0056) // desired value: 25mSec
(0057) // actual value: 24.960mSec (0.2%)
(0058) void timer0_init(void)
(0059) {
(0060) TCCR0 = 0x00; //stop timer
_timer0_init:
01E0 2422 CLR R2
01E1 BE23 OUT 0x33,R2
(0061) TCNT0 = 0x3D; //set count value
01E2 E38D LDI R24,0x3D
01E3 BF82 OUT 0x32,R24
(0062) TCCR0 = 0x05; //start timer
01E4 E085 LDI R24,5
01E5 BF83 OUT 0x33,R24
(0063) }
01E6 9508 RET
_timer0_ovf_isr:
01E7 D185 RCALL push_lset
01E8 D15F RCALL push_gset1
(0064)
(0065) #pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF
(0066) void timer0_ovf_isr(void)
(0067) {
(0068) TCNT0 = 0x3D; //reload counter value
01E9 E38D LDI R24,0x3D
01EA BF82 OUT 0x32,R24
(0069) t0_times++;
01EB 91800066 LDS R24,_t0_times
01ED 5F8F SUBI R24,0xFF
01EE 93800066 STS _t0_times,R24
(0070) if(gzsl == 0x88)
01F0 91800067 LDS R24,_gzsl
01F2 3888 CPI R24,0x88
01F3 F509 BNE 0x0215
(0071) {
(0072) if(t0_times == 10)
01F4 91800066 LDS R24,_t0_times
01F6 308A CPI R24,0xA
01F7 F4E9 BNE 0x0215
(0073) {
(0074) timers++;
01F8 9180006E LDS R24,_timers
01FA 5F8F SUBI R24,0xFF
01FB 9380006E STS _timers,R24
(0075) t0_times = 0;
01FD 2422 CLR R2
01FE 92200066 STS _t0_times,R2
(0076) pa = led_data[timers];
0200 E388 LDI R24,0x38
0201 E090 LDI R25,0
0202 9020006E LDS R2,_timers
0204 2433 CLR R3
0205 0E28 ADD R2,R24
0206 1E39 ADC R3,R25
0207 2DE2 MOV R30,R2
0208 2DF3 MOV R31,R3
0209 95C8 LPM
020A 92000072 STS _pa,R0
(0077) if(pa==0x0a){timers=0;}
020C 2D80 MOV R24,R0
020D 308A CPI R24,0xA
020E F419 BNE 0x0212
020F 2422 CLR R2
0210 9220006E STS _timers,R2
(0078) PORTA = pa;
0212 90200072 LDS R2,_pa
0214 BA2B OUT 0x1B,R2
(0079) }
(0080) }
(0081) if(gzsl == 0x33)
0215 91800067 LDS R24,_gzsl
0217 3383 CPI R24,0x33
0218 F009 BEQ 0x021A
0219 C08B RJMP 0x02A5
(0082) {
(0083) sw_touch();
021A DEE6 RCALL _sw_touch
(0084) if(t0_times == 8) //8*25ms=200ms
021B 91800066 LDS R24,_t0_times
021D 3088 CPI R24,0x8
021E F009 BEQ 0x0220
021F C085 RJMP 0x02A5
(0085) {
(0086) t0_times = 0;
0220 2422 CLR R2
0221 92200066 STS _t0_times,R2
(0087) remote_in = PINB & 0x0F;
0223 B386 IN R24,0x16
0224 708F ANDI R24,0xF
0225 9380007C STS _remote_in,R24
(0088) sound_1 = remote_in;
0227 2E28 MOV R2,R24
0228 92200065 STS _sound_1,R2
(0089) if(sound_2 != sound_1)
022A 90300064 LDS R3,_sound_2
022C 1638 CP R3,R24
022D F049 BEQ 0x0237
(0090) {sound_add=0;sound_2 = sound_1;}
022E 2422 CLR R2
022F 2433 CLR R3
0230 92300061 STS 0x61,R3
0232 92200060 STS 0x60,R2
0234 2E28 MOV R2,R24
0235 92200064 STS _sound_2,R2
(0091) switch (remote_in)
0237 9140007C LDS R20,_remote_in
0239 2755 CLR R21
023A 3040 CPI R20,0
023B 0745 CPC R20,R21
023C F099 BEQ 0x0250
023D 3041 CPI R20,1
023E E0E0 LDI R30,0
023F 075E CPC R21,R30
0240 F409 BNE 0x0242
0241 C052 RJMP 0x0294
0242 3042 CPI R20,2
0243 E0E0 LDI R30,0
0244 075E CPC R21,R30
0245 F141 BEQ 0x026E
0246 3044 CPI R20,4
0247 E0E0 LDI R30,0
0248 075E CPC R21,R30
0249 F091 BEQ 0x025C
024A 3048 CPI R20,0x8
024B E0E0 LDI R30,0
024C 075E CPC R21,R30
024D F409 BNE 0x024F
024E C031 RJMP 0x0280
024F C055 RJMP 0x02A5
(0092) {//检测遥控器是否有键按下
(0093) case 0x00:
(0094) forward(); //前行
0250 DEA7 RCALL _forward
(0095) rst_time=0;
0251 2422 CLR R2
0252 9220006B STS _rst_time,R2
(0096) sound_add=0x00;
0254 2433 CLR R3
0255 92300061 STS 0x61,R3
0257 92200060 STS 0x60,R2
(0097) temp1=0x00;
0259 92200073 STS _temp1,R2
(0098) break;
025B C049 RJMP 0x02A5
(0099) case 0x04: // < A >
(0100) turn_right(); //右转
025C DE82 RCALL _turn_right
(0101) rst_time=0;
025D 2422 CLR R2
025E 9220006B STS _rst_time,R2
(0102) temp1=sound_right[sound_add];
0260 ED80 LDI R24,0xD0
0261 E090 LDI R25,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -