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

📄 easy_icc.lst

📁 avr单片机ATMega16对三相异步电机的智能控制源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0149 93800064  STS	ControlFlag,R24
(0058)   }
(0059)      
(0060)   MotorLocal();
    014B D026      RCALL	_MotorLocal
(0061)  }
(0062)  
(0063)   			   	 		  			  //远程三线制
(0064)  if( (!GetLocal()) && GetRemote() && GetRemoteMode() )		
    014C 9BCE      SBIS	0x19,6
    014D C00F      RJMP	0x015D
    014E 99CD      SBIC	0x19,5
    014F C00D      RJMP	0x015D
    0150 9BC8      SBIS	0x19,0
    0151 C00B      RJMP	0x015D
(0065)  {
(0066)   ClrLocalLed();
    0152 9AC5      SBI	0x18,5
(0067)   SetRemoteLed();
    0153 98C6      CBI	0x18,6
(0068)   
(0069)   if(ControlFlag != IN_REMOTE3)		 //控制状态转换
    0154 91800064  LDS	R24,ControlFlag
    0156 3082      CPI	R24,2
    0157 F021      BEQ	0x015C
(0070)   {
(0071)    StopMotor();   
    0158 D0DD      RCALL	_StopMotor
(0072)    ControlFlag = IN_REMOTE3;
    0159 E082      LDI	R24,2
    015A 93800064  STS	ControlFlag,R24
(0073)   }
(0074)   
(0075)   MotorRemote3();
    015C D032      RCALL	_MotorRemote3
(0076)  }
(0077)  
(0078)   				 					 //远程四线制
(0079)  if( (!GetLocal()) && GetRemote() && (!GetRemoteMode()) )		
    015D 9BCE      SBIS	0x19,6
    015E C00F      RJMP	0x016E
    015F 99CD      SBIC	0x19,5
    0160 C00D      RJMP	0x016E
    0161 99C8      SBIC	0x19,0
    0162 C00B      RJMP	0x016E
(0080)  {
(0081)   ClrLocalLed();
    0163 9AC5      SBI	0x18,5
(0082)   SetRemoteLed();
    0164 98C6      CBI	0x18,6
(0083)   
(0084)   if(ControlFlag != IN_REMOTE4)		//控制状态转换
    0165 91800064  LDS	R24,ControlFlag
    0167 3083      CPI	R24,3
    0168 F021      BEQ	0x016D
(0085)   {
(0086)    StopMotor();   
    0169 D0CC      RCALL	_StopMotor
(0087)    ControlFlag = IN_REMOTE4;
    016A E083      LDI	R24,3
    016B 93800064  STS	ControlFlag,R24
(0088)   }
(0089)   
(0090)   MotorRemote4();
    016D D03E      RCALL	_MotorRemote4
(0091)  } 
    016E 9624      ADIW	R28,4
    016F 940E0532  CALL	pop_gset5
    0171 9508      RET
