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

📄 easy_icc.lst

📁 avr单片机ATMega16对三相异步电机的智能控制源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    002F E5CF      LDI	R28,0x5F
    0030 E0D4      LDI	R29,4
    0031 BFCD      OUT	0x3D,R28
    0032 BFDE      OUT	0x3E,R29
    0033 51C0      SUBI	R28,0x10
    0034 40D0      SBCI	R29,0
    0035 EA0A      LDI	R16,0xAA
    0036 8308      STD	Y+0,R16
    0037 2400      CLR	R0
    0038 E6E4      LDI	R30,0x64
    0039 E0F0      LDI	R31,0
    003A E010      LDI	R17,0
    003B 37EF      CPI	R30,0x7F
    003C 07F1      CPC	R31,R17
    003D F011      BEQ	0x0040
    003E 9201      ST	R0,Z+
    003F CFFB      RJMP	0x003B
    0040 8300      STD	Z+0,R16
    0041 E5EA      LDI	R30,0x5A
    0042 E0F0      LDI	R31,0
    0043 E6A0      LDI	R26,0x60
    0044 E0B0      LDI	R27,0
    0045 E010      LDI	R17,0
    0046 35EE      CPI	R30,0x5E
    0047 07F1      CPC	R31,R17
    0048 F021      BEQ	0x004D
    0049 95C8      LPM
    004A 9631      ADIW	R30,1
    004B 920D      ST	R0,X+
    004C CFF9      RJMP	0x0046
    004D 940E0050  CALL	_main
_exit:
    004F CFFF      RJMP	_exit
_main:
    0050 9722      SBIW	R28,2
FILE: E:\_ING\文档\_STQ\easy-STQ-20080712\main.c
(0001) 
(0002) ///////////////////////////////////////////////////////////////
(0003) /**************************************************************
(0004) 
(0005) 	公司名称:	 扬州恒博科技
(0006) 	模块名	:	 点动型STQ执行机构主控程序 
(0007) 	创建人	:	 章俭文                                         
(0008) 	日期	:	 2008/08/19	                                         
(0009) 	功能描述:   完成对本地旋钮和远程开关量的控制功能                                
(0010) 	其它说明:   编译环境为ICCAVR V6.31A                                            
(0011) 	版本	:	 V1.0
(0012) 
(0013) **************************************************************/
(0014) ///////////////////////////////////////////////////////////////
(0015) 
(0016) #define MAIN_GLOBAL
(0017) #include "main.h"
(0018) 
(0019) 
(0020) static void InitPort(void);
(0021) static void InitDevices(void);
(0022) 
(0023) 
(0024) void main()
(0025) {
(0026) 
(0027)  InitDevices();		   		  //设备初始化
    0051 D026      RCALL	_InitDevices
(0028)      				   
(0029)  SCH_Add_Task(Motor, 900, 1);   //电机任务,10ms循环一次
    0052 E081      LDI	R24,1
    0053 E090      LDI	R25,0
    0054 8399      STD	Y+1,R25
    0055 8388      STD	Y+0,R24
    0056 E824      LDI	R18,0x84
    0057 E033      LDI	R19,3
    0058 E508      LDI	R16,0x58
    0059 E010      LDI	R17,0
    005A 940E02F4  CALL	_SCH_Add_Task
(0030)  
(0031)  SCH_Add_Task(Alarm,901,10);	  //LED告警指示,100ms循环一次
    005C E08A      LDI	R24,0xA
    005D E090      LDI	R25,0
    005E 8399      STD	Y+1,R25
    005F 8388      STD	Y+0,R24
    0060 E825      LDI	R18,0x85
    0061 E033      LDI	R19,3
    0062 E506      LDI	R16,0x56
    0063 E010      LDI	R17,0
    0064 940E02F4  CALL	_SCH_Add_Task
(0032) 
(0033)  SCH_Add_Task(check,1,0);	  //电机参数检测任务,只上电时执行一次
    0066 2422      CLR	R2
    0067 2433      CLR	R3
    0068 8239      STD	Y+1,R3
    0069 8228      STD	Y+0,R2
    006A E021      LDI	R18,1
    006B E030      LDI	R19,0
    006C E504      LDI	R16,0x54
    006D E010      LDI	R17,0
    006E 940E02F4  CALL	_SCH_Add_Task
(0034)  
(0035)  SCH_Start();   
    0070 940E0414  CALL	_SCH_Start
    0072 C002      RJMP	0x0075
(0036) 
(0037)  while(1)
(0038)  { 
(0039)   SCH_Dispatch_Tasks();
    0073 940E02B8  CALL	_SCH_Dispatch_Tasks
    0075 CFFD      RJMP	0x0073
    0076 9622      ADIW	R28,2
    0077 9508      RET
(0040)  }
(0041)  
(0042) }
(0043) 
(0044) 
(0045) static void InitDevices(void)
(0046) {
(0047)  CLI();	   			   //关中断
_InitDevices:
    0078 94F8      BCLR	7
(0048)  
(0049)  InitPort();		   //IO端口初始化
    0079 D015      RCALL	_InitPort
(0050)   
(0051)  StopMotor();		   //设置电机关
    007A 940E0236  CALL	_StopMotor
(0052)  
(0053)  
(0054)  MotorFlag = STOP;	   //状态标识
    007C E083      LDI	R24,3
    007D 93800065  STS	MotorFlag,R24
(0055)  ControlFlag = IN_LOCAL;
    007F E081      LDI	R24,1
    0080 93800064  STS	ControlFlag,R24
(0056)  limit_direction = 1;
    0082 9380007E  STS	limit_direction,R24
(0057)  
(0058)  SetLocalLed();		   //本地LED指示
    0084 98C5      CBI	0x18,5
(0059)  ClrRemoteLed(); 
    0085 9AC6      SBI	0x18,6
(0060)  
(0061)  MCUCR = 0x00;
    0086 2422      CLR	R2
    0087 BE25      OUT	0x35,R2
(0062)  GICR  = 0x00;
    0088 BE2B      OUT	0x3B,R2
(0063)  TIMSK = 0x04; 		   //timer interrupt sources
    0089 E084      LDI	R24,4
    008A BF89      OUT	0x39,R24
(0064)  
(0065)  InitTimer1();		   //调度定时器
    008B 940E03CB  CALL	_InitTimer1
(0066)  
(0067)  OutWdServer();       //喂外部看门狗
    008D D00E      RCALL	_OutWdServer
    008E 9508      RET
(0068) }
(0069) 
(0070) 
(0071) static void InitPort(void)
(0072)  {  
(0073)     PORTB =(1<<LOCAL_LED)|(1<<REMOTE_LED)|(1<<OUT_WD);
_InitPort:
    008F E780      LDI	R24,0x70
    0090 BB88      OUT	0x18,R24
(0074)     DDRB=((1<<LOCAL_LED)|(1<<REMOTE_LED)|(1<<OUT_WD)); 
    0091 BB87      OUT	0x17,R24
(0075) 		
(0076) 	PORTA =0x00;
    0092 2422      CLR	R2
    0093 BA2B      OUT	0x1B,R2
(0077)     DDRA=0x00;
    0094 BA2A      OUT	0x1A,R2
(0078) 	
(0079)     PORTC =0x00;
    0095 BA25      OUT	0x15,R2
(0080)     DDRC =(0<<LOCAL_CLOSE)|(0<<LOCAL_OPEN)|(1<<MOTOR_1)|(1<<MOTOR_2);
    0096 E083      LDI	R24,3
    0097 BB84      OUT	0x14,R24
(0081) 	    
(0082) 	PORTD =0x00;
    0098 BA22      OUT	0x12,R2
(0083)     DDRD = ((0<<REMOTE_STOP)|(0<<REMOTE_CLOSE)|(0<<REMOTE_OPEN))|((1<<S1|(1<<S2))); 
    0099 EC80      LDI	R24,0xC0
    009A BB81      OUT	0x11,R24
    009B 9508      RET
(0084) 	
(0085)  }
(0086)  
(0087)  
(0088) void OutWdServer(void)    //喂外部看门狗
(0089) {
(0090)  	static uchar WdFlag=1;
(0091) 	
(0092)     if (WdFlag)
_OutWdServer:
    009C 90200060  LDS	R2,WdFlag
    009E 2022      TST	R2
    009F F029      BEQ	0x00A5
(0093) 	{
(0094) 	    SetOutWd();
    00A0 9AC4      SBI	0x18,4
(0095) 	    WdFlag=0;
    00A1 2422      CLR	R2
    00A2 92200060  STS	WdFlag,R2
(0096)     }
    00A4 C004      RJMP	0x00A9
(0097)     else
(0098)     {
(0099) 	    ClrOutWd();
    00A5 98C4      CBI	0x18,4
(0100) 	    WdFlag=1;
    00A6 E081      LDI	R24,1
    00A7 93800060  STS	WdFlag,R24
(0101)     }
    00A9 9508      RET
_Motor:
    00AA 940E0535  CALL	push_gset5
    00AC 9724      SBIW	R28,4
FILE: E:\_ING\文档\_STQ\easy-STQ-20080712\motor.c
(0001) 
(0002) ///////////////////////////////////////////////////////////////
(0003) /**************************************************************
(0004) 
(0005) 	公司名称:	 扬州恒博科技
(0006) 	模块名	:	 点动型STQ执行机构主控程序 
(0007) 	创建人	:	 章俭文                                         
(0008) 	日期	:	 2008/08/19	                                         
(0009) 	功能描述:   完成对本地旋钮和远程开关量的控制功能                                
(0010) 	其它说明:   编译环境为ICCAVR V6.31A                                            
(0011) 	版本	:	 V1.0
(0012) 
(0013) **************************************************************/
(0014) ///////////////////////////////////////////////////////////////
(0015) 
(0016) #define MOTOR_GLOBAL
(0017) #include "motor.h" 
(0018)   
(0019) static void MotorLocal(void);		  //本地控制
(0020) static void MotorRemote3(void);	  	  //远程三线制
(0021) static void MotorRemote4(void);	  	  //远程四线制	
(0022)   
(0023) 
(0024) 
(0025) void Motor(void)					  //电机任务
(0026) {
(0027)  	 								  //一个任务周期的信号消抖动
(0028)  static uchar KeyLast = 0, KeyTemp = 0;			  
(0029)  
(0030)  KeyTemp = (GetLocalClose()|GetLocalOpen()<<1|GetLocal()<<2|GetRemote()<<3|\
    00AD 999E      SBIC	0x13,6
    00AE C005      RJMP	0x00B4
    00AF E081      LDI	R24,1
    00B0 E090      LDI	R25,0
    00B1 839B      STD	Y+3,R25
    00B2 838A      STD	Y+2,R24
    00B3 C004      RJMP	0x00B8
    00B4 2400      CLR	R0
    00B5 2411      CLR	R1
    00B6 821B      STD	Y+3,R1
    00B7 820A      STD	Y+2,R0
    00B8 999F      SBIC	0x13,7
    00B9 C005      RJMP	0x00BF
    00BA E081      LDI	R24,1
    00BB E090      LDI	R25,0
    00BC 8399      STD	Y+1,R25
    00BD 8388      STD	Y+0,R24
    00BE C004      RJMP	0x00C3
    00BF 2400      CLR	R0
    00C0 2411      CLR	R1
    00C1 8219      STD	Y+1,R1
    00C2 8208      STD	Y+0,R0
    00C3 99CE      SBIC	0x19,6
    00C4 C004      RJMP	0x00C9
    00C5 E081      LDI	R24,1
    00C6 E090      LDI	R25,0
    00C7 017C      MOVW	R14,R24
    00C8 C002      RJMP	0x00CB
    00C9 24EE      CLR	R14
    00CA 24FF      CLR	R15
    00CB 99CD      SBIC	0x19,5
    00CC C004      RJMP	0x00D1
    00CD E081      LDI	R24,1
    00CE E090      LDI	R25,0
    00CF 016C      MOVW	R12,R24
    00D0 C002      RJMP	0x00D3
    00D1 24CC      CLR	R12
    00D2 24DD      CLR	R13
    00D3 9983      SBIC	0x10,3
    00D4 C004      RJMP	0x00D9
    00D5 E081      LDI	R24,1
    00D6 E090      LDI	R25,0
    00D7 015C      MOVW	R10,R24
    00D8 C002      RJMP	0x00DB
    00D9 24AA      CLR	R10
    00DA 24BB      CLR	R11
    00DB 9984      SBIC	0x10,4
    00DC C003      RJMP	0x00E0
    00DD E061      LDI	R22,1
    00DE E070      LDI	R23,0
    00DF C002      RJMP	0x00E2
    00E0 2766      CLR	R22
    00E1 2777      CLR	R23
    00E2 9985      SBIC	0x10,5
    00E3 C003      RJMP	0x00E7
    00E4 E041      LDI	R20,1
    00E5 E050      LDI	R21,0
    00E6 C002      RJMP	0x00E9
    00E7 2744      CLR	R20
    00E8 2755      CLR	R21
    00E9 8028      LDD	R2,Y+0
    00EA 8039      LDD	R3,Y+1
    00EB 0C22      LSL	R2
    00EC 1C33      ROL	R3
    00ED 804A      LDD	R4,Y+2
    00EE 805B      LDD	R5,Y+3
    00EF 2842      OR	R4,R2
    00F0 2853      OR	R5,R3
    00F1 0117      MOVW	R2,R14
    00F2 0C22      LSL	R2
    00F3 1C33      ROL	R3
    00F4 0C22      LSL	R2
    00F5 1C33      ROL	R3
    00F6 2842      OR	R4,R2
    00F7 2853      OR	R5,R3
    00F8 0116      MOVW	R2,R12
    00F9 0C22      LSL	R2
    00FA 1C33      ROL	R3
    00FB 0C22      LSL	R2
    00FC 1C33      ROL	R3
    00FD 0C22      LSL	R2
    00FE 1C33      ROL	R3
    00FF 2842      OR	R4,R2
    0100 2853      OR	R5,R3
    0101 0115      MOVW	R2,R10
    0102 0C22      LSL	R2
    0103 1C33      ROL	R3
    0104 0C22      LSL	R2
    0105 1C33      ROL	R3
    0106 0C22      LSL	R2
    0107 1C33      ROL	R3
    0108 0C22      LSL	R2
    0109 1C33      ROL	R3
    010A 2842      OR	R4,R2
    010B 2853      OR	R5,R3
    010C E025      LDI	R18,5
    010D E030      LDI	R19,0
    010E 018B      MOVW	R16,R22
    010F 940E058B  CALL	lsl16
    0111 2A40      OR	R4,R16
    0112 2A51      OR	R5,R17
    0113 E026      LDI	R18,6
    0114 E030      LDI	R19,0
    0115 018A      MOVW	R16,R20
    0116 940E058B  CALL	lsl16
    0118 2A40      OR	R4,R16
    0119 2A51      OR	R5,R17
    011A 92400062  STS	KeyTemp,R4
    011C C00C      RJMP	0x0129
(0031)                          GetRemoteStop()<<4|GetRemoteClose()<<5|GetRemoteOpen()<<6);
(0032) 						 
(0033) 						 			  //当有信号时消抖动											
(0034)  while(GetLocalClose()||GetLocalOpen()||GetLocal()||GetRemote()||\
(0035)                          GetRemoteStop()||GetRemoteClose()||GetRemoteOpen())
(0036)  { 
(0037)   if(KeyTemp == KeyLast) break;		  //如两次电机任务扫描键值相等,跳出并执行后面代码										  
    011D 90200061  LDS	R2,KeyLast
    011F 90300062  LDS	R3,KeyTemp
    0121 1432      CP	R3,R2
    0122 F409      BNE	0x0124
    0123 C013      RJMP	0x0137
(0038)   else 
(0039)   {
(0040)    KeyLast = KeyTemp;				  //保存上次扫描键值
    0124 90200062  LDS	R2,KeyTemp
    0126 92200061  STS	KeyLast,R2
(0041)    return; 	 		 	 		
    0128 C045      RJMP	0x016E
    0129 9B9E      SBIS	0x13,6
    012A CFF2      RJMP	0x011D
    012B 9B9F      SBIS	0x13,7
    012C CFF0      RJMP	0x011D
    012D 9BCE      SBIS	0x19,6
    012E CFEE      RJMP	0x011D
    012F 9BCD      SBIS	0x19,5
    0130 CFEC      RJMP	0x011D
    0131 9B83      SBIS	0x10,3
    0132 CFEA      RJMP	0x011D
    0133 9B84      SBIS	0x10,4
    0134 CFE8      RJMP	0x011D
    0135 9B85      SBIS	0x10,5
    0136 CFE6      RJMP	0x011D
(0042)   }
(0043)  } 
(0044)  
(0045)  if(KeyTemp == 0)StopMotor();     	  //所有信号丢失时关电机保护	
    0137 90200062  LDS	R2,KeyTemp
    0139 2022      TST	R2
    013A F409      BNE	0x013C
    013B D0FA      RCALL	_StopMotor
(0046)     
(0047)  ProtectMotor();  						  //电机过热、限位保护
    013C D11D      RCALL	_ProtectMotor
(0048)   
(0049)  if( GetLocal()&&(!GetRemote()))	  //本地控制
    013D 99CE      SBIC	0x19,6
    013E C00D      RJMP	0x014C
    013F 9BCD      SBIS	0x19,5
    0140 C00B      RJMP	0x014C
(0050)  {
(0051)   SetLocalLed();
    0141 98C5      CBI	0x18,5
(0052)   ClrRemoteLed();
    0142 9AC6      SBI	0x18,6
(0053)  
(0054)   if(ControlFlag != IN_LOCAL)		  //控制状态转换
    0143 91800064  LDS	R24,ControlFlag
    0145 3081      CPI	R24,1
    0146 F021      BEQ	0x014B
(0055)   {
(0056)    StopMotor();   
    0147 D0EE      RCALL	_StopMotor
(0057)    ControlFlag = IN_LOCAL;
    0148 E081      LDI	R24,1

⌨️ 快捷键说明

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