📄 check.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 + -