(0092)       
(0093) }//end of 电机任务
(0094) 
(0095) 
(0096) static void MotorLocal(void)             //本地控制
(0097) { 
(0098)  if(GetLocalOpen()&&!GetLocalClose())	 //本地开
_MotorLocal:
    0172 999F      SBIC	0x13,7
    0173 C00C      RJMP	0x0180
    0174 9B9E      SBIS	0x13,6
    0175 C00A      RJMP	0x0180
(0099)  {
(0100)   if(!(GetLimitOpen()||GetOverheat())&&(MotorFlag != OPEN))
    0176 D121      RCALL	_GetLimitOpen
    0177 2300      TST	R16
    0178 F439      BNE	0x0180
    0179 99CA      SBIC	0x19,2
    017A C005      RJMP	0x0180
    017B 91800065  LDS	R24,MotorFlag
    017D 3081      CPI	R24,1
    017E F009      BEQ	0x0180
(0101)   {
(0102)    OpenMotor();   						//开电机
    017F D050      RCALL	_OpenMotor
(0103)   }
(0104)  
(0105)   
(0106)  }
(0107) 
(0108)  if(GetLocalClose()&&!GetLocalOpen())	 //本地关
    0180 999E      SBIC	0x13,6
    0181 C00C      RJMP	0x018E
    0182 9B9F      SBIS	0x13,7
    0183 C00A      RJMP	0x018E
(0109)  {  
(0110)   if(!(GetLimitClose()||GetOverheat())&&(MotorFlag != CLOSE))
    0184 D0F3      RCALL	_GetLimitClose
    0185 2300      TST	R16
    0186 F439      BNE	0x018E
    0187 99CA      SBIC	0x19,2
    0188 C005      RJMP	0x018E
    0189 91800065  LDS	R24,MotorFlag
    018B 3082      CPI	R24,2
    018C F009      BEQ	0x018E
(0111)   {
(0112)    CloseMotor();
    018D D075      RCALL	_CloseMotor
(0113)   }
(0114)  }
    018E 9508      RET
(0115)  
(0116) }//edd of 本地控制
(0117) 
(0118) 
(0119) static void MotorRemote3(void)           //远程三线制
(0120) { 
(0121)  if(GetRemoteOpen()&&!GetRemoteClose())	 //远程三线开
_MotorRemote3:
    018F 9985      SBIC	0x10,5
    0190 C00C      RJMP	0x019D
    0191 9B84      SBIS	0x10,4
    0192 C00A      RJMP	0x019D
(0122)  {  
(0123)   if(!(GetLimitOpen()||GetOverheat())&&(MotorFlag != OPEN))
    0193 D104      RCALL	_GetLimitOpen
    0194 2300      TST	R16
    0195 F439      BNE	0x019D
    0196 99CA      SBIC	0x19,2
    0197 C005      RJMP	0x019D
    0198 91800065  LDS	R24,MotorFlag
    019A 3081      CPI	R24,1
    019B F009      BEQ	0x019D
(0124)   {
(0125)    OpenMotor();   
    019C D033      RCALL	_OpenMotor
(0126)   }
(0127)  }
(0128) 
(0129)  if(GetRemoteClose()&&!GetRemoteOpen())	 //远程三线关
    019D 9984      SBIC	0x10,4
    019E C00C      RJMP	0x01AB
    019F 9B85      SBIS	0x10,5
    01A0 C00A      RJMP	0x01AB
(0130)  {
(0131)   if(!(GetLimitClose()||GetOverheat())&&(MotorFlag != CLOSE))
    01A1 D0D6      RCALL	_GetLimitClose
    01A2 2300      TST	R16
    01A3 F439      BNE	0x01AB
    01A4 99CA      SBIC	0x19,2
    01A5 C005      RJMP	0x01AB
    01A6 91800065  LDS	R24,MotorFlag
    01A8 3082      CPI	R24,2
    01A9 F009      BEQ	0x01AB
(0132)   {
(0133)    CloseMotor();
    01AA D058      RCALL	_CloseMotor
(0134)   }
(0135)   
(0136)  }
    01AB 9508      RET
(0137) }
(0138) 
(0139) 
(0140) 
(0141) 
(0142) static void MotorRemote4(void) 				//远程四线制
(0143) { 
(0144)  if(GetRemoteStop())	        			//远程四线停
_MotorRemote4:
    01AC 9983      SBIC	0x10,3
    01AD C001      RJMP	0x01AF
(0145)  {
(0146)   StopMotor();
    01AE D087      RCALL	_StopMotor
(0147)  }
(0148)   			  								//远程四线开
(0149)  if(GetRemoteOpen()&&!GetRemoteClose()&&!GetRemoteStop())	 
    01AF 9985      SBIC	0x10,5
    01B0 C00E      RJMP	0x01BF
    01B1 9B84      SBIS	0x10,4
    01B2 C00C      RJMP	0x01BF
    01B3 9B83      SBIS	0x10,3
    01B4 C00A      RJMP	0x01BF
(0150)  {  
(0151)   if(!(GetLimitOpen()||GetOverheat())&&(MotorFlag != OPEN))
    01B5 D0E2      RCALL	_GetLimitOpen
    01B6 2300      TST	R16
    01B7 F439      BNE	0x01BF
    01B8 99CA      SBIC	0x19,2
    01B9 C005      RJMP	0x01BF
    01BA 91800065  LDS	R24,MotorFlag
    01BC 3081      CPI	R24,1
    01BD F009      BEQ	0x01BF
(0152)   {
(0153)    OpenMotor();   
    01BE D011      RCALL	_OpenMotor
(0154)   }
(0155)  }
(0156)    				  						   //远程四线关
(0157)  if(GetRemoteClose()&&!GetRemoteOpen()&&!GetRemoteStop())	 
    01BF 9984      SBIC	0x10,4
    01C0 C00E      RJMP	0x01CF
    01C1 9B85      SBIS	0x10,5
    01C2 C00C      RJMP	0x01CF
    01C3 9B83      SBIS	0x10,3
    01C4 C00A      RJMP	0x01CF
(0158)  {  
(0159)   if(!(GetLimitClose()||GetOverheat())&&(MotorFlag != CLOSE))
    01C5 D0B2      RCALL	_GetLimitClose
    01C6 2300      TST	R16
    01C7 F439      BNE	0x01CF
    01C8 99CA      SBIC	0x19,2
    01C9 C005      RJMP	0x01CF
    01CA 91800065  LDS	R24,MotorFlag
    01CC 3082      CPI	R24,2
    01CD F009      BEQ	0x01CF
(0160)   {
(0161)    CloseMotor();
    01CE D034      RCALL	_CloseMotor
(0162)   }
(0163)   
(0164)  }
    01CF 9508      RET
(0165) }
(0166) 
(0167) 
(0168) void OpenMotor(void)		  	  //开电机
(0169) {
(0170) 
(0171)  if(MotorFlag == CLOSE)		  		  //反向切换延时1S
_OpenMotor:
    01D0 91800065  LDS	R24,MotorFlag
    01D2 3082      CPI	R24,2
    01D3 F501      BNE	0x01F4
(0172)  { 
(0173)   MotorFlag = OPEN;
    01D4 E081      LDI	R24,1
    01D5 93800065  STS	MotorFlag,R24
(0174)   
(0175)   if(GetDirection())
    01D7 9BC9      SBIS	0x19,1
    01D8 C003      RJMP	0x01DC
(0176)   {
(0177)    ClrMotor1();
    01D9 98A9      CBI	0x15,1
(0178)    SetMotor2(); 
    01DA 9AA8      SBI	0x15,0
(0179)   }
    01DB C002      RJMP	0x01DE
(0180)   else
(0181)   {
(0182)    SetMotor1();
    01DC 9AA9      SBI	0x15,1
(0183)    ClrMotor2(); 
    01DD 98A8      CBI	0x15,0
(0184)   }
(0185)   
(0186)   MotorDelayTime = 0;
    01DE 2422      CLR	R2
    01DF 2433      CLR	R3
    01E0 92300067  STS	MotorDelayTime+1,R3
    01E2 92200066  STS	MotorDelayTime,R2
    01E4 C007      RJMP	0x01EC
(0187)   while(MotorDelayTime<100)
(0188)   {
(0189)    if(GetOverheat()||GetLimit())break;
    01E5 99CA      SBIC	0x19,2
    01E6 C004      RJMP	0x01EB
    01E7 9BCC      SBIS	0x19,4
    01E8 C002      RJMP	0x01EB
    01E9 99CB      SBIC	0x19,3
    01EA C001      RJMP	0x01EC
    01EB C008      RJMP	0x01F4
    01EC 91800066  LDS	R24,MotorDelayTime
    01EE 91900067  LDS	R25,MotorDelayTime+1
    01F0 3684      CPI	R24,0x64
    01F1 E0E0      LDI	R30,0
    01F2 079E      CPC	R25,R30
    01F3 F388      BCS	0x01E5
(0190)   }    
(0191)  }
(0192)  
(0193)  if(MotorFlag == STOP)
    01F4 91800065  LDS	R24,MotorFlag
    01F6 3083      CPI	R24,3
    01F7 F451      BNE	0x0202
(0194)  {
(0195)   MotorFlag = OPEN;
    01F8 E081      LDI	R24,1
    01F9 93800065  STS	MotorFlag,R24
(0196)   if(GetDirection())
    01FB 9BC9      SBIS	0x19,1
    01FC C003      RJMP	0x0200
(0197)   {
(0198)    ClrMotor1();
    01FD 98A9      CBI	0x15,1
(0199)    SetMotor2(); 
    01FE 9AA8      SBI	0x15,0
(0200)   }
    01FF C002      RJMP	0x0202
(0201)   else
(0202)   {
(0203)    SetMotor1();
    0200 9AA9      SBI	0x15,1
(0204)    ClrMotor2(); 
    0201 98A8      CBI	0x15,0
(0205)   }
(0206)  }
    0202 9508      RET
(0207)  
(0208) }//开电机
(0209) 
(0210) void CloseMotor()	  			//关电机	
(0211) {
(0212)  if(MotorFlag == OPEN)		  			//反向切换延时1S
_CloseMotor:
    0203 91800065  LDS	R24,MotorFlag
    0205 3081      CPI	R24,1
    0206 F501      BNE	0x0227
(0213)  { 
(0214)   MotorFlag = CLOSE;     
    0207 E082      LDI	R24,2
    0208 93800065  STS	MotorFlag,R24
(0215)   if(GetDirection())
    020A 9BC9      SBIS	0x19,1
    020B C003      RJMP	0x020F
(0216)   {
(0217)    SetMotor1();
    020C 9AA9      SBI	0x15,1
(0218)    ClrMotor2();
    020D 98A8      CBI	0x15,0
(0219)   }
    020E C002      RJMP	0x0211
(0220)   else
(0221)   {
(0222)    ClrMotor1();
    020F 98A9      CBI	0x15,1
(0223)    SetMotor2(); 
    0210 9AA8      SBI	0x15,0
(0224)   }
(0225)   
(0226)   MotorDelayTime = 0;
    0211 2422      CLR	R2
    0212 2433      CLR	R3
    0213 92300067  STS	MotorDelayTime+1,R3
    0215 92200066  STS	MotorDelayTime,R2
    0217 C007      RJMP	0x021F
(0227)   while(MotorDelayTime<100)
(0228)   {
(0229)    if(GetOverheat()||GetLimit())break;
    0218 99CA      SBIC	0x19,2
    0219 C004      RJMP	0x021E
    021A 9BCC      SBIS	0x19,4
    021B C002      RJMP	0x021E
    021C 99CB      SBIC	0x19,3
    021D C001      RJMP	0x021F
    021E C008      RJMP	0x0227
    021F 91800066  LDS	R24,MotorDelayTime
    0221 91900067  LDS	R25,MotorDelayTime+1
    0223 3684      CPI	R24,0x64
    0224 E0E0      LDI	R30,0
    0225 079E      CPC	R25,R30
    0226 F388      BCS	0x0218
(0230)   }      
(0231)  }
(0232)  
(0233)  if (MotorFlag == STOP)
    0227 91800065  LDS	R24,MotorFlag
    0229 3083      CPI	R24,3
    022A F451      BNE	0x0235
(0234)  {
(0235)   MotorFlag = CLOSE; 
    022B E082      LDI	R24,2
    022C 93800065  STS	MotorFlag,R24
(0236)   if(GetDirection())
    022E 9BC9      SBIS	0x19,1
    022F C003      RJMP	0x0233
(0237)   {
(0238)    SetMotor1();
    0230 9AA9      SBI	0x15,1
(0239)    ClrMotor2();
    0231 98A8      CBI	0x15,0
(0240)   }
    0232 C002      RJMP	0x0235
(0241)   else
(0242)   {
(0243)    ClrMotor1();
    0233 98A9      CBI	0x15,1
(0244)    SetMotor2(); 
    0234 9AA8      SBI	0x15,0
(0245)   }
(0246)  }
    0235 9508      RET
(0247)  
(0248) }//关电机
(0249) 
(0250) void StopMotor(void) 		  		//停电机停延时0.5S
(0251) {
(0252)  if(MotorFlag == OPEN||MotorFlag == CLOSE)
_StopMotor:
    0236 91800065  LDS	R24,MotorFlag
    0238 3081      CPI	R24,1
    0239 F021      BEQ	0x023E
    023A 91800065  LDS	R24,MotorFlag
    023C 3082      CPI	R24,2
    023D F4D9      BNE	0x0259
(0253)  { 
(0254)   MotorFlag = STOP;
    023E E083      LDI	R24,3
    023F 93800065  STS	MotorFlag,R24
(0255)   ClrMotor1();
    0241 98A9      CBI	0x15,1
(0256)   ClrMotor2();
    0242 98A8      CBI	0x15,0
(0257)   
(0258)   MotorDelayTime = 0;			

⌨️ 快捷键说明

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