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

📄 motor.lis

📁 avr单片机ATMega16对三相异步电机的智能控制源码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -