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

📄 remote_light.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0060) 	  remote_in = PINB & 0x0F;
    0162 B386      IN	R24,P16
    0163 708F      ANDI	R24,0xF
    0164 2EA8      MOV	R10,R24
(0061)       switch (remote_in)
    0165 2EC8      MOV	R12,R24
    0166 24DD      CLR	R13
    0167 20CC      TST	R12
    0168 F411      BNE	0x016B
    0169 20DD      TST	R13
    016A F0D9      BEQ	0x0186
    016B 2D8C      MOV	R24,R12
    016C 2D9D      MOV	R25,R13
    016D 3081      CPI	R24,1
    016E E0E0      LDI	R30,0
    016F 079E      CPC	R25,R30
    0170 F099      BEQ	0x0184
    0171 3082      CPI	R24,2
    0172 E0E0      LDI	R30,0
    0173 079E      CPC	R25,R30
    0174 F059      BEQ	0x0180
    0175 3084      CPI	R24,4
    0176 E0E0      LDI	R30,0
    0177 079E      CPC	R25,R30
    0178 F029      BEQ	0x017E
    0179 3088      CPI	R24,0x8
    017A E0E0      LDI	R30,0
    017B 079E      CPC	R25,R30
    017C F029      BEQ	0x0182
    017D C009      RJMP	0x0187
(0062)       	{//检测遥控器是否有键按下
(0063)       case 0x04:  // < A >
(0064) 		 turn_right();        //右转
    017E DED4      RCALL	_turn_right
(0065)       	break;
    017F C007      RJMP	0x0187
(0066)       case 0x02:  // < B >
(0067) 		 backward();          //后退
    0180 DEE6      RCALL	_backward
(0068)       	break;
    0181 C005      RJMP	0x0187
(0069)       case 0x08:  // < C >
(0070) 		 stop();              //停止运动
    0182 DEEE      RCALL	_stop
(0071)       	break;
    0183 C003      RJMP	0x0187
(0072)       case 0x01:  // < D >
(0073)          turn_left();         //左转
    0184 DED3      RCALL	_turn_left
(0074)       	break;
    0185 C001      RJMP	0x0187
(0075)       case 0x00:
(0076) 		 forward();           //前行
    0186 DEE5      RCALL	_forward
(0077)       	break;
(0078)       	}
(0079) 	  delay_ms(100);
    0187 E604      LDI	R16,0x64
    0188 E010      LDI	R17,0
    0189 DEBB      RCALL	_delay_ms
    018A CFD6      RJMP	0x0161
(0080) 	 }
(0081) }
    018B D097      RCALL	pop_gset4
    018C 9508      RET
_trace_light:
  timers               --> R20
  led                  --> R22
  cds                  --> R10
    018D D08B      RCALL	push_gset3
