📄 easy_icc.lst
字号:
__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 + -