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

📄 cny_car.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
(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 D0A9      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 91800061  LDS	R24,_delay_time2
    00F0 91900062  LDS	R25,_delay_time2+1
    00F2 97C2      SBIW	R24,0x32
    00F3 93900062  STS	_delay_time2+1,R25
    00F5 93800061  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 93900062  STS	_delay_time2+1,R25
    0100 93800061  STS	_delay_time2,R24
(0265)       	break;
    0102 C03B      RJMP	0x013E
(0266)       case 0x02:  // < B >
(0267) 		 delay_time1 = delay_time1 + 50;
    0103 91800063  LDS	R24,_delay_time1
    0105 91900064  LDS	R25,_delay_time1+1
    0107 96C2      ADIW	R24,0x32
    0108 93900064  STS	_delay_time1+1,R25
    010A 93800063  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 93900064  STS	_delay_time1+1,R25
    0114 93800063  STS	_delay_time1,R24
(0270)       	break;
    0116 C027      RJMP	0x013E
(0271)       case 0x08:  // < C >
(0272) 		 delay_time1 = delay_time1 - 50;
    0117 91800063  LDS	R24,_delay_time1
    0119 91900064  LDS	R25,_delay_time1+1
    011B 97C2      SBIW	R24,0x32
    011C 93900064  STS	_delay_time1+1,R25
    011E 93800063  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 93900064  STS	_delay_time1+1,R25
    0128 93800063  STS	_delay_time1,R24
(0275)       	break;
    012A C013      RJMP	0x013E
(0276)       case 0x01:  // < D >
(0277)          delay_time2 = delay_time2 + 50;
    012B 91800061  LDS	R24,_delay_time2
    012D 91900062  LDS	R25,_delay_time2+1
    012F 96C2      ADIW	R24,0x32
    0130 93900062  STS	_delay_time2+1,R25
    0132 93800061  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 93900062  STS	_delay_time2+1,R25
    013C 93800061  STS	_delay_time2,R24
(0280)       	break;
(0281)       case 0x00:  // 无按键
(0282) 	     break;
(0283) 		} 
(0284) }
    013E 9508      RET
_cny_car:
  cny_times            --> R20
    013F D038      RCALL	push_gset1
FILE: E:\icc\iccavr\sl3010\cny_car\cny_car.c
(0001) //cny_car   探测白底黑线,沿着黑线运动
(0002) #include <io8515v.h>
(0003) #include <macros.h>
(0004) #include <sl3010.c>
(0005) 
(0006) unsigned char cny_in;
(0007) 
(0008) #define cny_delayms 50
(0009) 
(0010) void cny_car()
(0011) {
(0012)  unsigned char cny_times;
(0013)  port_init();
    0140 DEEC      RCALL	_port_init
(0014) start_up: 
(0015)  mic_startup();
    0141 DF8C      RCALL	_mic_startup
    0142 C02F      RJMP	0x0172
(0016)  
(0017)  while(1)
(0018)       {
(0019) //	   sw_touch();
(0020) 	   
(0021) 	   cny_in = PINC & 0xe0;
    0143 B383      IN	R24,P13
    0144 7E80      ANDI	R24,0xE0
    0145 93800060  STS	_cny_in,R24
(0022) 	   if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
    0147 2388      TST	R24
    0148 F021      BEQ	0x014D
    0149 3480      CPI	R24,0x40
    014A F011      BEQ	0x014D
    014B 3A80      CPI	R24,0xA0
    014C F411      BNE	0x014F
(0023) 	     {//前行
(0024) 	      forward();   //前行
    014D DF1E      RCALL	_forward
(0025) 		  cny_times = 0x00;
    014E 2744      CLR	R20
(0026) 		 }
(0027) 	   if(cny_in == 0x20 || cny_in == 0x60)
    014F 91800060  LDS	R24,_cny_in
    0151 3280      CPI	R24,0x20
    0152 F011      BEQ	0x0155
    0153 3680      CPI	R24,0x60
    0154 F429      BNE	0x015A
(0028) 	     {//慢速右转
(0029) 		  turn_right_s();   //慢速右转
    0155 DF07      RCALL	_turn_right_s
(0030) 		  delay_ms(cny_delayms);
    0156 E302      LDI	R16,0x32
    0157 E010      LDI	R17,0
    0158 DEEC      RCALL	_delay_ms
(0031) 		  cny_times = 0x00;
    0159 2744      CLR	R20
(0032) 		 }
(0033) 	   if(cny_in == 0x80 || cny_in == 0xc0)
    015A 91800060  LDS	R24,_cny_in
    015C 3880      CPI	R24,0x80
    015D F011      BEQ	0x0160
    015E 3C80      CPI	R24,0xC0
    015F F429      BNE	0x0165
(0034) 	     {//慢速左转
(0035)           turn_left_s();    //慢速左转
    0160 DF01      RCALL	_turn_left_s
(0036)           delay_ms(cny_delayms);
    0161 E302      LDI	R16,0x32
    0162 E010      LDI	R17,0
    0163 DEE1      RCALL	_delay_ms
(0037) 		  cny_times = 0x00;
    0164 2744      CLR	R20
(0038)  		 }
(0039) 	   if(cny_in == 0xe0)
    0165 91800060  LDS	R24,_cny_in
    0167 3E80      CPI	R24,0xE0
    0168 F449      BNE	0x0172
(0040) 	     {//前行--探测多次都为 0xe0 ,停止运行
(0041) 		  forward();
    0169 DF02      RCALL	_forward
(0042) 		  cny_times++;
    016A 9543      INC	R20
(0043) 		  delay_ms(10);
    016B E00A      LDI	R16,0xA
    016C E010      LDI	R17,0
    016D DED7      RCALL	_delay_ms
(0044) 		  if(cny_times == 0x64)
    016E 3644      CPI	R20,0x64
    016F F411      BNE	0x0172
(0045) 			{
(0046) 			 stop();   //停止运动//熄灭指示灯   
    0170 DF00      RCALL	_stop
(0047)              goto start_up;
    0171 CFCF      RJMP	0x0141
    0172 CFD0      RJMP	0x0143
(0048) 			}
(0049) 		 }
(0050) 	  }
(0051) }
    0173 D007      RCALL	pop_gset1
    0174 9508      RET
(0052) 
(0053) void main()
(0054) {
(0055)  cny_car();
(0056) }
FILE: <library>
_main:
    0175 CFC9      RJMP	_cny_car
pop_gset2:
    0176 E0E2      LDI	R30,2
    0177 C004      RJMP	pop
push_gset1:
    0178 935A      ST	R21,-Y
    0179 934A      ST	R20,-Y
    017A 9508      RET
pop_gset1:
    017B E0E1      LDI	R30,1
pop:
    017C 9149      LD	R20,Y+
    017D 9159      LD	R21,Y+
    017E FDE0      SBRC	R30,0
    017F 9508      RET
    0180 9169      LD	R22,Y+
    0181 9179      LD	R23,Y+
    0182 FDE1      SBRC	R30,1
    0183 9508      RET
    0184 90A9      LD	R10,Y+
    0185 90B9      LD	R11,Y+
    0186 FDE2      SBRC	R30,2
    0187 9508      RET
    0188 90C9      LD	R12,Y+
    0189 90D9      LD	R13,Y+
    018A FDE3      SBRC	R30,3
    018B 9508      RET
    018C 90E9      LD	R14,Y+
    018D 90F9      LD	R15,Y+
    018E 9508      RET
push_gset2:
    018F 937A      ST	R23,-Y
    0190 936A      ST	R22,-Y
    0191 CFE6      RJMP	push_gset1

⌨️ 快捷键说明

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