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

📄 auto_car2.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
(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 D0E4      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_car2\atuo_car2.c
(0001) //自走车   机器人走螺旋线,由内往外绕
(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_car2()
(0010) {
(0011)  port_init();//PA,PB,PC,PD 初始化
_auto_car2:
    013F DEED      RCALL	_port_init
(0012)  
(0013)  work_status = 0x51;//置对应的工作状态标志
    0140 E581      LDI	R24,0x51
    0141 93800064  STS	_work_status,R24
(0014)  
(0015)  delay_time1=300;    //转弯时间
    0143 E28C      LDI	R24,0x2C
    0144 E091      LDI	R25,1
    0145 93900063  STS	_delay_time1+1,R25
    0147 93800062  STS	_delay_time1,R24
(0016)  delay_time2=100;   //前行时间
    0149 E684      LDI	R24,0x64
    014A E090      LDI	R25,0
    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(200);         
    0151 EC08      LDI	R16,0xC8
    0152 E010      LDI	R17,0
    0153 DEF1      RCALL	_delay_ms
    0154 C059      RJMP	0x01AE
(0022)  
(0023)  while(1)
(0024)       {
(0025) 	   sw_touch();            //检测轻触开关
    0155 DF1F      RCALL	_sw_touch
(0026) 	   
(0027) 	   remote_auto_time();    //遥控器控制直行和转弯时间
    0156 DF7E      RCALL	_remote_auto_time
(0028) 	   
(0029) 	   turn_right();          //右转
    0157 DEFB      RCALL	_turn_right
(0030) 	   delay_ms(delay_time1);
    0158 91000062  LDS	R16,_delay_time1
    015A 91100063  LDS	R17,_delay_time1+1
    015C DEE8      RCALL	_delay_ms
(0031) 	
(0032) 	   forward();             //前行
    015D DF0E      RCALL	_forward
(0033) 	   delay_ms(delay_time2);
    015E 91000060  LDS	R16,_delay_time2
    0160 91100061  LDS	R17,_delay_time2+1
    0162 DEE2      RCALL	_delay_ms
(0034) 	
(0035) 	   turn_right();          //右转
    0163 DEEF      RCALL	_turn_right
(0036) 	   delay_ms(delay_time1);
    0164 91000062  LDS	R16,_delay_time1
    0166 91100063  LDS	R17,_delay_time1+1
    0168 DEDC      RCALL	_delay_ms
(0037) 	
(0038) 	   forward();             //前行
    0169 DF02      RCALL	_forward
(0039) 	   delay_ms(delay_time2);
    016A 91000060  LDS	R16,_delay_time2
    016C 91100061  LDS	R17,_delay_time2+1
    016E DED6      RCALL	_delay_ms
(0040) 	
(0041) 	   turn_right();          //右转
    016F DEE3      RCALL	_turn_right
(0042) 	   delay_ms(delay_time1);
    0170 91000062  LDS	R16,_delay_time1
    0172 91100063  LDS	R17,_delay_time1+1
    0174 DED0      RCALL	_delay_ms
(0043) 	
(0044) 	   forward();             //前行
    0175 DEF6      RCALL	_forward
(0045) 	   delay_ms(delay_time2);
    0176 91000060  LDS	R16,_delay_time2
    0178 91100061  LDS	R17,_delay_time2+1
    017A DECA      RCALL	_delay_ms
(0046) 	
(0047) 	   turn_right();          //右转
    017B DED7      RCALL	_turn_right
(0048) 	   delay_ms(delay_time1);
    017C 91000062  LDS	R16,_delay_time1
    017E 91100063  LDS	R17,_delay_time1+1
    0180 DEC4      RCALL	_delay_ms
(0049) 	
(0050) 	   forward();             //前行
    0181 DEEA      RCALL	_forward
(0051) 	   delay_ms(delay_time2);
    0182 91000060  LDS	R16,_delay_time2
    0184 91100061  LDS	R17,_delay_time2+1
    0186 DEBE      RCALL	_delay_ms
(0052) 	
(0053) 	   turn_right();          //右转
    0187 DECB      RCALL	_turn_right
(0054) 	   delay_ms(delay_time1);
    0188 91000062  LDS	R16,_delay_time1
    018A 91100063  LDS	R17,_delay_time1+1
    018C DEB8      RCALL	_delay_ms
(0055) 	
(0056) 	   forward();             //前行
    018D DEDE      RCALL	_forward
(0057) 	   delay_ms(delay_time2);
    018E 91000060  LDS	R16,_delay_time2
    0190 91100061  LDS	R17,_delay_time2+1
    0192 DEB2      RCALL	_delay_ms
(0058) 
(0059) 	   turn_right();          //右转
    0193 DEBF      RCALL	_turn_right
(0060) 	   delay_ms(delay_time1);
    0194 91000062  LDS	R16,_delay_time1
    0196 91100063  LDS	R17,_delay_time1+1
    0198 DEAC      RCALL	_delay_ms
(0061) 	
(0062) 	   forward();             //前行
    0199 DED2      RCALL	_forward
(0063) 	   delay_ms(delay_time2);
    019A 91000060  LDS	R16,_delay_time2
    019C 91100061  LDS	R17,_delay_time2+1
    019E DEA6      RCALL	_delay_ms
(0064) 	   
(0065)   	   delay_time2 = delay_time2 + 50;
    019F 91800060  LDS	R24,_delay_time2
    01A1 91900061  LDS	R25,_delay_time2+1
    01A3 96C2      ADIW	R24,0x32
    01A4 93900061  STS	_delay_time2+1,R25
    01A6 93800060  STS	_delay_time2,R24
(0066) 	   if(delay_time2 == 800)
    01A8 3280      CPI	R24,0x20
    01A9 E0E3      LDI	R30,3
    01AA 079E      CPC	R25,R30
    01AB F411      BNE	0x01AE
(0067) 		 {
(0068) 		  stop();
    01AC DEC4      RCALL	_stop
(0069) 		  while(1);
    01AD CFFF      RJMP	0x01AD
    01AE CFA6      RJMP	0x0155
(0070) 		 }
(0071) 	  }
(0072) }
    01AF 9508      RET
(0073) 
(0074) void main()
(0075) {
(0076)  auto_car2();
(0077) }
FILE: <library>
_main:
    01B0 CF8E      RJMP	_auto_car2
pop_gset2:
    01B1 E0E2      LDI	R30,2
    01B2 C004      RJMP	pop
push_gset1:
    01B3 935A      ST	R21,-Y
    01B4 934A      ST	R20,-Y
    01B5 9508      RET
pop_gset1:
    01B6 E0E1      LDI	R30,1
pop:
    01B7 9149      LD	R20,Y+
    01B8 9159      LD	R21,Y+
    01B9 FDE0      SBRC	R30,0
    01BA 9508      RET
    01BB 9169      LD	R22,Y+
    01BC 9179      LD	R23,Y+
    01BD FDE1      SBRC	R30,1
    01BE 9508      RET
    01BF 90A9      LD	R10,Y+
    01C0 90B9      LD	R11,Y+
    01C1 FDE2      SBRC	R30,2
    01C2 9508      RET
    01C3 90C9      LD	R12,Y+
    01C4 90D9      LD	R13,Y+
    01C5 FDE3      SBRC	R30,3
    01C6 9508      RET
    01C7 90E9      LD	R14,Y+
    01C8 90F9      LD	R15,Y+
    01C9 9508      RET
push_gset2:
    01CA 937A      ST	R23,-Y
    01CB 936A      ST	R22,-Y
    01CC CFE6      RJMP	push_gset1

⌨️ 快捷键说明

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