⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remote_car.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 3 页
字号:
    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 + -