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

📄 trace_light.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
(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 D0C3      RCALL	pop_gset2
    00D5 9508      RET
_mic_startup:
  mic_in               --> R20
    00D6 D0A7      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 D09C      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
FILE: E:\icc\iccavr\sl3010\trace_light\trace_light.c
(0001) //追光机器人
(0002) 
(0003) #include <io8515v.h>
(0004) #include <macros.h>
(0005) #include <sl3010.c>  //调用sl3010小车的子函数库
(0006) 
(0007) #define light_delay 100
(0008) 
(0009) unsigned char cds;
(0010) 
(0011) void trace_light()
(0012) {
(0013)  port_init();         //PA,PB,PC,PD 初始化
_trace_light:
    0150 DEDC      RCALL	_port_init
(0014)  
(0015)  work_status = 0x70;  //置对应的工作状态标志
    0151 E780      LDI	R24,0x70
    0152 93800065  STS	_work_status,R24
(0016)  
(0017)  mic_startup();       //等待声控启动
    0154 DF81      RCALL	_mic_startup
    0155 C025      RJMP	0x017B
(0018)  
(0019)  while(1)
(0020)     {
(0021) 	 sw_touch();          //检测轻触开关
    0156 DF1E      RCALL	_sw_touch
(0022) 	
(0023) 	 cds = PINC & 0x06; //0b0000,0110
    0157 B383      IN	R24,P13
    0158 7086      ANDI	R24,6
    0159 93800060  STS	_cds,R24
(0024) 
(0025) 	 if(cds == 0x00)    //左右两侧都感测到光
    015B 2388      TST	R24
    015C F421      BNE	0x0161
(0026) 	   {//直行
(0027) 	    forward();
    015D DF0E      RCALL	_forward
(0028) 		delay_ms(light_delay);  //延时
    015E E604      LDI	R16,0x64
    015F E010      LDI	R17,0
    0160 DEE4      RCALL	_delay_ms
(0029) 	   } 
(0030) 	 if(cds == 0x02)    //0b0000,0010___pc2(右侧)感测到光
    0161 91800060  LDS	R24,_cds
    0163 3082      CPI	R24,2
    0164 F421      BNE	0x0169
(0031) 	   {//慢速右转
(0032) 	    turn_right_s();
    0165 DEF7      RCALL	_turn_right_s
(0033) 		delay_ms(light_delay);  //延时
    0166 E604      LDI	R16,0x64
    0167 E010      LDI	R17,0
    0168 DEDC      RCALL	_delay_ms
(0034) 	   }
(0035) 	 if(cds == 0x04)    //0b0000,0100___pc1(左侧)感测到光
    0169 91800060  LDS	R24,_cds
    016B 3084      CPI	R24,4
    016C F421      BNE	0x0171
(0036) 	   {//慢速左转
(0037) 	    turn_left_s();
    016D DEF4      RCALL	_turn_left_s
(0038) 		delay_ms(light_delay);  //延时
    016E E604      LDI	R16,0x64
    016F E010      LDI	R17,0
    0170 DED4      RCALL	_delay_ms
(0039) 	   }
(0040) 	 if(cds == 0x06)
    0171 91800060  LDS	R24,_cds
    0173 3086      CPI	R24,6
    0174 F431      BNE	0x017B
(0041) 	   {//停止动作
(0042) 	    PORTA = 0x55;   //延时后停止动作,等待光照重新动作
    0175 E585      LDI	R24,0x55
    0176 BB8B      OUT	P1B,R24
(0043) 		delay_ms(light_delay*2);
    0177 EC08      LDI	R16,0xC8
    0178 E010      LDI	R17,0
    0179 DECB      RCALL	_delay_ms
(0044) 		stop();
    017A DEF6      RCALL	_stop
    017B CFDA      RJMP	0x0156
(0045) 	   }
(0046) 	}
(0047) }
    017C 9508      RET
(0048) 
(0049) void main()
(0050) {
(0051)  trace_light();
(0052) }
FILE: <library>
_main:
    017D CFD2      RJMP	_trace_light
push_gset1:
    017E 935A      ST	R21,-Y
    017F 934A      ST	R20,-Y
    0180 9508      RET
pop_gset1:
    0181 E0E1      LDI	R30,1
pop:
    0182 9149      LD	R20,Y+
    0183 9159      LD	R21,Y+
    0184 FDE0      SBRC	R30,0
    0185 9508      RET
    0186 9169      LD	R22,Y+
    0187 9179      LD	R23,Y+
    0188 FDE1      SBRC	R30,1
    0189 9508      RET
    018A 90A9      LD	R10,Y+
    018B 90B9      LD	R11,Y+
    018C FDE2      SBRC	R30,2
    018D 9508      RET
    018E 90C9      LD	R12,Y+
    018F 90D9      LD	R13,Y+
    0190 FDE3      SBRC	R30,3
    0191 9508      RET
    0192 90E9      LD	R14,Y+
    0193 90F9      LD	R15,Y+
    0194 9508      RET
push_gset2:
    0195 937A      ST	R23,-Y
    0196 936A      ST	R22,-Y
    0197 CFE6      RJMP	push_gset1
pop_gset2:
    0198 E0E2      LDI	R30,2
    0199 CFE8      RJMP	pop

⌨️ 快捷键说明

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