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

📄 text1.lst

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0208)        backward();          //后退
    00C9 DFBB      RCALL	_backward
(0209)        delay_ms(touch_time);
    00CA EF0A      LDI	R16,0xFA
    00CB E010      LDI	R17,0
    00CC DF95      RCALL	_delay_ms
(0210)        
(0211) 	   turn_left();         //左转
    00CD DFA8      RCALL	_turn_left
(0212)        delay_ms(touch_time);
    00CE EF0A      LDI	R16,0xFA
    00CF E010      LDI	R17,0
    00D0 DF91      RCALL	_delay_ms
(0213)    }
(0214)  if(sw_in == 0x02)// 0b 0000,0010  两侧开关同时接触,停止运动
    00D1 3042      CPI	R20,2
    00D2 F4F9      BNE	0x00F2
(0215)    {
(0216) 	stop();       //停止运动,熄灭指示灯
    00D3 DFBB      RCALL	_stop
(0217)     delay_ms(touch_time*4);
    00D4 EE08      LDI	R16,0xE8
    00D5 E013      LDI	R17,3
    00D6 DF8B      RCALL	_delay_ms
    00D7 C019      RJMP	0x00F1
(0218) 	while(1)
(0219) 	     {
(0220) 		  sw_in = PINC & 0x10;
    00D8 B343      IN	R20,0x13
    00D9 7140      ANDI	R20,0x10
(0221) 		  if(sw_in == 0x00)
    00DA F409      BNE	0x00DC
(0222) 		    {break;}//首部开关接触继续启动运动
    00DB C016      RJMP	0x00F2
(0223) 		  PORTA = 0x55;//停止不运动时pa口指示灯流动闪烁
    00DC E585      LDI	R24,0x55
    00DD BB8B      OUT	0x1B,R24
(0224) 		  delay_ms(250);
    00DE EF0A      LDI	R16,0xFA
    00DF E010      LDI	R17,0
    00E0 DF81      RCALL	_delay_ms
(0225) 		  PORTA = 0xAA;
    00E1 EA8A      LDI	R24,0xAA
    00E2 BB8B      OUT	0x1B,R24
(0226) 		  delay_ms(250);
    00E3 EF0A      LDI	R16,0xFA
    00E4 E010      LDI	R17,0
    00E5 DF7C      RCALL	_delay_ms
(0227) 		  remote_in = PINB & 0xf0;//遥控器控制继续运动
    00E6 B366      IN	R22,0x16
    00E7 7F60      ANDI	R22,0xF0
(0228) 		  if(remote_in == 0x10 || remote_in == 0x20 || remote_in == 0x40 || remote_in == 0x80)
    00E8 3160      CPI	R22,0x10
    00E9 F031      BEQ	0x00F0
    00EA 3260      CPI	R22,0x20
    00EB F021      BEQ	0x00F0
    00EC 3460      CPI	R22,0x40
    00ED F011      BEQ	0x00F0
    00EE 3860      CPI	R22,0x80
    00EF F409      BNE	0x00F1
(0229) 		    {break;}
    00F0 C001      RJMP	0x00F2
    00F1 CFE6      RJMP	0x00D8
(0230) 		 }
(0231)    }   
    00F2 940E01A6  CALL	pop_gset2
    00F4 9508      RET
