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

📄 check.s

📁 avr单片机ATMega16对三相异步电机的智能控制源码
💻 S
字号:
	.module check.c
	.area text(rom, con, rel)
	.dbfile E:\_ING\文档\_STQ\easy-STQ-20080712\check.c
	.dbfunc e check _check fV
	.even
_check::
	xcall push_gset2
	.dbline -1
	.dbline 20
; 
; ///////////////////////////////////////////////////////////////
; /**************************************************************
; 
; 	公司名称:	 扬州恒博科技
; 	模块名	:	 点动型STQ执行机构主控程序 
; 	创建人	:	 章俭文                                         
; 	日期	:	 2008/08/19	                                         
; 	功能描述:   完成对本地旋钮和远程开关量的控制功能                                
; 	其它说明:   编译环境为ICCAVR V6.31A                                            
; 	版本	:	 V1.0
; 
; **************************************************************/
; ///////////////////////////////////////////////////////////////
; 
; #define CHECK_GLOBAL
; #include "check.h"
; 
; void check(void)  		//电机参数检测任务,只上电时执行一次
; {
	.dbline 21
;  limit_direction = 0;
	clr R2
	sts _limit_direction,R2
	.dbline 23
;  
;  if(GetLimit1())		//限位1正常为关限位
	sbic 0x19,4
	rjmp L5
	.dbline 24
;  {
L7:
	.dbline 26
;  LIMIT1:
;   OpenMotor();
	xcall _OpenMotor
	.dbline 27
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L8:
	.dbline 28
L9:
	.dbline 28
;   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 29
;   if(GetLimit1())limit_direction = 0;
	sbic 0x19,4
	rjmp L12
	.dbline 29
	clr R2
	sts _limit_direction,R2
	xjmp L13
L12:
	.dbline 30
;   else limit_direction = 1;
	ldi R24,1
	sts _limit_direction,R24
L13:
	.dbline 32
;   	   				   
;   CloseMotor();		   //复位电机
	xcall _CloseMotor
	.dbline 33
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L14:
	.dbline 34
L15:
	.dbline 34
;   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 35
;   StopMotor();	
	xcall _StopMotor
	.dbline 37
;   
;   return;
	xjmp L4
L5:
	.dbline 41
;  }
;  
;  
;  else if(GetLimit2())        //限位2正常为开限位
	sbic 0x19,3
	rjmp L19
	.dbline 42
;  {
L21:
	.dbline 44
;  LIMIT2:
;   CloseMotor();
	xcall _CloseMotor
	.dbline 45
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L22:
	.dbline 46
L23:
	.dbline 46
;   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 47
;   if(GetLimit2())limit_direction = 0;
	sbic 0x19,3
	rjmp L26
	.dbline 47
	clr R2
	sts _limit_direction,R2
	xjmp L27
L26:
	.dbline 48
;   else limit_direction = 1;
	ldi R24,1
	sts _limit_direction,R24
L27:
	.dbline 50
;   
;   OpenMotor();
	xcall _OpenMotor
	.dbline 51
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L28:
	.dbline 52
L29:
	.dbline 52
;   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 53
;   StopMotor();	
	xcall _StopMotor
	.dbline 55
;    
;   return;
	xjmp L4
L19:
	.dbline 60
;  }
;  
;  
;  else  	   	//在中间位置时尝试使电机动作到限位
;  {
	.dbline 61
;   OpenMotor();
	xcall _OpenMotor
	.dbline 62
;   MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L32:
	.dbline 63
L33:
	.dbline 63
;   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 64
;   if(GetLimit1())goto LIMIT1;
	sbic 0x19,4
	rjmp L37
	.dbline 64
	xjmp L7
L37:
	.dbline 65
;   if(GetLimit2())goto LIMIT2;
	sbic 0x19,3
	rjmp L39
	.dbline 65
	xjmp L21
L39:
	.dbline 67
;   
;   if(!GetLimit())
	sbis 0x19,4
	rjmp L41
	sbis 0x19,3
	rjmp L41
	.dbline 68
;   {
	.dbline 69
;    CloseMotor();
	xcall _CloseMotor
	.dbline 70
;    MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L43:
	.dbline 71
L44:
	.dbline 71
;    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 72
;    if(GetLimit1())goto LIMIT1;
	sbic 0x19,4
	rjmp L48
	.dbline 72
	xjmp L7
L48:
	.dbline 73
;    if(GetLimit2())goto LIMIT2;
	sbic 0x19,3
	rjmp L50
	.dbline 73
	xjmp L21
L50:
	.dbline 75
;    
;    if(!GetLimit())
	sbis 0x19,4
	rjmp L52
	sbis 0x19,3
	rjmp L52
	.dbline 76
;    {
	.dbline 77
;     MotorDelayTime = 0;
	clr R2
	clr R3
	sts _MotorDelayTime+1,R3
	sts _MotorDelayTime,R2
L54:
	.dbline 78
L55:
	.dbline 78
;     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 79
; 	if(GetLimit1())goto LIMIT1;
	sbic 0x19,4
	rjmp L59
	.dbline 79
	xjmp L7
L59:
	.dbline 80
;     if(GetLimit2())goto LIMIT2;
	sbic 0x19,3
	rjmp L61
	.dbline 80
	xjmp L21
L61:
	.dbline 81
;    }
L52:
	.dbline 83
;    
;    StopMotor();
	xcall _StopMotor
	.dbline 84
;    if(GetLimit1())goto LIMIT1;
	sbic 0x19,4
	rjmp L63
	.dbline 84
	xjmp L7
L63:
	.dbline 85
;    if(GetLimit2())goto LIMIT2;
	sbic 0x19,3
	rjmp L65
	.dbline 85
	xjmp L21
L65:
	.dbline 86
;   }
L41:
	.dbline 88
;   
;   if(!GetLimit())	   //失败之后让程序定位在这里
	sbis 0x19,4
	rjmp L67
	sbis 0x19,3
	rjmp L67
	.dbline 89
;   {
	xjmp L70
L69:
	.dbline 91
	.dbline 92
	sbi 0x18,5
	.dbline 93
	sbi 0x18,6
	.dbline 94
L70:
	.dbline 90
;    while(1) 		       
	xjmp L69
X0:
	.dbline 95
;    {
;     ClrLocalLed();
;     ClrRemoteLed();
;    }
;   } 
L67:
	.dbline 96
;  }
	.dbline -2
L4:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\_ING\文档\_STQ\easy-STQ-20080712\check.c
_limit_direction::
	.blkb 1
	.dbfile E:\_ING\文档\_STQ\easy-STQ-20080712/check.h
	.dbsym e limit_direction _limit_direction c

⌨️ 快捷键说明

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