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

📄 remote_light.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0187)  
(0188)  sw_in = PINB & 0x70;
    009A B346      IN	R20,P16
    009B 7740      ANDI	R20,0x70
(0189)  if(sw_in == 0x50)// 0b 0101,0000  尾部开关接触 
    009C 3540      CPI	R20,0x50
    009D F441      BNE	0x00A6
(0190)    {//前行,左转
(0191) 	   forward();           //前行
    009E DFCD      RCALL	_forward
(0192)        delay_ms(touch_time);
    009F EF0A      LDI	R16,0xFA
    00A0 E010      LDI	R17,0
    00A1 DFA3      RCALL	_delay_ms
(0193)        
(0194) 	   turn_left();         //左转
    00A2 DFB5      RCALL	_turn_left
(0195)        delay_ms(touch_time);
    00A3 EF0A      LDI	R16,0xFA
    00A4 E010      LDI	R17,0
    00A5 DF9F      RCALL	_delay_ms
(0196)    }
(0197)  if(sw_in == 0x30)// 0b 0011,0000  右侧开关接触
    00A6 3340      CPI	R20,0x30
    00A7 F441      BNE	0x00B0
(0198)    {//后退,左转
(0199)        backward();          //后退
    00A8 DFBE      RCALL	_backward
(0200)        delay_ms(touch_time);
    00A9 EF0A      LDI	R16,0xFA
    00AA E010      LDI	R17,0
    00AB DF99      RCALL	_delay_ms
(0201)        
(0202) 	   turn_left();         //左转
    00AC DFAB      RCALL	_turn_left
(0203)        delay_ms(touch_time);
    00AD EF0A      LDI	R16,0xFA
    00AE E010      LDI	R17,0
    00AF DF95      RCALL	_delay_ms
(0204)    }  
(0205)  if(sw_in == 0x60)// 0b 0110,0000  左侧开关接触
    00B0 3640      CPI	R20,0x60
    00B1 F441      BNE	0x00BA
(0206)    {//后退,左转
(0207)        backward();          //后退
    00B2 DFB4      RCALL	_backward
(0208)        delay_ms(touch_time);
    00B3 EF0A      LDI	R16,0xFA
    00B4 E010      LDI	R17,0
    00B5 DF8F      RCALL	_delay_ms
(0209)        
(0210) 	   turn_left();         //左转
    00B6 DFA1      RCALL	_turn_left
(0211)        delay_ms(touch_time);
    00B7 EF0A      LDI	R16,0xFA
    00B8 E010      LDI	R17,0
    00B9 DF8B      RCALL	_delay_ms
(0212)    }
(0213)  if(sw_in == 0x20)// 0b 0010,0000  两侧开关同时接触,停止运动
    00BA 3240      CPI	R20,0x20
    00BB F4C1      BNE	0x00D4
(0214)    {
(0215) 	stop();       //停止运动,熄灭指示灯
    00BC DFB4      RCALL	_stop
(0216)     delay_ms(touch_time*4);
    00BD EE08      LDI	R16,0xE8
    00BE E013      LDI	R17,3
    00BF DF85      RCALL	_delay_ms
    00C0 C012      RJMP	0x00D3
(0217) 	while(1)
(0218) 	     {
(0219) 		  sw_in = PINC & 0x10;
    00C1 B343      IN	R20,P13
    00C2 7140      ANDI	R20,0x10
(0220) 		  if(sw_in == 0x00)
    00C3 F409      BNE	0x00C5
(0221) 		    {break;}
    00C4 C00F      RJMP	0x00D4
(0222) 		  PORTA = 0x55;
    00C5 E585      LDI	R24,0x55
    00C6 BB8B      OUT	P1B,R24
(0223) 		  delay_ms(250);
    00C7 EF0A      LDI	R16,0xFA
    00C8 E010      LDI	R17,0
    00C9 DF7B      RCALL	_delay_ms
(0224) 		  PORTA = 0xAA;
    00CA EA8A      LDI	R24,0xAA
    00CB BB8B      OUT	P1B,R24
(0225) 		  delay_ms(250);
    00CC EF0A      LDI	R16,0xFA
    00CD E010      LDI	R17,0
    00CE DF76      RCALL	_delay_ms
(0226) 		  remote_in = PINB & 0x0f;
    00CF B366      IN	R22,P16
    00D0 706F      ANDI	R22,0xF
(0227) 		  if(remote_in != 0x00)
    00D1 F009      BEQ	0x00D3
(0228) 		    {break;}
    00D2 C001      RJMP	0x00D4
    00D3 CFED      RJMP	0x00C1
(0229) 		 }
(0230)    }   
(0231) }
    00D4 D14A      RCALL	pop_gset2
    00D5 9508      RET
_mic_startup:
  mic_in               --> R20
    00D6 D128      RCALL	push_gset1
(0232) 
(0233) void mic_startup()
(0234) {//声控启动程序运行
(0235)  unsigned char mic_in;
(0236)  DDRC = 0x01;PORTC = 0xFF;
    00D7 E081      LDI	R24,1
    00D8 BB84      OUT	P14,R24
    00D9 EF8F      LDI	R24,0xFF
    00DA BB85      OUT	P15,R24
(0237)  delay_us(1);
    00DB E001      LDI	R16,1
    00DC E010      LDI	R17,0
    00DD DF5F      RCALL	_delay_us
    00DE C004      RJMP	0x00E3
(0238)  while(1)//等待pc3(声控键)按键按下	
(0239)  {	  //无键按下等待
(0240)   mic_in = PINC & 0x08;     //pc2=0
    00DF B343      IN	R20,P13
    00E0 7048      ANDI	R20,0x8
(0241)   if(mic_in == 0){break;}
    00E1 F409      BNE	0x00E3
    00E2 C001      RJMP	0x00E4
    00E3 CFFB      RJMP	0x00DF
(0242)  }//有键按下运行下面的程序
(0243) }
    00E4 D11D      RCALL	pop_gset1
    00E5 9508      RET
(0244) 
(0245) //                #       
(0246) //                #
(0247) //                #
(0248) //                #
(0249) //                #    //  delay_time1  转弯时间
(0250) //        # # # # #    //  delay_time2  直行时间
(0251) //      # X       #    //<A>  0x04  delay_time2-50
(0252) //      #   B  C  #    //<B>  0x02  delay_time1+50
(0253) //      #  D  A   #    //<C>  0x08  delay_time1-50
(0254) //      #         #    //<D>  0x01  delay_time2+50
(0255) //        # # # #      // max: 2000   min: 200 
(0256) 
(0257) unsigned int delay_time1,delay_time2;
(0258) 
(0259) void remote_auto_time()
(0260) {
(0261)  unsigned char remote_in;
(0262)  	  remote_in = PINB & 0x0F;
_remote_auto_time:
  remote_in            --> R16
    00E6 B306      IN	R16,P16
    00E7 700F      ANDI	R16,0xF
(0263)       switch (remote_in)
    00E8 2711      CLR	R17
    00E9 3000      CPI	R16,0
    00EA 0701      CPC	R16,R17
    00EB F409      BNE	0x00ED
    00EC C062      RJMP	0x014F
    00ED 3001      CPI	R16,1
    00EE E0E0      LDI	R30,0
    00EF 071E      CPC	R17,R30
    00F0 F409      BNE	0x00F2
    00F1 C04A      RJMP	0x013C
    00F2 3002      CPI	R16,2
    00F3 E0E0      LDI	R30,0
    00F4 071E      CPC	R17,R30
    00F5 F0F1      BEQ	0x0114
    00F6 3004      CPI	R16,4
    00F7 E0E0      LDI	R30,0
    00F8 071E      CPC	R17,R30
    00F9 F029      BEQ	0x00FF
    00FA 3008      CPI	R16,0x8
    00FB E0E0      LDI	R30,0
    00FC 071E      CPC	R17,R30
    00FD F151      BEQ	0x0128
    00FE C050      RJMP	0x014F
(0264)       	{//检测遥控器是否有键按下
(0265)       case 0x04:  // < A >
(0266) 		 delay_time2 = delay_time2 - 50;
    00FF 91800061  LDS	R24,_delay_time2
    0101 91900062  LDS	R25,_delay_time2+1
    0103 97C2      SBIW	R24,0x32
    0104 93900062  STS	_delay_time2+1,R25
    0106 93800061  STS	_delay_time2,R24
(0267) 	     if(delay_time2 == 50)
    0108 3382      CPI	R24,0x32
    0109 E0E0      LDI	R30,0
    010A 079E      CPC	R25,R30
    010B F009      BEQ	0x010D
    010C C042      RJMP	0x014F
(0268) 		   {delay_time2 = 100;}	 
    010D E684      LDI	R24,0x64
    010E E090      LDI	R25,0
    010F 93900062  STS	_delay_time2+1,R25
    0111 93800061  STS	_delay_time2,R24
(0269)       	break;
    0113 C03B      RJMP	0x014F
(0270)       case 0x02:  // < B >
(0271) 		 delay_time1 = delay_time1 + 50;
    0114 91800063  LDS	R24,_delay_time1
    0116 91900064  LDS	R25,_delay_time1+1
    0118 96C2      ADIW	R24,0x32
    0119 93900064  STS	_delay_time1+1,R25
    011B 93800063  STS	_delay_time1,R24
(0272) 	     if(delay_time1 == 2050)
    011D 3082      CPI	R24,2
    011E E0E8      LDI	R30,0x8
    011F 079E      CPC	R25,R30
    0120 F571      BNE	0x014F
(0273) 		   {delay_time1 = 2000;}	 
    0121 ED80      LDI	R24,0xD0
    0122 E097      LDI	R25,7
    0123 93900064  STS	_delay_time1+1,R25
    0125 93800063  STS	_delay_time1,R24
(0274)       	break;
    0127 C027      RJMP	0x014F
(0275)       case 0x08:  // < C >
(0276) 		 delay_time1 = delay_time1 - 50;
    0128 91800063  LDS	R24,_delay_time1
    012A 91900064  LDS	R25,_delay_time1+1
    012C 97C2      SBIW	R24,0x32
    012D 93900064  STS	_delay_time1+1,R25
    012F 93800063  STS	_delay_time1,R24
(0277) 	     if(delay_time1 == 50)
    0131 3382      CPI	R24,0x32
    0132 E0E0      LDI	R30,0
    0133 079E      CPC	R25,R30
    0134 F4D1      BNE	0x014F
(0278) 		   {delay_time1 = 100;}	 
    0135 E684      LDI	R24,0x64
    0136 E090      LDI	R25,0
    0137 93900064  STS	_delay_time1+1,R25
    0139 93800063  STS	_delay_time1,R24
(0279)       	break;
    013B C013      RJMP	0x014F
(0280)       case 0x01:  // < D >
(0281)          delay_time2 = delay_time2 + 50;
    013C 91800061  LDS	R24,_delay_time2
    013E 91900062  LDS	R25,_delay_time2+1
    0140 96C2      ADIW	R24,0x32
    0141 93900062  STS	_delay_time2+1,R25
    0143 93800061  STS	_delay_time2,R24
(0282) 	     if(delay_time2 == 2050)
    0145 3082      CPI	R24,2
    0146 E0E8      LDI	R30,0x8
    0147 079E      CPC	R25,R30
    0148 F431      BNE	0x014F
(0283) 		   {delay_time2 = 2000;}	 
    0149 ED80      LDI	R24,0xD0
    014A E097      LDI	R25,7
    014B 93900062  STS	_delay_time2+1,R25
    014D 93800061  STS	_delay_time2,R24
(0284)       	break;
(0285)       case 0x00:  // 无按键
(0286) 	     break;
(0287) 		} 
(0288) }
    014F 9508      RET
