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

📄 text1.lst

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 LST
📖 第 1 页 / 共 2 页
字号:
(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 940E01C9  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
_remote_car:
    0177 940E01D4  CALL	push_gset1
FILE: D:\afish\工作内容\DIY-08-16\M16\DIY-08-16\遥控车\remote.c
(0001) /*******************************************/
(0002) /*               广州天河双龙电子公司         
(0003)                  http://www.sl.com.cn 
(0004) 
(0005)   
(0006)  
(0007)     功能:
(0008)            遥控机器人 
(0009)            通过无线遥控调节机器人行走路线
(0010) 		   按下A键:机器人右转
(0011) 	       按下B键:机器人后退
(0012) 		   按下C键:停止运动
(0013) 		   按下D键:机器人左转
(0014) */
(0015) /********************************************/
(0016) #include <iom16v.h>
(0017) #include <macros.h>
(0018) #include <diy0206.c>
(0019) 
(0020) unsigned char remote_in;
(0021) 
(0022) void remote_car()
(0023) {//遥控车程序
(0024)  
(0025)  port_init();//调用端口初始化函数
    0179 DED1      RCALL	_port_init
(0026)  PORTA = 0xFF;
    017A EF8F      LDI	R24,0xFF
    017B BB8B      OUT	0x1B,R24
(0027)  mic_startup();//等待声控启动函数
    017C DF78      RCALL	_mic_startup
(0028)  PORTA = 0x00;
    017D 2422      CLR	R2
    017E BA2B      OUT	0x1B,R2
(0029)  delay_ms(20);
    017F E104      LDI	R16,0x14
    0180 E010      LDI	R17,0
    0181 DEE0      RCALL	_delay_ms
    0182 C040      RJMP	0x01C3
(0030)  while(1)
(0031)      {	  
(0032) 	  remote_in = PINB & 0xF0;
    0183 B386      IN	R24,0x16
    0184 7F80      ANDI	R24,0xF0
    0185 93800060  STS	remote_in,R24
(0033)       switch (remote_in)
    0187 2F48      MOV	R20,R24
    0188 2755      CLR	R21
    0189 3240      CPI	R20,0x20
    018A E0E0      LDI	R30,0
    018B 075E      CPC	R21,R30
    018C F119      BEQ	0x01B0
    018D E280      LDI	R24,0x20
    018E E090      LDI	R25,0
    018F 1784      CP	R24,R20
    0190 0795      CPC	R25,R21
    0191 F064      BLT	0x019E
    0192 3040      CPI	R20,0
    0193 0745      CPC	R20,R21
    0194 F0B1      BEQ	0x01AB
    0195 3040      CPI	R20,0
    0196 E0E0      LDI	R30,0
    0197 075E      CPC	R21,R30
    0198 F154      BLT	0x01C3
    0199 3140      CPI	R20,0x10
    019A E0E0      LDI	R30,0
    019B 075E      CPC	R21,R30
    019C F0E9      BEQ	0x01BA
    019D C025      RJMP	0x01C3
    019E 3440      CPI	R20,0x40
    019F E0E0      LDI	R30,0
    01A0 075E      CPC	R21,R30
    01A1 F099      BEQ	0x01B5
    01A2 3440      CPI	R20,0x40
    01A3 E0E0      LDI	R30,0
    01A4 075E      CPC	R21,R30
    01A5 F0EC      BLT	0x01C3
    01A6 3840      CPI	R20,0x80
    01A7 E0E0      LDI	R30,0
    01A8 075E      CPC	R21,R30
    01A9 F0A9      BEQ	0x01BF
    01AA C018      RJMP	0x01C3
(0034)       	{//检测遥控器是否有键按下
(0035)       case 0x00:
(0036) 		 forward();           //前行
    01AB DEDE      RCALL	_forward
(0037) 		 delay_ms(10);
    01AC E00A      LDI	R16,0xA
    01AD E010      LDI	R17,0
    01AE DEB3      RCALL	_delay_ms
(0038)       	break;
    01AF C013      RJMP	0x01C3
(0039)       case 0x20:  // < A >
(0040) 		 turn_right();        //右转
    01B0 DEC0      RCALL	_turn_right
(0041) 		 delay_ms(10);
    01B1 E00A      LDI	R16,0xA
    01B2 E010      LDI	R17,0
    01B3 DEAE      RCALL	_delay_ms
(0042)       	break;
    01B4 C00E      RJMP	0x01C3
(0043)       case 0x40:  // < B >
(0044) 		 backward();          //后退
    01B5 DECF      RCALL	_backward
(0045) 		 delay_ms(10);
    01B6 E00A      LDI	R16,0xA
    01B7 E010      LDI	R17,0
    01B8 DEA9      RCALL	_delay_ms
(0046)       	break;
    01B9 C009      RJMP	0x01C3
(0047)       case 0x10:  // < C >
(0048) 		stop();              //停止运动
    01BA DED4      RCALL	_stop
(0049) 		 delay_ms(10);
    01BB E00A      LDI	R16,0xA
    01BC E010      LDI	R17,0
    01BD DEA4      RCALL	_delay_ms
(0050)       	break;
    01BE C004      RJMP	0x01C3
(0051)       case 0x80:  // < D >
(0052)          turn_left();         //左转
    01BF DEB6      RCALL	_turn_left
(0053) 		 delay_ms(10);
    01C0 E00A      LDI	R16,0xA
    01C1 E010      LDI	R17,0
    01C2 DE9F      RCALL	_delay_ms
    01C3 CFBF      RJMP	0x0183
    01C4 940E01D7  CALL	pop_gset1
    01C6 9508      RET
(0054)       	break;
(0055)       	}
(0056) 	  
(0057) 	 
(0058) 	 }
(0059) }
(0060) 
(0061) void main()
(0062) {
(0063)  remote_car();
FILE: <library>
_main:
    01C7 DFAF      RCALL	_remote_car
    01C8 9508      RET
pop_gset2:
    01C9 E0E2      LDI	R30,2
    01CA 940C01D8  JMP	pop
push_gset5:
    01CC 92FA      ST	R15,-Y
    01CD 92EA      ST	R14,-Y
push_gset4:
    01CE 92DA      ST	R13,-Y
    01CF 92CA      ST	R12,-Y
push_gset3:
    01D0 92BA      ST	R11,-Y
    01D1 92AA      ST	R10,-Y
push_gset2:
    01D2 937A      ST	R23,-Y
    01D3 936A      ST	R22,-Y
push_gset1:
    01D4 935A      ST	R21,-Y
    01D5 934A      ST	R20,-Y
    01D6 9508      RET
pop_gset1:
    01D7 E0E1      LDI	R30,1
pop:
    01D8 9149      LD	R20,Y+
    01D9 9159      LD	R21,Y+
    01DA FDE0      SBRC	R30,0
    01DB 9508      RET
    01DC 9169      LD	R22,Y+
    01DD 9179      LD	R23,Y+
    01DE FDE1      SBRC	R30,1
    01DF 9508      RET
    01E0 90A9      LD	R10,Y+
    01E1 90B9      LD	R11,Y+
    01E2 FDE2      SBRC	R30,2
    01E3 9508      RET
    01E4 90C9      LD	R12,Y+
    01E5 90D9      LD	R13,Y+
    01E6 FDE3      SBRC	R30,3
    01E7 9508      RET
    01E8 90E9      LD	R14,Y+
    01E9 90F9      LD	R15,Y+
    01EA 9508      RET

⌨️ 快捷键说明

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