(0082) 
(0083) void trace_light()
(0084) {
(0085)  unsigned char cds,led,timers;
(0086)      led = 0xc3;
    018E EC63      LDI	R22,0xC3
(0087) 	 for(timers=0;timers<9;timers++)
    018F 2744      CLR	R20
    0190 C006      RJMP	0x0197
(0088) 	    {//8 LED 整体亮灭闪烁
(0089) 	     PORTA = led;
    0191 BB6B      OUT	P1B,R22
(0090) 	     delay_ms(500);
    0192 EF04      LDI	R16,0xF4
    0193 E011      LDI	R17,1
    0194 DEB0      RCALL	_delay_ms
(0091) 		 led = ~led;
    0195 9560      COM	R22
    0196 9543      INC	R20
    0197 3049      CPI	R20,0x9
    0198 F3C0      BCS	0x0191
(0092) 		}
(0093)  
(0094)  work_status = 0x70;  //置对应的工作状态标志
    0199 E780      LDI	R24,0x70
    019A 93800065  STS	_work_status,R24
(0095)  
(0096)  mic_startup();       //等待声控启动
    019C DF39      RCALL	_mic_startup
    019D C021      RJMP	0x01BF
(0097)  
(0098)  while(1)
(0099)     {
(0100) 	 sw_touch();          //检测轻触开关
    019E DED6      RCALL	_sw_touch
(0101) 	
(0102) 	 cds = PINC & 0x06; //0b0000,0110
    019F B383      IN	R24,P13
    01A0 7086      ANDI	R24,6
    01A1 2EA8      MOV	R10,R24
(0103) 
(0104) 	 if(cds == 0x00)    //左右两侧都感测到光
    01A2 2388      TST	R24
    01A3 F421      BNE	0x01A8
(0105) 	   {//直行
(0106) 	    forward();
    01A4 DEC7      RCALL	_forward
(0107) 		delay_ms(light_delay);  //延时
    01A5 E604      LDI	R16,0x64
    01A6 E010      LDI	R17,0
    01A7 DE9D      RCALL	_delay_ms
(0108) 	   } 
(0109) 	 if(cds == 0x02)    //0b0000,0010___pc2(右侧)感测到光
    01A8 2D8A      MOV	R24,R10
    01A9 3082      CPI	R24,2
    01AA F421      BNE	0x01AF
(0110) 	   {//慢速右转
(0111) 	    turn_right_s();
    01AB DEB1      RCALL	_turn_right_s
(0112) 		delay_ms(light_delay);  //延时
    01AC E604      LDI	R16,0x64
    01AD E010      LDI	R17,0
    01AE DE96      RCALL	_delay_ms
(0113) 	   }
(0114) 	 if(cds == 0x04)    //0b0000,0100___pc1(左侧)感测到光
    01AF 2D8A      MOV	R24,R10
    01B0 3084      CPI	R24,4
    01B1 F421      BNE	0x01B6
(0115) 	   {//慢速左转
(0116) 	    turn_left_s();
    01B2 DEAF      RCALL	_turn_left_s
(0117) 		delay_ms(light_delay);  //延时
    01B3 E604      LDI	R16,0x64
    01B4 E010      LDI	R17,0
    01B5 DE8F      RCALL	_delay_ms
(0118) 	   }
(0119) 	 if(cds == 0x06)
    01B6 2D8A      MOV	R24,R10
    01B7 3086      CPI	R24,6
    01B8 F431      BNE	0x01BF
(0120) 	   {//停止动作
(0121) 	    PORTA = 0x55;   //延时后停止动作,等待光照重新动作
    01B9 E585      LDI	R24,0x55
    01BA BB8B      OUT	P1B,R24
(0122) 		delay_ms(light_delay*2);
    01BB EC08      LDI	R16,0xC8
    01BC E010      LDI	R17,0
    01BD DE87      RCALL	_delay_ms
(0123) 		stop();
    01BE DEB2      RCALL	_stop
    01BF CFDE      RJMP	0x019E
(0124) 	   }
(0125) 	}
(0126) }
    01C0 D060      RCALL	pop_gset3
    01C1 9508      RET
(0127) 
(0128) void main()
(0129) {
(0130)  unsigned char pd_select,remote_select;
(0131)  
(0132)   port_init();         //PA,PB,PC,PD 初始化
_main:
  remote_select        --> R20
  pd_select            --> R22
    01C2 DE6A      RCALL	_port_init
(0133)   
(0134)   work_status = 0x67;  //置对应的工作状态标志
    01C3 E687      LDI	R24,0x67
    01C4 93800065  STS	_work_status,R24
(0135)   
(0136)   PORTA = 0x7e;
    01C6 E78E      LDI	R24,0x7E
    01C7 BB8B      OUT	P1B,R24
    01C8 C034      RJMP	0x01FD
(0137)   while(1)
(0138)    {
(0139)     pd_select = PIND & 0x0f;
    01C9 B360      IN	R22,P10
    01CA 706F      ANDI	R22,0xF
(0140)     if(pd_select == 0x0e)//pd0=0,其它为高电平
    01CB 306E      CPI	R22,0xE
    01CC F451      BNE	0x01D7
(0141)       {
    01CD C008      RJMP	0x01D6
(0142)        while(1)
(0143) 	     {
(0144) 	      delay_ms(500);//消除抖动
    01CE EF04      LDI	R16,0xF4
    01CF E011      LDI	R17,1
    01D0 DE74      RCALL	_delay_ms
(0145) 		  pd_select = PIND & 0x0f;
    01D1 B360      IN	R22,P10
    01D2 706F      ANDI	R22,0xF
(0146) 		  if(pd_select == 0x0e)//pd0=0,其它为高电平
    01D3 306E      CPI	R22,0xE
    01D4 F411      BNE	0x01D7
(0147) 		    {remote_car();}//运行遥控车程序
    01D5 DF7A      RCALL	_remote_car
    01D6 CFF7      RJMP	0x01CE
(0148) 		  else
(0149) 		    break;
(0150) 	     }
(0151)       }
(0152)     if(pd_select == 0x0d)//pd1=0,其它为高电平
    01D7 306D      CPI	R22,0xD
    01D8 F451      BNE	0x01E3
(0153)       {
    01D9 C008      RJMP	0x01E2
(0154)        while(1)
(0155) 	     {
(0156) 	      delay_ms(500);//消除抖动
    01DA EF04      LDI	R16,0xF4
    01DB E011      LDI	R17,1
    01DC DE68      RCALL	_delay_ms
(0157) 		  pd_select = PIND & 0x0f;
    01DD B360      IN	R22,P10
    01DE 706F      ANDI	R22,0xF
(0158) 		  if(pd_select == 0x0d)//pd1=0,其它为高电平
    01DF 306D      CPI	R22,0xD
    01E0 F411      BNE	0x01E3
(0159) 		    {trace_light();}//运行遥控车程序
    01E1 DFAB      RCALL	_trace_light
    01E2 CFF7      RJMP	0x01DA
(0160) 		  else
(0161) 		    break;
(0162) 	     }
(0163)       }
(0164) 
(0165)     remote_select = PINB & 0x0f;//检测遥控器是否有键按下
    01E3 B346      IN	R20,P16
    01E4 704F      ANDI	R20,0xF
(0166)     if(remote_select == 0x04)// A
    01E5 3044      CPI	R20,4
    01E6 F451      BNE	0x01F1
(0167)       {
    01E7 C008      RJMP	0x01F0
(0168)        while(1)
(0169) 	     {
(0170) 	      delay_ms(500);//消除抖动
    01E8 EF04      LDI	R16,0xF4
    01E9 E011      LDI	R17,1
    01EA DE5A      RCALL	_delay_ms
(0171) 		  remote_select = PINB & 0x0f;
    01EB B346      IN	R20,P16
    01EC 704F      ANDI	R20,0xF
(0172) 		  if(remote_select == 0x04)// A
    01ED 3044      CPI	R20,4
    01EE F411      BNE	0x01F1
(0173) 		    {remote_car();}//运行遥控车程序
    01EF DF60      RCALL	_remote_car
    01F0 CFF7      RJMP	0x01E8
(0174) 		  else
(0175) 		    break;
(0176) 	     }
(0177)       }
(0178)     if(remote_select == 0x02)// B
    01F1 3042      CPI	R20,2
    01F2 F451      BNE	0x01FD
(0179)       {
    01F3 C008      RJMP	0x01FC
(0180)        while(1)
(0181) 	     {
(0182) 	      delay_ms(500);//消除抖动
    01F4 EF04      LDI	R16,0xF4
    01F5 E011      LDI	R17,1
    01F6 DE4E      RCALL	_delay_ms
(0183) 		  remote_select = PINB & 0x0f;
    01F7 B346      IN	R20,P16
    01F8 704F      ANDI	R20,0xF
(0184) 		  if(remote_select == 0x02)// B
    01F9 3042      CPI	R20,2
    01FA F411      BNE	0x01FD
(0185) 		    {trace_light();}//运行追光机器人程序
    01FB DF91      RCALL	_trace_light
    01FC CFF7      RJMP	0x01F4
    01FD CFCB      RJMP	0x01C9
(0186) 		  else
(0187) 		    break;
(0188) 	     }
(0189)       }
(0190)    }  
(0191)  
(0192) }
FILE: <library>
    01FE 9508      RET
push_gset1:
    01FF 935A      ST	R21,-Y
    0200 934A      ST	R20,-Y
    0201 9508      RET
pop_gset1:
    0202 E0E1      LDI	R30,1
pop:
    0203 9149      LD	R20,Y+
    0204 9159      LD	R21,Y+
    0205 FDE0      SBRC	R30,0
    0206 9508      RET
    0207 9169      LD	R22,Y+
    0208 9179      LD	R23,Y+
    0209 FDE1      SBRC	R30,1
    020A 9508      RET
    020B 90A9      LD	R10,Y+
    020C 90B9      LD	R11,Y+
    020D FDE2      SBRC	R30,2
    020E 9508      RET
    020F 90C9      LD	R12,Y+
    0210 90D9      LD	R13,Y+
    0211 FDE3      SBRC	R30,3
    0212 9508      RET
    0213 90E9      LD	R14,Y+
    0214 90F9      LD	R15,Y+
    0215 9508      RET
push_gset2:
    0216 937A      ST	R23,-Y
    0217 936A      ST	R22,-Y
    0218 CFE6      RJMP	push_gset1
push_gset3:
    0219 92BA      ST	R11,-Y
    021A 92AA      ST	R10,-Y
    021B CFFA      RJMP	push_gset2
push_gset4:
    021C 92DA      ST	R13,-Y
    021D 92CA      ST	R12,-Y
    021E CFFA      RJMP	push_gset3
pop_gset2:
    021F E0E2      LDI	R30,2
    0220 CFE2      RJMP	pop
pop_gset3:
    0221 E0E4      LDI	R30,4
    0222 CFE0      RJMP	pop
pop_gset4:
    0223 E0E8      LDI	R30,0x8
    0224 CFDE      RJMP	pop

⌨️ 快捷键说明

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