_remote_car:
  remote_in            --> R10
  timers               --> R22
  led                  --> R20
    0150 D0CB      RCALL	push_gset4
FILE: E:\icc\iccavr\sl3010\remote_light\remote_light.c
(0001) //追光机器人   和    遥控机器人程序
(0002) 
(0003) //将 pd0 接低电平,pd3,pd2,pd1 保持高电平
(0004) //       或按下遥控器<A>(保持 0.5s)        进入遥控机器人运行环境 
(0005) 
(0006) //将 pd1 接低电平,pd3,pd2,pd0 保持高电平
(0007) //       或按下遥控器<B>(保持 0.5s)        进入追光机器人运行环境 
(0008) 
(0009) //将  sl3010.c 文件拷贝到 icc avr 安装目录的<include>文件夹
(0010) //sl3010.c 是sl3010机器人的子函数库
(0011) //程序中调用此文件后 #include <sl3010.c>
(0012) //可直接调用里面的函数和变量
(0013) /*
(0014) void port_init();         //PA,PB,PC,PD 初始化
(0015) void delay_us(int time);  //微妙级延时
(0016) void delay_ms(unsigned int time);//毫秒级延时
(0017) void sw_touch();          //检测轻触开关
(0018) void mic_startup();       //等待声控启动
(0019) void remote_auto_time();  //遥控器控制直行和转弯时间
(0020) void turn_right();        //右转
(0021) void turn_left();         //左转
(0022) void turn_right_s();      //慢速右转
(0023) void turn_left_s();       //慢速左转
(0024) void backward();          //后退
(0025) void forward();           //前行
(0026) void stop();              //停止运动
(0027) */
(0028) 
(0029) //更新日期 2003.03.17
(0030) 
(0031) #include <io8515v.h>
(0032) #include <macros.h>
(0033) #include <sl3010.c>  //调用sl3010小车的子函数库
(0034) 
(0035) #define light_delay 100
(0036) 
(0037) unsigned char cds;
(0038) 
(0039) void remote_car()
(0040) {//遥控车程序
(0041)  unsigned char remote_in,led,timers;
(0042)  
(0043)      led = 0x00;
    0151 2744      CLR	R20
(0044) 	 for(timers=0;timers<7;timers++)
    0152 2766      CLR	R22
    0153 C006      RJMP	0x015A
(0045) 	    {//8 LED 整体亮灭闪烁
(0046) 	     PORTA = led;
    0154 BB4B      OUT	P1B,R20
(0047) 	     delay_ms(500);
    0155 EF04      LDI	R16,0xF4
    0156 E011      LDI	R17,1
    0157 DEED      RCALL	_delay_ms
(0048) 		 led = ~led;
    0158 9540      COM	R20
    0159 9563      INC	R22
    015A 3067      CPI	R22,7
    015B F3C0      BCS	0x0154
(0049) 		}
(0050)  
(0051)  work_status = 0x60;//置对应的工作状态标志
    015C E680      LDI	R24,0x60
    015D 93800065  STS	_work_status,R24
(0052)  
(0053)  mic_startup();//等待声控启动函数
    015F DF76      RCALL	_mic_startup
    0160 C029      RJMP	0x018A
(0054)  
(0055)  while(1)
(0056)      {
(0057) 	  
(0058) 	  sw_touch();//检测轻触开关
    0161 DF13      RCALL	_sw_touch
(0059) 	  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -