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

📄 motor.s

📁 avr单片机ATMega16对三相异步电机的智能控制源码
💻 S
📖 第 1 页 / 共 2 页
字号:
;   }
L67:
	.dbline 151
L65:
	.dbline -2
L58:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e OpenMotor _OpenMotor fV
	.even
_OpenMotor::
	.dbline -1
	.dbline 156
;   
;  }
; }
; 
; 
; void OpenMotor(void)		  	  //开电机
; {
	.dbline 158
; 
;  if(MotorFlag == CLOSE)		  		  //反向切换延时1S
	lds R24,_MotorFlag
	cpi R24,2
	brne L70
	.dbline 159
;  { 
	.dbline 160
;   MotorFlag = OPEN;
	ldi R24,1
	sts _MotorFlag,R24
	.dbline 162
;   
;   if(GetDirection())
	sbis 0x19,1
	rjmp L72
	.dbline 163
;   {
	.dbline 164
;    ClrMotor1();
	cbi 0x15,1
	.dbline 165
;    SetMotor2(); 
	sbi 0x15,0
	.dbline 166
;   }
	xjmp L73
L72:
	.dbline 168
;   else
;   {
	.dbline 169
;    SetMotor1();
	sbi 0x15,1
	.dbline 170
;    ClrMotor2(); 
	cbi 0x15,0
	.dbline 171
;   }
L73:
	.dbline 173
;   
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
	xjmp L75
L74:
	.dbline 175
;   while(MotorDelayTime<100)
;   {
	.dbline 176
	sbic 0x19,2
	rjmp L80
	sbis 0x19,4
	rjmp L80
	sbic 0x19,3
	rjmp L77
L80:
	.dbline 176
;    if(GetOverheat()||GetLimit())break;
	xjmp L76
L77:
	.dbline 177
L75:
	.dbline 174
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,100
	ldi R30,0
	cpc R25,R30
	brlo L74
L76:
	.dbline 178
;   }    
;  }
L70:
	.dbline 180
;  
;  if(MotorFlag == STOP)
	lds R24,_MotorFlag
	cpi R24,3
	brne L81
	.dbline 181
;  {
	.dbline 182
;   MotorFlag = OPEN;
	ldi R24,1
	sts _MotorFlag,R24
	.dbline 183
;   if(GetDirection())
	sbis 0x19,1
	rjmp L83
	.dbline 184
;   {
	.dbline 185
;    ClrMotor1();
	cbi 0x15,1
	.dbline 186
;    SetMotor2(); 
	sbi 0x15,0
	.dbline 187
;   }
	xjmp L84
L83:
	.dbline 189
;   else
;   {
	.dbline 190
;    SetMotor1();
	sbi 0x15,1
	.dbline 191
;    ClrMotor2(); 
	cbi 0x15,0
	.dbline 192
;   }
L84:
	.dbline 193
L81:
	.dbline -2
L69:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e CloseMotor _CloseMotor fV
	.even
_CloseMotor::
	.dbline -1
	.dbline 198
;  }
;  
; }//开电机
; 
; void CloseMotor()	  			//关电机	
; {
	.dbline 199
;  if(MotorFlag == OPEN)		  			//反向切换延时1S
	lds R24,_MotorFlag
	cpi R24,1
	brne L86
	.dbline 200
;  { 
	.dbline 201
;   MotorFlag = CLOSE;     
	ldi R24,2
	sts _MotorFlag,R24
	.dbline 202
;   if(GetDirection())
	sbis 0x19,1
	rjmp L88
	.dbline 203
;   {
	.dbline 204
;    SetMotor1();
	sbi 0x15,1
	.dbline 205
;    ClrMotor2();
	cbi 0x15,0
	.dbline 206
;   }
	xjmp L89
L88:
	.dbline 208
;   else
;   {
	.dbline 209
;    ClrMotor1();
	cbi 0x15,1
	.dbline 210
;    SetMotor2(); 
	sbi 0x15,0
	.dbline 211
;   }
L89:
	.dbline 213
;   
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
	xjmp L91
L90:
	.dbline 215
;   while(MotorDelayTime<100)
;   {
	.dbline 216
	sbic 0x19,2
	rjmp L96
	sbis 0x19,4
	rjmp L96
	sbic 0x19,3
	rjmp L93
L96:
	.dbline 216
;    if(GetOverheat()||GetLimit())break;
	xjmp L92
L93:
	.dbline 217
L91:
	.dbline 214
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,100
	ldi R30,0
	cpc R25,R30
	brlo L90
L92:
	.dbline 218
;   }      
;  }
L86:
	.dbline 220
;  
;  if (MotorFlag == STOP)
	lds R24,_MotorFlag
	cpi R24,3
	brne L97
	.dbline 221
;  {
	.dbline 222
;   MotorFlag = CLOSE; 
	ldi R24,2
	sts _MotorFlag,R24
	.dbline 223
;   if(GetDirection())
	sbis 0x19,1
	rjmp L99
	.dbline 224
;   {
	.dbline 225
;    SetMotor1();
	sbi 0x15,1
	.dbline 226
;    ClrMotor2();
	cbi 0x15,0
	.dbline 227
;   }
	xjmp L100
L99:
	.dbline 229
;   else
;   {
	.dbline 230
;    ClrMotor1();
	cbi 0x15,1
	.dbline 231
;    SetMotor2(); 
	sbi 0x15,0
	.dbline 232
;   }
L100:
	.dbline 233
L97:
	.dbline -2
L85:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e StopMotor _StopMotor fV
	.even
_StopMotor::
	.dbline -1
	.dbline 238
;  }
;  
; }//关电机
; 
; void StopMotor(void) 		  		//停电机停延时0.5S
; {
	.dbline 239
;  if(MotorFlag == OPEN||MotorFlag == CLOSE)
	lds R24,_MotorFlag
	cpi R24,1
	breq L104
	lds R24,_MotorFlag
	cpi R24,2
	brne L102
L104:
	.dbline 240
;  { 
	.dbline 241
;   MotorFlag = STOP;
	ldi R24,3
	sts _MotorFlag,R24
	.dbline 242
;   ClrMotor1();
	cbi 0x15,1
	.dbline 243
;   ClrMotor2();
	cbi 0x15,0
	.dbline 245
;   
;   MotorDelayTime = 0;			
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
	xjmp L106
L105:
	.dbline 247
;   while(MotorDelayTime<50)
;   {
	.dbline 248
	sbic 0x19,2
	rjmp L111
	sbis 0x19,4
	rjmp L111
	sbic 0x19,3
	rjmp L108
L111:
	.dbline 248
;    if(GetOverheat()||GetLimit())break;
	xjmp L107
L108:
	.dbline 249
L106:
	.dbline 246
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brlo L105
L107:
	.dbline 250
L102:
	.dbline -2
L101:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ProtectMotor _ProtectMotor fV
	.even
_ProtectMotor::
	.dbline -1
	.dbline 254
;   }     
;  } 
; }
; 
; void ProtectMotor()						   //过热、限位信号保护
; {	 									   
	.dbline 255
;  if(GetOverheat()) StopMotor();
	sbis 0x19,2
	rjmp L113
	.dbline 255
	xcall _StopMotor
L113:
	.dbline 257
;  
;  if(GetLimitClose())
	xcall _GetLimitClose
	tst R16
	breq L115
	.dbline 258
;  { 									       //开信号时关限位不停
	.dbline 259
	sbis 0x13,7
	rjmp L120
	sbis 0x10,5
	rjmp L120
	lds R24,_MotorFlag
	cpi R24,1
	brne L117
L120:
	.dbline 259
;   if(GetLocalOpen()||GetRemoteOpen()||MotorFlag == OPEN)return;
	xjmp L112
L117:
	.dbline 260
;   StopMotor();
	xcall _StopMotor
	.dbline 261
;  }
L115:
	.dbline 263
;  
;  if(GetLimitOpen()) 	
	xcall _GetLimitOpen
	tst R16
	breq L121
	.dbline 264
;  {  										   //关信号时开限位不停			   
	.dbline 265
	sbis 0x13,6
	rjmp L126
	sbis 0x10,4
	rjmp L126
	lds R24,_MotorFlag
	cpi R24,2
	brne L123
L126:
	.dbline 265
;   if(GetLocalClose()||GetRemoteClose()||MotorFlag == CLOSE)return;
	xjmp L112
L123:
	.dbline 266
	xcall _StopMotor
	.dbline 267
L121:
	.dbline -2
L112:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e GetLimitClose _GetLimitClose fc
	.even
_GetLimitClose::
	.dbline -1
	.dbline 273
;   StopMotor();
;  }
;  
; }
; 
; 
; uchar GetLimitClose(void)
; {
	.dbline 274
;  if(limit_direction == 1)
	lds R24,_limit_direction
	cpi R24,1
	brne L128
	.dbline 275
;  {
	.dbline 276
;   return GetLimit1();
	sbic 0x19,4
	rjmp L130
	ldi R16,1
	ldi R17,0
	xjmp L131
L130:
	clr R16
	clr R17
L131:
	xjmp L127
L128:
	.dbline 278
;  }
;  else if((limit_direction == 0))
	lds R2,_limit_direction
	tst R2
	brne L132
	.dbline 279
;  {
	.dbline 280
;   return GetLimit2(); 
	sbic 0x19,3
	rjmp L134
	ldi R16,1
	ldi R17,0
	xjmp L135
L134:
	clr R16
	clr R17
L135:
	xjmp L127
L132:
	.dbline 283
;  }
;  else
;  {
	.dbline 284
;   return GetLimit1();
	sbic 0x19,4
	rjmp L136
	ldi R16,1
	ldi R17,0
	xjmp L137
L136:
	clr R16
	clr R17
L137:
	.dbline -2
L127:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e GetLimitOpen _GetLimitOpen fc
	.even
_GetLimitOpen::
	.dbline -1
	.dbline 289
;  }
; }
; 
; uchar GetLimitOpen(void)
; {
	.dbline 290
;  if(limit_direction == 1)
	lds R24,_limit_direction
	cpi R24,1
	brne L139
	.dbline 291
;  {
	.dbline 292
;   return GetLimit2();
	sbic 0x19,3
	rjmp L141
	ldi R16,1
	ldi R17,0
	xjmp L142
L141:
	clr R16
	clr R17
L142:
	xjmp L138
L139:
	.dbline 294
;  }
;  else if((limit_direction == 0))
	lds R2,_limit_direction
	tst R2
	brne L143
	.dbline 295
;  {
	.dbline 296
;   return GetLimit1(); 
	sbic 0x19,4
	rjmp L145
	ldi R16,1
	ldi R17,0
	xjmp L146
L145:
	clr R16
	clr R17
L146:
	xjmp L138
L143:
	.dbline 299
;  }
;  else
;  {
	.dbline 300
;   return GetLimit2();
	sbic 0x19,3
	rjmp L147
	ldi R16,1
	ldi R17,0
	xjmp L148
L147:
	clr R16
	clr R17
L148:
	.dbline -2
L138:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\_文档~1\easy-STQ-20080712\motor.c
_ControlFlag::
	.blkb 1
	.dbfile D:\_文档~1\easy-STQ-20080712/motor.h
	.dbsym e ControlFlag _ControlFlag c
_MotorFlag::
	.blkb 1
	.dbsym e MotorFlag _MotorFlag c
_MotorDelayTime::
	.blkb 2
	.dbfile D:\_文档~1\easy-STQ-20080712/schedule.h
	.dbsym e MotorDelayTime _MotorDelayTime i
_TimeTick::
	.blkb 1
	.dbsym e TimeTick _TimeTick c

⌨️ 快捷键说明

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