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

📄 check.s

📁 avr单片机ATMega16对三相异步电机的智能控制源码
💻 S
字号:
	.module check.c
	.area text(rom, con, rel)
	.dbfile D:\_文档~1\easy-STQ-20080712\check.c
	.dbfunc e check _check fV
	.even
_check::
	xcall push_gset2
	.dbline -1
	.dbline 7
; 
; 
; #define CHECK_GLOBAL
; #include "check.h"
; 
; void check(void)  		//电机参数检测任务,只上电时执行一次
; {
	.dbline 8
;  limit_direction = 0;
	clr R2
	sts _limit_direction,R2
	.dbline 10
;  
;  if(GetLimit1())		//限位1正常为关限位
	sbic 0x19,4
	rjmp L5
	.dbline 11
;  {
L7:
	.dbline 13
;  LIMIT1:
;   OpenMotor();
	xcall _OpenMotor
	.dbline 14
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L8:
	.dbline 15
L9:
	.dbline 15
;   while((MotorDelayTime<200)&&GetLimit());
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,200
	ldi R30,0
	cpc R25,R30
	brsh L11
	sbis 0x19,4
	rjmp L8
	sbis 0x19,3
	rjmp L8
L11:
	.dbline 16
;   if(GetLimit1())limit_direction = 0;
	sbic 0x19,4
	rjmp L12
	.dbline 16
	clr R2
	sts _limit_direction,R2
	xjmp L13
L12:
	.dbline 17
;   else limit_direction = 1;
	ldi R24,1
	sts _limit_direction,R24
L13:
	.dbline 19
;   	   				   
;   CloseMotor();		   //复位电机
	xcall _CloseMotor
	.dbline 20
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L14:
	.dbline 21
L15:
	.dbline 21
;   while((MotorDelayTime<200)&&!GetLimit());
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,200
	ldi R30,0
	cpc R25,R30
	brsh L18
	sbis 0x19,4
	rjmp L18
	sbic 0x19,3
	rjmp L14
L18:
	.dbline 22
;   StopMotor();	
	xcall _StopMotor
	.dbline 24
;   
;   return;
	xjmp L4
L5:
	.dbline 28
;  }
;  
;  
;  else if(GetLimit2())        //限位2正常为开限位
	sbic 0x19,3
	rjmp L19
	.dbline 29
;  {
L21:
	.dbline 31
;  LIMIT2:
;   CloseMotor();
	xcall _CloseMotor
	.dbline 32
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L22:
	.dbline 33
L23:
	.dbline 33
;   while((MotorDelayTime<200)&&GetLimit());
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,200
	ldi R30,0
	cpc R25,R30
	brsh L25
	sbis 0x19,4
	rjmp L22
	sbis 0x19,3
	rjmp L22
L25:
	.dbline 34
;   if(GetLimit2())limit_direction = 0;
	sbic 0x19,3
	rjmp L26
	.dbline 34
	clr R2
	sts _limit_direction,R2
	xjmp L27
L26:
	.dbline 35
;   else limit_direction = 1;
	ldi R24,1
	sts _limit_direction,R24
L27:
	.dbline 37
;   
;   OpenMotor();
	xcall _OpenMotor
	.dbline 38
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L28:
	.dbline 39
L29:
	.dbline 39
;   while((MotorDelayTime<200)&&GetLimit());
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,200
	ldi R30,0
	cpc R25,R30
	brsh L31
	sbis 0x19,4
	rjmp L28
	sbis 0x19,3
	rjmp L28
L31:
	.dbline 40
;   StopMotor();	
	xcall _StopMotor
	.dbline 42
;    
;   return;
	xjmp L4
L19:
	.dbline 47
;  }
;  
;  
;  else  	   	//在中间位置时尝试使电机动作到限位
;  {
	.dbline 48
;   OpenMotor();
	xcall _OpenMotor
	.dbline 49
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L32:
	.dbline 50
L33:
	.dbline 50
;   while((MotorDelayTime<200)&&!GetLimit());
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,200
	ldi R30,0
	cpc R25,R30
	brsh L36
	sbis 0x19,4
	rjmp L36
	sbic 0x19,3
	rjmp L32
L36:
	.dbline 51
;   if(GetLimit1())goto LIMIT1;
	sbic 0x19,4
	rjmp L37
	.dbline 51
	xjmp L7
L37:
	.dbline 52
;   if(GetLimit2())goto LIMIT2;
	sbic 0x19,3
	rjmp L39
	.dbline 52
	xjmp L21
L39:
	.dbline 54
;   
;   if(!GetLimit())
	sbis 0x19,4
	rjmp L41
	sbis 0x19,3
	rjmp L41
	.dbline 55
;   {
	.dbline 56
;    CloseMotor();
	xcall _CloseMotor
	.dbline 57
;    MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L43:
	.dbline 58
L44:
	.dbline 58
;    while((MotorDelayTime<250)&&!GetLimit());
	lds R24,_MotorDelayTime
	lds R25,_MotorDelayTime+1
	cpi R24,250
	ldi R30,0
	cpc R25,R30
	brsh L47
	sbis 0x19,4
	rjmp L47
	sbic 0x19,3
	rjmp L43
L47:
	.dbline 59
;    if(GetLimit1())goto LIMIT1;
	sbic 0x19,4
	rjmp L48
	.dbline 59
	xjmp L7
L48:
	.dbline 60
;    if(GetLimit2())goto LIMIT2;
	sbic 0x19,3
	rjmp L50
	.dbline 60
	xjmp L21
L50:
	.dbline 62
;    
;    if(!GetLimit())
	sbis 0x19,4
	rjmp L52
	sbis 0x19,3
	rjmp L52
	.dbline 63
;    {
	.dbline 64
;     MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L54:
	.dbline 65
L55:
	.dbline 65
;     while((MotorDelayTime<400UL)&&!GetLimit());
	ldi R20,144
	ldi R21,1
	ldi R22,0
	ldi R23,0
	lds R2,_MotorDelayTime
	lds R3,_MotorDelayTime+1
	clr R4
	clr R5
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brsh L58
	sbis 0x19,4
	rjmp L58
	sbic 0x19,3
	rjmp L54
L58:
	.dbline 66
; 	if(GetLimit1())goto LIMIT1;
	sbic 0x19,4
	rjmp L59
	.dbline 66
	xjmp L7
L59:
	.dbline 67
;     if(GetLimit2())goto LIMIT2;
	sbic 0x19,3
	rjmp L61
	.dbline 67
	xjmp L21
L61:
	.dbline 68
;    }
L52:
	.dbline 70
;    
;    StopMotor();
	xcall _StopMotor
	.dbline 71
;    if(GetLimit1())goto LIMIT1;
	sbic 0x19,4
	rjmp L63
	.dbline 71
	xjmp L7
L63:
	.dbline 72
;    if(GetLimit2())goto LIMIT2;
	sbic 0x19,3
	rjmp L65
	.dbline 72
	xjmp L21
L65:
	.dbline 73
;   }
L41:
	.dbline 75
;   
;   if(!GetLimit())	   //失败之后让程序定位在这里
	sbis 0x19,4
	rjmp L67
	sbis 0x19,3
	rjmp L67
	.dbline 76
;   {
	xjmp L70
L69:
	.dbline 78
	.dbline 79
	sbi 0x18,5
	.dbline 80
	sbi 0x18,6
	.dbline 81
L70:
	.dbline 77
;    while(1) 		       
	xjmp L69
X0:
	.dbline 82
;    {
;     ClrLocalLed();
;     ClrRemoteLed();
;    }
;   } 
L67:
	.dbline 83
;  }
	.dbline -2
L4:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\_文档~1\easy-STQ-20080712\check.c
_limit_direction::
	.blkb 1
	.dbfile D:\_文档~1\easy-STQ-20080712/check.h
	.dbsym e limit_direction _limit_direction c

⌨️ 快捷键说明

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