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

📄 text1.lst

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 LST
📖 第 1 页 / 共 2 页
字号:
    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 91800064  LDS	R24,delay_time2
    0128 91900065  LDS	R25,delay_time2+1
    012A 97C2      SBIW	R24,0x32
    012B 93900065  STS	delay_time2+1,R25
    012D 93800064  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 93900065  STS	delay_time2+1,R25
    0138 93800064  STS	delay_time2,R24
(0268)       	break;
    013A C03B      RJMP	0x0176
(0269)       case 0x40:  // < B >
(0270) 		 delay_time1 = delay_time1 + 50;
    013B 91800066  LDS	R24,delay_time1
    013D 91900067  LDS	R25,delay_time1+1
    013F 96C2      ADIW	R24,0x32
    0140 93900067  STS	delay_time1+1,R25
    0142 93800066  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 93900067  STS	delay_time1+1,R25
    014C 93800066  STS	delay_time1,R24
(0273)       	break;
    014E C027      RJMP	0x0176
(0274)       case 0x10:  // < C >
(0275) 		 delay_time1 = delay_time1 - 50;
    014F 91800066  LDS	R24,delay_time1
    0151 91900067  LDS	R25,delay_time1+1
    0153 97C2      SBIW	R24,0x32
    0154 93900067  STS	delay_time1+1,R25
    0156 93800066  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 93900067  STS	delay_time1+1,R25
    0160 93800066  STS	delay_time1,R24
(0278)       	break;
    0162 C013      RJMP	0x0176
(0279)       case 0x80:  // < D >
(0280)          delay_time2 = delay_time2 + 50;
    0163 91800064  LDS	R24,delay_time2
    0165 91900065  LDS	R25,delay_time2+1
    0167 96C2      ADIW	R24,0x32
    0168 93900065  STS	delay_time2+1,R25
    016A 93800064  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 93900065  STS	delay_time2+1,R25
    0174 93800064  STS	delay_time2,R24
(0283)       	break;
(0284)       case 0x00:  // 无按键
(0285) 	     break;
    0176 9508      RET
_xuanya_car:
    0177 940E0214  CALL	push_gset1
FILE: D:\afish\工作内容\DIY-08-16\M16\DIY-08-16\避悬崖障碍\xuanya.c
(0001) /************功能介绍************************
(0002)             广州双龙电子
(0003)              WWW.SL.COM.CN
(0004)    Chip type       :  ATMEGA16   
(0005)    Clock frequency :  8MHz
(0006) ********************************************
(0007) 
(0008)         自走车,机器人向前方行走,实现自动避悬崖障碍
(0009)         PB2声控启动
(0010) 	前方碰到障碍,机器人后退,左转,前进 
(0011) 	左方碰到障碍,机器人后退,右转,前进
(0012) 	右方碰到障碍,机器人后退,左转,前进 
(0013) 	前方碰到悬涯,机器人后退,左转,前进 
(0014) 	左方碰到悬涯,机器人后退,右转,前进
(0015) 	右方碰到悬涯,机器人后退,左转,前进    
(0016) 	左侧和右侧同时碰到悬涯,机器人停止待命,同时PA口的LED流水灯显示,
(0017) 	  电机驱动信号                       led灯指示电机状态 
(0018)   PD = 0xA0;//前行    //1010 0000//P0 = 0xC3;//1100,0011
(0019)  PD = 0x60;//快速左转//0110 0000//P0 = 0x33;//0011,0011
(0020)  PD = 0x20;//慢速左转//0010 0000//P0 = 0xF3;//1111,0011
(0021)  PD = 0x90;//快速右转//1001 0000//P0 = 0xCC;//1100,1100
(0022)  PD = 0x80;//慢速右转//1000 0000//P0 = 0xCF;//1100,1111
(0023)  PD = 0x50;//后退    //0101 0000//P0 = 0x3C;//0011,1100
(0024) 
(0025) ********************************************/
(0026) #include <iom16v.h>
(0027) #include <macros.h>
(0028) #define xuanya_delayms  300
(0029) #include <diy0206.c>
(0030) 
(0031)  
(0032) unsigned char pa,pb,pc,pd;
(0033) 
(0034) void xuanya_car(void)
(0035) {
(0036)  port_init();         //PA,PB,PC,PD 初始化
    0179 DED1      RCALL	_port_init
(0037)  
(0038)  mic_startup();       //等待声控启动
    017A DF7A      RCALL	_mic_startup
    017B C087      RJMP	0x0203
(0039)  
(0040)  while(1)
(0041)    {//左(pc7)  中(pc6)  右(pc5)
(0042)     
(0043) 	switch(PINB&0x0b)
    017C B346      IN	R20,0x16
    017D 2755      CLR	R21
    017E 704B      ANDI	R20,0xB
    017F 7050      ANDI	R21,0
    0180 3042      CPI	R20,2
    0181 E0E0      LDI	R30,0
    0182 075E      CPC	R21,R30
    0183 F161      BEQ	0x01B0
    0184 3043      CPI	R20,3
    0185 E0E0      LDI	R30,0
    0186 075E      CPC	R21,R30
    0187 F0F9      BEQ	0x01A7
    0188 3042      CPI	R20,2
    0189 E0E0      LDI	R30,0
    018A 075E      CPC	R21,R30
    018B F144      BLT	0x01B4
    018C 3049      CPI	R20,0x9
    018D E0E0      LDI	R30,0
    018E 075E      CPC	R21,R30
    018F F029      BEQ	0x0195
    0190 304A      CPI	R20,0xA
    0191 E0E0      LDI	R30,0
    0192 075E      CPC	R21,R30
    0193 F051      BEQ	0x019E
    0194 C01F      RJMP	0x01B4
(0044)        {
(0045) 	   case 0x09:forward();delay_ms(touch_time); turn_left();delay_ms(touch_time);break; 
    0195 DEF4      RCALL	_forward
    0196 EF0A      LDI	R16,0xFA
    0197 E010      LDI	R17,0
    0198 DEC9      RCALL	_delay_ms
    0199 DEDC      RCALL	_turn_left
    019A EF0A      LDI	R16,0xFA
    019B E010      LDI	R17,0
    019C DEC5      RCALL	_delay_ms
    019D C016      RJMP	0x01B4
(0046)       // 0b 0000,1001  尾部开关接触 ,前行,左转
(0047) 
(0048)        case 0x0a:backward();delay_ms(touch_time);turn_left();delay_ms(touch_time); break;       
    019E DEE6      RCALL	_backward
    019F EF0A      LDI	R16,0xFA
    01A0 E010      LDI	R17,0
    01A1 DEC0      RCALL	_delay_ms
    01A2 DED3      RCALL	_turn_left
    01A3 EF0A      LDI	R16,0xFA
    01A4 E010      LDI	R17,0
    01A5 DEBC      RCALL	_delay_ms
    01A6 C00D      RJMP	0x01B4
(0049) 	  //右侧开关接触 ,后退,左转
(0050) 
(0051) 	   case 0x03:backward();delay_ms(touch_time);turn_left();delay_ms(touch_time);break;       
    01A7 DEDD      RCALL	_backward
    01A8 EF0A      LDI	R16,0xFA
    01A9 E010      LDI	R17,0
    01AA DEB7      RCALL	_delay_ms
    01AB DECA      RCALL	_turn_left
    01AC EF0A      LDI	R16,0xFA
    01AD E010      LDI	R17,0
    01AE DEB3      RCALL	_delay_ms
    01AF C004      RJMP	0x01B4
(0052) 	  //左侧开关接触,后退,左转
(0053) 
(0054) 	   case 0x02:stop();delay_ms(touch_time*4); break;    
    01B0 DEDE      RCALL	_stop
    01B1 EE08      LDI	R16,0xE8
    01B2 E013      LDI	R17,3
    01B3 DEAE      RCALL	_delay_ms
(0055) 	   // 0b 0000,0010  两侧开关同时接触,停止运动,熄灭指示灯  
(0056) 	   }
(0057)     pc = PINC & 0xE0;
    01B4 B383      IN	R24,0x13
    01B5 7E80      ANDI	R24,0xE0
    01B6 93800061  STS	pc,R24
(0058)     if(pc == 0x40)
    01B8 3480      CPI	R24,0x40
    01B9 F441      BNE	0x01C2
(0059) 	  {//后退//左转
(0060) 	   backward();//后退
    01BA DECA      RCALL	_backward
(0061) 	   delay_ms(xuanya_delayms);
    01BB E20C      LDI	R16,0x2C
    01BC E011      LDI	R17,1
    01BD DEA4      RCALL	_delay_ms
(0062) 	   turn_left();//左转
    01BE DEB7      RCALL	_turn_left
(0063) 	   delay_ms(xuanya_delayms/2);
    01BF E906      LDI	R16,0x96
    01C0 E010      LDI	R17,0
    01C1 DEA0      RCALL	_delay_ms
(0064) 	  }
(0065) 	if(pc == 0x80)
    01C2 91800061  LDS	R24,pc
    01C4 3880      CPI	R24,0x80
    01C5 F441      BNE	0x01CE
(0066) 	  {//后退//左转
(0067) 	   backward();//后退
    01C6 DEBE      RCALL	_backward
(0068) 	   delay_ms(xuanya_delayms);
    01C7 E20C      LDI	R16,0x2C
    01C8 E011      LDI	R17,1
    01C9 DE98      RCALL	_delay_ms
(0069) 	   turn_left();//左转
    01CA DEAB      RCALL	_turn_left
(0070) 	   delay_ms(xuanya_delayms/2);
    01CB E906      LDI	R16,0x96
    01CC E010      LDI	R17,0
    01CD DE94      RCALL	_delay_ms
(0071) 	  }
(0072) 	if(pc == 0x20)
    01CE 91800061  LDS	R24,pc
    01D0 3280      CPI	R24,0x20
    01D1 F441      BNE	0x01DA
(0073) 	  {//后退//左转
(0074) 	   backward();//后退
    01D2 DEB2      RCALL	_backward
(0075) 	   delay_ms(xuanya_delayms);
    01D3 E20C      LDI	R16,0x2C
    01D4 E011      LDI	R17,1
    01D5 DE8C      RCALL	_delay_ms
(0076) 	   turn_left();//左转
    01D6 DE9F      RCALL	_turn_left
(0077) 	   delay_ms(xuanya_delayms/2);
    01D7 E906      LDI	R16,0x96
    01D8 E010      LDI	R17,0
    01D9 DE88      RCALL	_delay_ms
(0078) 	  }
(0079) 	if(pc == 0xc0)
    01DA 91800061  LDS	R24,pc
    01DC 3C80      CPI	R24,0xC0
    01DD F441      BNE	0x01E6
(0080) 	  {//后退//左转
(0081) 	   backward();//后退
    01DE DEA6      RCALL	_backward
(0082) 	   delay_ms(xuanya_delayms);
    01DF E20C      LDI	R16,0x2C
    01E0 E011      LDI	R17,1
    01E1 DE80      RCALL	_delay_ms
(0083) 	   turn_left();//左转
    01E2 DE93      RCALL	_turn_left
(0084) 	   delay_ms(xuanya_delayms/2);
    01E3 E906      LDI	R16,0x96
    01E4 E010      LDI	R17,0
    01E5 DE7C      RCALL	_delay_ms
(0085) 	  }
(0086) 	if(pc == 0x60)
    01E6 91800061  LDS	R24,pc
    01E8 3680      CPI	R24,0x60
    01E9 F441      BNE	0x01F2
(0087) 	  {//后退//左转
(0088) 	   backward();//后退
    01EA DE9A      RCALL	_backward
(0089) 	   delay_ms(xuanya_delayms);
    01EB E20C      LDI	R16,0x2C
    01EC E011      LDI	R17,1
    01ED DE74      RCALL	_delay_ms
(0090) 	   turn_left();//左转
    01EE DE87      RCALL	_turn_left
(0091) 	   delay_ms(xuanya_delayms/2);
    01EF E906      LDI	R16,0x96
    01F0 E010      LDI	R17,0
    01F1 DE70      RCALL	_delay_ms
(0092) 	  }
(0093) 	if(pc == 0xE0)
    01F2 91800061  LDS	R24,pc
    01F4 3E80      CPI	R24,0xE0
    01F5 F461      BNE	0x0202
(0094) 	  {
(0095)        //刹车 //led灯为流水灯
(0096)        stop();
    01F6 DE98      RCALL	_stop
(0097)        PORTA = 0x3C;
    01F7 E38C      LDI	R24,0x3C
    01F8 BB8B      OUT	0x1B,R24
(0098)        delay_ms(xuanya_delayms);
    01F9 E20C      LDI	R16,0x2C
    01FA E011      LDI	R17,1
    01FB DE66      RCALL	_delay_ms
(0099) 	   PORTA = 0xC3;
    01FC EC83      LDI	R24,0xC3
    01FD BB8B      OUT	0x1B,R24
(0100)        delay_ms(xuanya_delayms);
    01FE E20C      LDI	R16,0x2C
    01FF E011      LDI	R17,1
    0200 DE61      RCALL	_delay_ms
(0101) 	  } 
    0201 C001      RJMP	0x0203
(0102) 	else
(0103) 	  {
(0104) 	    forward();//前行
    0202 DE87      RCALL	_forward
    0203 CF78      RJMP	0x017C
    0204 940E0217  CALL	pop_gset1
    0206 9508      RET
(0105) 	  }
(0106)    }
(0107) }
(0108) 
(0109) void main()
(0110) {
(0111)  xuanya_car();
FILE: <library>
_main:
    0207 DF6F      RCALL	_xuanya_car
    0208 9508      RET
pop_gset2:
    0209 E0E2      LDI	R30,2
    020A 940C0218  JMP	pop
push_gset5:
    020C 92FA      ST	R15,-Y
    020D 92EA      ST	R14,-Y
push_gset4:
    020E 92DA      ST	R13,-Y
    020F 92CA      ST	R12,-Y
push_gset3:
    0210 92BA      ST	R11,-Y
    0211 92AA      ST	R10,-Y
push_gset2:
    0212 937A      ST	R23,-Y
    0213 936A      ST	R22,-Y
push_gset1:
    0214 935A      ST	R21,-Y
    0215 934A      ST	R20,-Y
    0216 9508      RET
pop_gset1:
    0217 E0E1      LDI	R30,1
pop:
    0218 9149      LD	R20,Y+
    0219 9159      LD	R21,Y+
    021A FDE0      SBRC	R30,0
    021B 9508      RET
    021C 9169      LD	R22,Y+
    021D 9179      LD	R23,Y+
    021E FDE1      SBRC	R30,1
    021F 9508      RET
    0220 90A9      LD	R10,Y+
    0221 90B9      LD	R11,Y+
    0222 FDE2      SBRC	R30,2
    0223 9508      RET
    0224 90C9      LD	R12,Y+
    0225 90D9      LD	R13,Y+
    0226 FDE3      SBRC	R30,3
    0227 9508      RET
    0228 90E9      LD	R14,Y+
    0229 90F9      LD	R15,Y+
    022A 9508      RET

⌨️ 快捷键说明

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