(0232) }
(0233) 
(0234) void mic_startup()
(0235) {//声控启动程序运行
_mic_startup:
  mic_in               --> R16
    00F5 C004      RJMP	0x00FA
(0236)  unsigned char mic_in;
(0237)  while(1)//等待PB2按键按下	
(0238)    {	  //无键按下等待
(0239)     mic_in=PINB & 0x04;     //pb2=0
    00F6 B306      IN	R16,0x16
    00F7 7004      ANDI	R16,4
(0240)     if(mic_in==0){break;}
    00F8 F409      BNE	0x00FA
    00F9 C001      RJMP	0x00FB
    00FA CFFB      RJMP	0x00F6
    00FB 9508      RET
(0241)    }//有键按下运行下面的程序
(0242) }
(0243) 
(0244) //                #       
(0245) //                #
(0246) //                #
(0247) //                #
(0248) //                #    //  delay_time1  转弯时间
(0249) //        # # # # #    //  delay_time2  直行时间
(0250) //      # X       #    //<A>  0x40  delay_time2-50
(0251) //      #   B  C  #    //<B>  0x20  delay_time1+50
(0252) //      #  D  A   #    //<C>  0x80  delay_time1-50
(0253) //      #         #    //<D>  0x10  delay_time2+50
(0254) //        # # # #      // max: 2000   min: 200 
(0255) 
(0256) unsigned int delay_time1,delay_time2;
(0257) 
(0258) void remote_auto_time()
(0259) {
(0260)  unsigned char remote_in;
(0261)  	  remote_in = PINB & 0xF0;
_remote_auto_time:
  remote_in            --> R16
    00FC B306      IN	R16,0x16
    00FD 7F00      ANDI	R16,0xF0
(0262)       switch (remote_in)
    00FE 2711      CLR	R17
    00FF 3200      CPI	R16,0x20
    0100 E0E0      LDI	R30,0
    0101 071E      CPC	R17,R30
    0102 F119      BEQ	0x0126
    0103 E280      LDI	R24,0x20
    0104 E090      LDI	R25,0
    0105 1780      CP	R24,R16
    0106 0791      CPC	R25,R17
    0107 F07C      BLT	0x0117
    0108 3000      CPI	R16,0
    0109 0701      CPC	R16,R17
    010A F409      BNE	0x010C
    010B C06A      RJMP	0x0176
    010C 3000      CPI	R16,0
    010D E0E0      LDI	R30,0
    010E 071E      CPC	R17,R30
    010F F40C      BGE	0x0111
    0110 C065      RJMP	0x0176
    0111 3100      CPI	R16,0x10
    0112 E0E0      LDI	R30,0
    0113 071E      CPC	R17,R30
    0114 F409      BNE	0x0116
    0115 C039      RJMP	0x014F
    0116 C05F      RJMP	0x0176
    0117 3400      CPI	R16,0x40
    0118 E0E0      LDI	R30,0
    0119 071E      CPC	R17,R30
    011A F101      BEQ	0x013B
    011B 3400      CPI	R16,0x40
    011C E0E0      LDI	R30,0
    011D 071E      CPC	R17,R30
    011E F40C      BGE	0x0120
    011F C056      RJMP	0x0176
    0120 3800      CPI	R16,0x80
    0121 E0E0      LDI	R30,0
    0122 071E      CPC	R17,R30
    0123 F409      BNE	0x0125
    0124 C03E      RJMP	0x0163
    0125 C050      RJMP	0x0176
(0263)       	{//检测遥控器是否有键按下
(0264)       case 0x20:  // < A >
(0265) 		 delay_time2 = delay_time2 - 50;
    0126 91800061  LDS	R24,delay_time2
    0128 91900062  LDS	R25,delay_time2+1
    012A 97C2      SBIW	R24,0x32
    012B 93900062  STS	delay_time2+1,R25
    012D 93800061  STS	delay_time2,R24
(0266) 	     if(delay_time2 == 50)
    012F 3382      CPI	R24,0x32
    0130 E0E0      LDI	R30,0
    0131 079E      CPC	R25,R30
    0132 F009      BEQ	0x0134
    0133 C042      RJMP	0x0176
(0267) 		   {delay_time2 = 100;}	 
    0134 E684      LDI	R24,0x64
    0135 E090      LDI	R25,0
    0136 93900062  STS	delay_time2+1,R25
    0138 93800061  STS	delay_time2,R24
(0268)       	break;
    013A C03B      RJMP	0x0176
(0269)       case 0x40:  // < B >
(0270) 		 delay_time1 = delay_time1 + 50;
    013B 91800063  LDS	R24,delay_time1
    013D 91900064  LDS	R25,delay_time1+1
    013F 96C2      ADIW	R24,0x32
    0140 93900064  STS	delay_time1+1,R25
    0142 93800063  STS	delay_time1,R24
(0271) 	     if(delay_time1 == 2050)
    0144 3082      CPI	R24,2
    0145 E0E8      LDI	R30,0x8
    0146 079E      CPC	R25,R30
    0147 F571      BNE	0x0176
(0272) 		   {delay_time1 = 2000;}	 
    0148 ED80      LDI	R24,0xD0
    0149 E097      LDI	R25,7
    014A 93900064  STS	delay_time1+1,R25
    014C 93800063  STS	delay_time1,R24
(0273)       	break;
    014E C027      RJMP	0x0176
(0274)       case 0x10:  // < C >
(0275) 		 delay_time1 = delay_time1 - 50;
    014F 91800063  LDS	R24,delay_time1
    0151 91900064  LDS	R25,delay_time1+1
    0153 97C2      SBIW	R24,0x32
    0154 93900064  STS	delay_time1+1,R25
    0156 93800063  STS	delay_time1,R24
(0276) 	     if(delay_time1 == 50)
    0158 3382      CPI	R24,0x32
    0159 E0E0      LDI	R30,0
    015A 079E      CPC	R25,R30
    015B F4D1      BNE	0x0176
(0277) 		   {delay_time1 = 100;}	 
    015C E684      LDI	R24,0x64
    015D E090      LDI	R25,0
    015E 93900064  STS	delay_time1+1,R25
    0160 93800063  STS	delay_time1,R24
(0278)       	break;
    0162 C013      RJMP	0x0176
(0279)       case 0x80:  // < D >
(0280)          delay_time2 = delay_time2 + 50;
    0163 91800061  LDS	R24,delay_time2
    0165 91900062  LDS	R25,delay_time2+1
    0167 96C2      ADIW	R24,0x32
    0168 93900062  STS	delay_time2+1,R25
    016A 93800061  STS	delay_time2,R24
(0281) 	     if(delay_time2 == 2050)
    016C 3082      CPI	R24,2
    016D E0E8      LDI	R30,0x8
    016E 079E      CPC	R25,R30
    016F F431      BNE	0x0176
(0282) 		   {delay_time2 = 2000;}	 
    0170 ED80      LDI	R24,0xD0
    0171 E097      LDI	R25,7
    0172 93900062  STS	delay_time2+1,R25
    0174 93800061  STS	delay_time2,R24
(0283)       	break;
(0284)       case 0x00:  // 无按键
(0285) 	     break;
    0176 9508      RET
FILE: D:\afish\工作内容\DIY-08-16\M16\DIY-08-16\追光\trace-light.c
(0001) /**********************************************************/
(0002) /*            广州天河双龙电子公司        
(0003)               http://www.sl.com.cn  
(0004)               PC.1检测右光敏电阻
(0005)               PC.2检测左光敏电阻
(0006)     功能:
(0007)               追光程序,小车追着光走。
(0008) 	Chip type  		 :  ATMEGA16  
(0009)     Clock frequency  :  8MHz
(0010) */
(0011) /**********************************************************/
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014) #include <diy0206.c>  //调用sldiy0206机器人的子函数库
(0015) 
(0016) #define light_delay 100
(0017) 
(0018) unsigned char cds;
(0019) 
(0020) void trace_light()
(0021) {
(0022)  port_init();         //PA,PB,PC,PD 初始化
_trace_light:
    0177 DED3      RCALL	_port_init
(0023)  
(0024)  work_status = 0x70;  //置对应的工作状态标志
    0178 E780      LDI	R24,0x70
    0179 93800065  STS	work_status,R24
(0025)  
(0026)  mic_startup();       //等待声控启动
    017B DF79      RCALL	_mic_startup
    017C C025      RJMP	0x01A2
(0027)  
(0028)  while(1)
(0029)     {
(0030) 	 sw_touch();          //检测轻触开关
    017D DF15      RCALL	_sw_touch
(0031) 	
(0032) 	 cds = PINC & 0x06; //0b0000,0110
    017E B383      IN	R24,0x13
    017F 7086      ANDI	R24,6
    0180 93800060  STS	cds,R24
(0033) 
(0034) 	 if(cds == 0x00)    //左右两侧都感测到光
    0182 2388      TST	R24
    0183 F421      BNE	0x0188
(0035) 	   {//直行
(0036) 	    forward();
    0184 DF05      RCALL	_forward
(0037) 		delay_ms(light_delay);  //延时
    0185 E604      LDI	R16,0x64
    0186 E010      LDI	R17,0
    0187 DEDA      RCALL	_delay_ms
(0038) 	   } 
(0039) 	 if(cds == 0x02)    //0b0000,0010___pc2(右侧)感测到光
    0188 91800060  LDS	R24,cds
    018A 3082      CPI	R24,2
    018B F421      BNE	0x0190
(0040) 	   {//慢速右转
(0041) 	    turn_right_s();
    018C DEEE      RCALL	_turn_right_s
(0042) 		delay_ms(light_delay);  //延时
    018D E604      LDI	R16,0x64
    018E E010      LDI	R17,0
    018F DED2      RCALL	_delay_ms
(0043) 	   }
(0044) 	 if(cds == 0x04)    //0b0000,0100___pc1(左侧)感测到光
    0190 91800060  LDS	R24,cds
    0192 3084      CPI	R24,4
    0193 F421      BNE	0x0198
(0045) 	   {//慢速左转
(0046) 	    turn_left_s();
    0194 DEEB      RCALL	_turn_left_s
(0047) 		delay_ms(light_delay);  //延时
    0195 E604      LDI	R16,0x64
    0196 E010      LDI	R17,0
    0197 DECA      RCALL	_delay_ms
(0048) 	   }
(0049) 	 if(cds == 0x06)
    0198 91800060  LDS	R24,cds
    019A 3086      CPI	R24,6
    019B F431      BNE	0x01A2
(0050) 	   {//停止动作
(0051) 	    PORTA = 0x55;   //延时后停止动作,等待光照重新动作
    019C E585      LDI	R24,0x55
    019D BB8B      OUT	0x1B,R24
(0052) 		delay_ms(light_delay*2);
    019E EC08      LDI	R16,0xC8
    019F E010      LDI	R17,0
    01A0 DEC1      RCALL	_delay_ms
(0053) 		stop();
    01A1 DEED      RCALL	_stop
    01A2 CFDA      RJMP	0x017D
    01A3 9508      RET
(0054) 		
(0055) 	   }
(0056) 	}
(0057) }
(0058) 
(0059) void main()
(0060) {
(0061)  trace_light();
FILE: <library>
_main:
    01A4 DFD2      RCALL	_trace_light
    01A5 9508      RET
pop_gset2:
    01A6 E0E2      LDI	R30,2
    01A7 940C01B5  JMP	pop
push_gset5:
    01A9 92FA      ST	R15,-Y
    01AA 92EA      ST	R14,-Y
push_gset4:
    01AB 92DA      ST	R13,-Y
    01AC 92CA      ST	R12,-Y
push_gset3:
    01AD 92BA      ST	R11,-Y
    01AE 92AA      ST	R10,-Y
push_gset2:
    01AF 937A      ST	R23,-Y
    01B0 936A      ST	R22,-Y
push_gset1:
    01B1 935A      ST	R21,-Y
    01B2 934A      ST	R20,-Y
    01B3 9508      RET
pop_gset1:
    01B4 E0E1      LDI	R30,1
pop:
    01B5 9149      LD	R20,Y+
    01B6 9159      LD	R21,Y+
    01B7 FDE0      SBRC	R30,0
    01B8 9508      RET
    01B9 9169      LD	R22,Y+
    01BA 9179      LD	R23,Y+
    01BB FDE1      SBRC	R30,1
    01BC 9508      RET
    01BD 90A9      LD	R10,Y+
    01BE 90B9      LD	R11,Y+
    01BF FDE2      SBRC	R30,2
    01C0 9508      RET
    01C1 90C9      LD	R12,Y+
    01C2 90D9      LD	R13,Y+
    01C3 FDE3      SBRC	R30,3
    01C4 9508      RET
    01C5 90E9      LD	R14,Y+
    01C6 90F9      LD	R15,Y+
    01C7 9508      RET

⌨️ 快捷键说明

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