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

📄 auto_car8.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0193)    }
(0194)  if(sw_in == 0x30)// 0b 0011,0000  右侧开关接触
    009E 3340      CPI	R20,0x30
    009F F441      BNE	0x00A8
(0195)    {//后退,左转
(0196)        backward();          //后退
    00A0 DFC6      RCALL	_backward
(0197)        delay_ms(touch_time);
    00A1 EF0A      LDI	R16,0xFA
    00A2 E010      LDI	R17,0
    00A3 DFA1      RCALL	_delay_ms
(0198)        
(0199) 	   turn_left();         //左转
    00A4 DFB3      RCALL	_turn_left
(0200)        delay_ms(touch_time);
    00A5 EF0A      LDI	R16,0xFA
    00A6 E010      LDI	R17,0
    00A7 DF9D      RCALL	_delay_ms
(0201)    }  
(0202)  if(sw_in == 0x60)// 0b 0110,0000  左侧开关接触
    00A8 3640      CPI	R20,0x60
    00A9 F441      BNE	0x00B2
(0203)    {//后退,左转
(0204)        backward();          //后退
    00AA DFBC      RCALL	_backward
(0205)        delay_ms(touch_time);
    00AB EF0A      LDI	R16,0xFA
    00AC E010      LDI	R17,0
    00AD DF97      RCALL	_delay_ms
(0206)        
(0207) 	   turn_left();         //左转
    00AE DFA9      RCALL	_turn_left
(0208)        delay_ms(touch_time);
    00AF EF0A      LDI	R16,0xFA
    00B0 E010      LDI	R17,0
    00B1 DF93      RCALL	_delay_ms
(0209)    }
(0210)  if(sw_in == 0x20)// 0b 0010,0000  两侧开关同时接触,停止运动
    00B2 3240      CPI	R20,0x20
    00B3 F4C1      BNE	0x00CC
(0211)    {
(0212) 	stop();       //停止运动,熄灭指示灯
    00B4 DFBC      RCALL	_stop
(0213)     delay_ms(touch_time*4);
    00B5 EE08      LDI	R16,0xE8
    00B6 E013      LDI	R17,3
    00B7 DF8D      RCALL	_delay_ms
    00B8 C012      RJMP	0x00CB
(0214) 	while(1)
(0215) 	     {
(0216) 		  sw_in = PINC & 0x10;
    00B9 B343      IN	R20,P13
    00BA 7140      ANDI	R20,0x10
(0217) 		  if(sw_in == 0x00)
    00BB F409      BNE	0x00BD
(0218) 		    {break;}
    00BC C00F      RJMP	0x00CC
(0219) 		  PORTA = 0x55;
    00BD E585      LDI	R24,0x55
    00BE BB8B      OUT	P1B,R24
(0220) 		  delay_ms(250);
    00BF EF0A      LDI	R16,0xFA
    00C0 E010      LDI	R17,0
    00C1 DF83      RCALL	_delay_ms
(0221) 		  PORTA = 0xAA;
    00C2 EA8A      LDI	R24,0xAA
    00C3 BB8B      OUT	P1B,R24
(0222) 		  delay_ms(250);
    00C4 EF0A      LDI	R16,0xFA
    00C5 E010      LDI	R17,0
    00C6 DF7E      RCALL	_delay_ms
(0223) 		  remote_in = PINB & 0x0f;
    00C7 B366      IN	R22,P16
    00C8 706F      ANDI	R22,0xF
(0224) 		  if(remote_in != 0x00)
    00C9 F009      BEQ	0x00CB
(0225) 		    {break;}
    00CA C001      RJMP	0x00CC
    00CB CFED      RJMP	0x00B9
(0226) 		 }
(0227)    }   
(0228) }
    00CC D0A7      RCALL	pop_gset2
    00CD 9508      RET
(0229) 
(0230) void mic_startup()
(0231) {//声控启动程序运行
_mic_startup:
  mic_in               --> R16
    00CE C004      RJMP	0x00D3
(0232)  unsigned char mic_in;
(0233) 
(0234)  while(1)//等待pc3(声控键)按键按下	
(0235)  {	  //无键按下等待
(0236)   mic_in = PINC & 0x08;     //pc2=0
    00CF B303      IN	R16,P13
    00D0 7008      ANDI	R16,0x8
(0237)   if(mic_in == 0){break;}
    00D1 F409      BNE	0x00D3
    00D2 C001      RJMP	0x00D4
    00D3 CFFB      RJMP	0x00CF
(0238)  }//有键按下运行下面的程序
(0239) }
    00D4 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) unsigned int delay_time1,delay_time2;
(0254) 
(0255) void remote_auto_time()
(0256) {
(0257)  unsigned char remote_in;
(0258)  	  remote_in = PINB & 0x0F;
_remote_auto_time:
  remote_in            --> R16
    00D5 B306      IN	R16,P16
    00D6 700F      ANDI	R16,0xF
(0259)       switch (remote_in)
    00D7 2711      CLR	R17
    00D8 3000      CPI	R16,0
    00D9 0701      CPC	R16,R17
    00DA F409      BNE	0x00DC
    00DB C062      RJMP	0x013E
    00DC 3001      CPI	R16,1
    00DD E0E0      LDI	R30,0
    00DE 071E      CPC	R17,R30
    00DF F409      BNE	0x00E1
    00E0 C04A      RJMP	0x012B
    00E1 3002      CPI	R16,2
    00E2 E0E0      LDI	R30,0
    00E3 071E      CPC	R17,R30
    00E4 F0F1      BEQ	0x0103
    00E5 3004      CPI	R16,4
    00E6 E0E0      LDI	R30,0
    00E7 071E      CPC	R17,R30
    00E8 F029      BEQ	0x00EE
    00E9 3008      CPI	R16,0x8
    00EA E0E0      LDI	R30,0
    00EB 071E      CPC	R17,R30
    00EC F151      BEQ	0x0117
    00ED C050      RJMP	0x013E
(0260)       	{//检测遥控器是否有键按下
(0261)       case 0x04:  // < A >
(0262) 		 delay_time2 = delay_time2 - 50;
    00EE 91800060  LDS	R24,_delay_time2
    00F0 91900061  LDS	R25,_delay_time2+1
    00F2 97C2      SBIW	R24,0x32
    00F3 93900061  STS	_delay_time2+1,R25
    00F5 93800060  STS	_delay_time2,R24
(0263) 	     if(delay_time2 == 50)
    00F7 3382      CPI	R24,0x32
    00F8 E0E0      LDI	R30,0
    00F9 079E      CPC	R25,R30
    00FA F009      BEQ	0x00FC
    00FB C042      RJMP	0x013E
(0264) 		   {delay_time2 = 100;}	 
    00FC E684      LDI	R24,0x64
    00FD E090      LDI	R25,0
    00FE 93900061  STS	_delay_time2+1,R25
    0100 93800060  STS	_delay_time2,R24
(0265)       	break;
    0102 C03B      RJMP	0x013E
(0266)       case 0x02:  // < B >
(0267) 		 delay_time1 = delay_time1 + 50;
    0103 91800062  LDS	R24,_delay_time1
    0105 91900063  LDS	R25,_delay_time1+1
    0107 96C2      ADIW	R24,0x32
    0108 93900063  STS	_delay_time1+1,R25
    010A 93800062  STS	_delay_time1,R24
(0268) 	     if(delay_time1 == 2050)
    010C 3082      CPI	R24,2
    010D E0E8      LDI	R30,0x8
    010E 079E      CPC	R25,R30
    010F F571      BNE	0x013E
(0269) 		   {delay_time1 = 2000;}	 
    0110 ED80      LDI	R24,0xD0
    0111 E097      LDI	R25,7
    0112 93900063  STS	_delay_time1+1,R25
    0114 93800062  STS	_delay_time1,R24
(0270)       	break;
    0116 C027      RJMP	0x013E
(0271)       case 0x08:  // < C >
(0272) 		 delay_time1 = delay_time1 - 50;
    0117 91800062  LDS	R24,_delay_time1
    0119 91900063  LDS	R25,_delay_time1+1
    011B 97C2      SBIW	R24,0x32
    011C 93900063  STS	_delay_time1+1,R25
    011E 93800062  STS	_delay_time1,R24
(0273) 	     if(delay_time1 == 50)
    0120 3382      CPI	R24,0x32
    0121 E0E0      LDI	R30,0
    0122 079E      CPC	R25,R30
    0123 F4D1      BNE	0x013E
(0274) 		   {delay_time1 = 100;}	 
    0124 E684      LDI	R24,0x64
    0125 E090      LDI	R25,0
    0126 93900063  STS	_delay_time1+1,R25
    0128 93800062  STS	_delay_time1,R24
(0275)       	break;
    012A C013      RJMP	0x013E
(0276)       case 0x01:  // < D >
(0277)          delay_time2 = delay_time2 + 50;
    012B 91800060  LDS	R24,_delay_time2
    012D 91900061  LDS	R25,_delay_time2+1
    012F 96C2      ADIW	R24,0x32
    0130 93900061  STS	_delay_time2+1,R25
    0132 93800060  STS	_delay_time2,R24
(0278) 	     if(delay_time2 == 2050)
    0134 3082      CPI	R24,2
    0135 E0E8      LDI	R30,0x8
    0136 079E      CPC	R25,R30
    0137 F431      BNE	0x013E
(0279) 		   {delay_time2 = 2000;}	 
    0138 ED80      LDI	R24,0xD0
    0139 E097      LDI	R25,7
    013A 93900061  STS	_delay_time2+1,R25
    013C 93800060  STS	_delay_time2,R24
(0280)       	break;
(0281)       case 0x00:  // 无按键
(0282) 	     break;
(0283) 		} 
(0284) }
    013E 9508      RET
FILE: E:\icc\iccavr\sl3010\auto_car8\auto_car8.c
(0001) //自走车   机器人走< 8 >字,遥控器调节行走路线
(0002) 
(0003) #include <io8515v.h>
(0004) #include <macros.h>
(0005) #include <sl3010.c>
(0006) 
(0007) unsigned int delay_time1,delay_time2;
(0008) 
(0009) void auto_car8()
(0010) {
(0011)  port_init();         //PA,PB,PC,PD 初始化
_auto_car8:
    013F DEED      RCALL	_port_init
(0012)  
(0013)  work_status = 0x50;//置对应的工作状态标志
    0140 E580      LDI	R24,0x50
    0141 93800064  STS	_work_status,R24
(0014)  
(0015)  delay_time1=1000;  //转弯时间
    0143 EE88      LDI	R24,0xE8
    0144 E093      LDI	R25,3
    0145 93900063  STS	_delay_time1+1,R25
    0147 93800062  STS	_delay_time1,R24
(0016)  delay_time2=1200;  //前行时间
    0149 EB80      LDI	R24,0xB0
    014A E094      LDI	R25,4
    014B 93900061  STS	_delay_time2+1,R25
    014D 93800060  STS	_delay_time2,R24
(0017)  
(0018)  mic_startup();       //等待声控启动
    014F DF7E      RCALL	_mic_startup
(0019) 
(0020) 	   forward();           //前行
    0150 DF1B      RCALL	_forward
(0021) 	   delay_ms(delay_time2);
    0151 91000060  LDS	R16,_delay_time2
    0153 91100061  LDS	R17,_delay_time2+1
    0155 DEEF      RCALL	_delay_ms
    0156 C01A      RJMP	0x0171
(0022)  
(0023)  while(1)
(0024)       {
(0025) 	   sw_touch();          //检测轻触开关
    0157 DF1D      RCALL	_sw_touch
(0026) 	   
(0027) 	   remote_auto_time();  //遥控器控制直行和转弯时间
    0158 DF7C      RCALL	_remote_auto_time
(0028) 	   
(0029) 	   turn_right();        //右转
    0159 DEF9      RCALL	_turn_right
(0030) 	   delay_ms(delay_time1);
    015A 91000062  LDS	R16,_delay_time1
    015C 91100063  LDS	R17,_delay_time1+1
    015E DEE6      RCALL	_delay_ms
(0031) 	
(0032) 	   forward();           //前行
    015F DF0C      RCALL	_forward
(0033) 	   delay_ms(delay_time2);
    0160 91000060  LDS	R16,_delay_time2
    0162 91100061  LDS	R17,_delay_time2+1
    0164 DEE0      RCALL	_delay_ms
(0034)    
(0035) 	   turn_left();         //左转
    0165 DEF2      RCALL	_turn_left
(0036)        delay_ms(delay_time1);
    0166 91000062  LDS	R16,_delay_time1
    0168 91100063  LDS	R17,_delay_time1+1
    016A DEDA      RCALL	_delay_ms
(0037) 
(0038) 	   forward();           //前行
    016B DF00      RCALL	_forward
(0039) 	   delay_ms(delay_time2);
    016C 91000060  LDS	R16,_delay_time2
    016E 91100061  LDS	R17,_delay_time2+1
    0170 DED4      RCALL	_delay_ms
    0171 CFE5      RJMP	0x0157
(0040) 	  }
(0041) }
    0172 9508      RET
(0042) 
(0043) void main()
(0044) {
(0045)  auto_car8();
(0046) }
FILE: <library>
_main:
    0173 CFCB      RJMP	_auto_car8
pop_gset2:
    0174 E0E2      LDI	R30,2
    0175 C004      RJMP	pop
push_gset1:
    0176 935A      ST	R21,-Y
    0177 934A      ST	R20,-Y
    0178 9508      RET
pop_gset1:
    0179 E0E1      LDI	R30,1
pop:
    017A 9149      LD	R20,Y+
    017B 9159      LD	R21,Y+
    017C FDE0      SBRC	R30,0
    017D 9508      RET
    017E 9169      LD	R22,Y+
    017F 9179      LD	R23,Y+
    0180 FDE1      SBRC	R30,1
    0181 9508      RET
    0182 90A9      LD	R10,Y+
    0183 90B9      LD	R11,Y+
    0184 FDE2      SBRC	R30,2
    0185 9508      RET
    0186 90C9      LD	R12,Y+
    0187 90D9      LD	R13,Y+
    0188 FDE3      SBRC	R30,3
    0189 9508      RET
    018A 90E9      LD	R14,Y+
    018B 90F9      LD	R15,Y+
    018C 9508      RET
push_gset2:
    018D 937A      ST	R23,-Y
    018E 936A      ST	R22,-Y
    018F CFE6      RJMP	push_gset1

⌨️ 快捷键说明

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