📄 motor.lis
字号:
.module motor.c
.area data(ram, con, rel)
0000 L5:
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 L6:
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
.area text(rom, con, rel)
0000 .dbfile E:\_ING\文档\_STQ\easy-STQ-20080712\motor.c
0000 .dbfunc e Motor _Motor fV
0000 .dbsym s KeyTemp L6 c
0000 .dbsym s KeyLast L5 c
.even
0000 _Motor::
0000 0E940000 xcall push_gset5
0004 2497 sbiw R28,4
0006 .dbline -1
0006 .dbline 26
0006 ;
0006 ; ///////////////////////////////////////////////////////////////
0006 ; /**************************************************************
0006 ;
0006 ; 公司名称: 扬州恒博科技
0006 ; 模块名 : 点动型STQ执行机构主控程序
0006 ; 创建人 : 章俭文
0006 ; 日期 : 2008/08/19
0006 ; 功能描述: 完成对本地旋钮和远程开关量的控制功能
0006 ; 其它说明: 编译环境为ICCAVR V6.31A
0006 ; 版本 : V1.0
0006 ;
0006 ; **************************************************************/
0006 ; ///////////////////////////////////////////////////////////////
0006 ;
0006 ; #define MOTOR_GLOBAL
0006 ; #include "motor.h"
0006 ;
0006 ; static void MotorLocal(void); //本地控制
0006 ; static void MotorRemote3(void); //远程三线制
0006 ; static void MotorRemote4(void); //远程四线制
0006 ;
0006 ;
0006 ;
0006 ; void Motor(void) //电机任务
0006 ; {
0006 .dbline 30
0006 ; //一个任务周期的信号消抖动
0006 ; static uchar KeyLast = 0, KeyTemp = 0;
0006 ;
0006 ; KeyTemp = (GetLocalClose()|GetLocalOpen()<<1|GetLocal()<<2|GetRemote()<<3|\
0006 9E99 sbic 0x13,6
0008 05C0 rjmp L7
000A 81E0 ldi R24,1
000C 90E0 ldi R25,0
000E 9B83 std y+3,R25
0010 8A83 std y+2,R24
0012 04C0 xjmp L8
0014 L7:
0014 0024 clr R0
0016 1124 clr R1
0018 1B82 std y+3,R1
001A 0A82 std y+2,R0
001C L8:
001C 9F99 sbic 0x13,7
001E 05C0 rjmp L9
0020 81E0 ldi R24,1
0022 90E0 ldi R25,0
0024 9983 std y+1,R25
0026 8883 std y+0,R24
0028 04C0 xjmp L10
002A L9:
002A 0024 clr R0
002C 1124 clr R1
002E 1982 std y+1,R1
0030 0882 std y+0,R0
0032 L10:
0032 CE99 sbic 0x19,6
0034 04C0 rjmp L11
0036 81E0 ldi R24,1
0038 90E0 ldi R25,0
003A 7C01 movw R14,R24
003C 02C0 xjmp L12
003E L11:
003E EE24 clr R14
0040 FF24 clr R15
0042 L12:
0042 CD99 sbic 0x19,5
0044 04C0 rjmp L13
0046 81E0 ldi R24,1
0048 90E0 ldi R25,0
004A 6C01 movw R12,R24
004C 02C0 xjmp L14
004E L13:
004E CC24 clr R12
0050 DD24 clr R13
0052 L14:
0052 8399 sbic 0x10,3
0054 04C0 rjmp L15
0056 81E0 ldi R24,1
0058 90E0 ldi R25,0
005A 5C01 movw R10,R24
005C 02C0 xjmp L16
005E L15:
005E AA24 clr R10
0060 BB24 clr R11
0062 L16:
0062 8499 sbic 0x10,4
0064 03C0 rjmp L17
0066 61E0 ldi R22,1
0068 70E0 ldi R23,0
006A 02C0 xjmp L18
006C L17:
006C 6627 clr R22
006E 7727 clr R23
0070 L18:
0070 8599 sbic 0x10,5
0072 03C0 rjmp L19
0074 41E0 ldi R20,1
0076 50E0 ldi R21,0
0078 02C0 xjmp L20
007A L19:
007A 4427 clr R20
007C 5527 clr R21
007E L20:
007E 2880 ldd R2,y+0
0080 3980 ldd R3,y+1
0082 220C lsl R2
0084 331C rol R3
0086 4A80 ldd R4,y+2
0088 5B80 ldd R5,y+3
008A 4228 or R4,R2
008C 5328 or R5,R3
008E 1701 movw R2,R14
0090 220C lsl R2
0092 331C rol R3
0094 220C lsl R2
0096 331C rol R3
0098 4228 or R4,R2
009A 5328 or R5,R3
009C 1601 movw R2,R12
009E 220C lsl R2
00A0 331C rol R3
00A2 220C lsl R2
00A4 331C rol R3
00A6 220C lsl R2
00A8 331C rol R3
00AA 4228 or R4,R2
00AC 5328 or R5,R3
00AE 1501 movw R2,R10
00B0 220C lsl R2
00B2 331C rol R3
00B4 220C lsl R2
00B6 331C rol R3
00B8 220C lsl R2
00BA 331C rol R3
00BC 220C lsl R2
00BE 331C rol R3
00C0 4228 or R4,R2
00C2 5328 or R5,R3
00C4 25E0 ldi R18,5
00C6 30E0 ldi R19,0
00C8 8B01 movw R16,R22
00CA 0E940000 xcall lsl16
00CE 402A or R4,R16
00D0 512A or R5,R17
00D2 26E0 ldi R18,6
00D4 30E0 ldi R19,0
00D6 8A01 movw R16,R20
00D8 0E940000 xcall lsl16
00DC 402A or R4,R16
00DE 512A or R5,R17
00E0 40920100 sts L6,R4
00E4 0CC0 xjmp L22
00E6 L21:
00E6 .dbline 36
00E6 ; GetRemoteStop()<<4|GetRemoteClose()<<5|GetRemoteOpen()<<6);
00E6 ;
00E6 ; //当有信号时消抖动
00E6 ; while(GetLocalClose()||GetLocalOpen()||GetLocal()||GetRemote()||\
00E6 ; GetRemoteStop()||GetRemoteClose()||GetRemoteOpen())
00E6 ; {
00E6 .dbline 37
00E6 ; if(KeyTemp == KeyLast) break; //如两次电机任务扫描键值相等,跳出并执行后面代码
00E6 20900000 lds R2,L5
00EA 30900100 lds R3,L6
00EE 3214 cp R3,R2
00F0 09F4 brne L24
00F2 .dbline 37
00F2 13C0 xjmp L23
00F4 L24:
00F4 .dbline 39
00F4 .dbline 40
00F4 20900100 lds R2,L6
00F8 20920000 sts L5,R2
00FC .dbline 41
00FC 45C0 xjmp L4
00FE L22:
00FE .dbline 34
00FE 9E9B sbis 0x13,6
0100 F2CF rjmp L21
0102 9F9B sbis 0x13,7
0104 F0CF rjmp L21
0106 CE9B sbis 0x19,6
0108 EECF rjmp L21
010A CD9B sbis 0x19,5
010C ECCF rjmp L21
010E 839B sbis 0x10,3
0110 EACF rjmp L21
0112 849B sbis 0x10,4
0114 E8CF rjmp L21
0116 859B sbis 0x10,5
0118 E6CF rjmp L21
011A L23:
011A .dbline 45
011A ; else
011A ; {
011A ; KeyLast = KeyTemp; //保存上次扫描键值
011A ; return;
011A ; }
011A ; }
011A ;
011A ; if(KeyTemp == 0)StopMotor(); //所有信号丢失时关电机保护
011A 20900100 lds R2,L6
011E 2220 tst R2
0120 09F4 brne L26
0122 .dbline 45
0122 FAD0 xcall _StopMotor
0124 L26:
0124 .dbline 47
0124 ;
0124 ; ProtectMotor(); //电机过热、限位保护
0124 1DD1 xcall _ProtectMotor
0126 .dbline 49
0126 ;
0126 ; if( GetLocal()&&(!GetRemote())) //本地控制
0126 CE99 sbic 0x19,6
0128 0DC0 rjmp L28
012A CD9B sbis 0x19,5
012C 0BC0 rjmp L28
012E .dbline 50
012E ; {
012E .dbline 51
012E ; SetLocalLed();
012E C598 cbi 0x18,5
0130 .dbline 52
0130 ; ClrRemoteLed();
0130 C69A sbi 0x18,6
0132 .dbline 54
0132 ;
0132 ; if(ControlFlag != IN_LOCAL) //控制状态转换
0132 80910000 lds R24,_ControlFlag
0136 8130 cpi R24,1
0138 21F0 breq L30
013A .dbline 55
013A ; {
013A .dbline 56
013A ; StopMotor();
013A EED0 xcall _StopMotor
013C .dbline 57
013C ; ControlFlag = IN_LOCAL;
013C 81E0 ldi R24,1
013E 80930000 sts _ControlFlag,R24
0142 .dbline 58
0142 ; }
0142 L30:
0142 .dbline 60
0142 ;
0142 ; MotorLocal();
0142 26D0 xcall _MotorLocal
0144 .dbline 61
0144 ; }
0144 L28:
0144 .dbline 64
0144 ;
0144 ; //远程三线制
0144 ; if( (!GetLocal()) && GetRemote() && GetRemoteMode() )
0144 CE9B sbis 0x19,6
0146 0FC0 rjmp L32
0148 CD99 sbic 0x19,5
014A 0DC0 rjmp L32
014C C89B sbis 0x19,0
014E 0BC0 rjmp L32
0150 .dbline 65
0150 ; {
0150 .dbline 66
0150 ; ClrLocalLed();
0150 C59A sbi 0x18,5
0152 .dbline 67
0152 ; SetRemoteLed();
0152 C698 cbi 0x18,6
0154 .dbline 69
0154 ;
0154 ; if(ControlFlag != IN_REMOTE3) //控制状态转换
0154 80910000 lds R24,_ControlFlag
0158 8230 cpi R24,2
015A 21F0 breq L34
015C .dbline 70
015C ; {
015C .dbline 71
015C ; StopMotor();
015C DDD0 xcall _StopMotor
015E .dbline 72
015E ; ControlFlag = IN_REMOTE3;
015E 82E0 ldi R24,2
0160 80930000 sts _ControlFlag,R24
0164 .dbline 73
0164 ; }
0164 L34:
0164 .dbline 75
0164 ;
0164 ; MotorRemote3();
0164 32D0 xcall _MotorRemote3
0166 .dbline 76
0166 ; }
0166 L32:
0166 .dbline 79
0166 ;
0166 ; //远程四线制
0166 ; if( (!GetLocal()) && GetRemote() && (!GetRemoteMode()) )
0166 CE9B sbis 0x19,6
0168 0FC0 rjmp L36
016A CD99 sbic 0x19,5
016C 0DC0 rjmp L36
016E C899 sbic 0x19,0
0170 0BC0 rjmp L36
0172 .dbline 80
0172 ; {
0172 .dbline 81
0172 ; ClrLocalLed();
0172 C59A sbi 0x18,5
0174 .dbline 82
0174 ; SetRemoteLed();
0174 C698 cbi 0x18,6
0176 .dbline 84
0176 ;
0176 ; if(ControlFlag != IN_REMOTE4) //控制状态转换
0176 80910000 lds R24,_ControlFlag
017A 8330 cpi R24,3
017C 21F0 breq L38
017E .dbline 85
017E ; {
017E .dbline 86
017E ; StopMotor();
017E CCD0 xcall _StopMotor
0180 .dbline 87
0180 ; ControlFlag = IN_REMOTE4;
0180 83E0 ldi R24,3
0182 80930000 sts _ControlFlag,R24
0186 .dbline 88
0186 ; }
0186 L38:
0186 .dbline 90
0186 3ED0 xcall _MotorRemote4
0188 .dbline 91
0188 L36:
0188 .dbline -2
0188 L4:
0188 2496 adiw R28,4
018A 0E940000 xcall pop_gset5
018E .dbline 0 ; func end
018E 0895 ret
0190 .dbend
0190 .dbfunc s MotorLocal _MotorLocal fV
.even
0190 _MotorLocal:
0190 .dbline -1
0190 .dbline 97
0190 ;
0190 ; MotorRemote4();
0190 ; }
0190 ;
0190 ; }//end of 电机任务
0190 ;
0190 ;
0190 ; static void MotorLocal(void) //本地控制
0190 ; {
0190 .dbline 98
0190 ; if(GetLocalOpen()&&!GetLocalClose()) //本地开
0190 9F99 sbic 0x13,7
0192 0CC0 rjmp L41
0194 9E9B sbis 0x13,6
0196 0AC0 rjmp L41
0198 .dbline 99
0198 ; {
0198 .dbline 100
0198 ; if(!(GetLimitOpen()||GetOverheat())&&(MotorFlag != OPEN))
0198 21D1 xcall _GetLimitOpen
019A 0023 tst R16
019C 39F4 brne L43
019E CA99 sbic 0x19,2
01A0 05C0 rjmp L43
01A2 80910100 lds R24,_MotorFlag
01A6 8130 cpi R24,1
01A8 09F0 breq L43
01AA .dbline 101
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -