📄 err_debug.lst
字号:
01E5 91800106 LDS R24,g_Over400VCnt
01E7 91900107 LDS R25,g_Over400VCnt+1
01E9 9601 ADIW R24,1
01EA 93900107 STS g_Over400VCnt+1,R25
01EC 93800106 STS g_Over400VCnt,R24
(0436) }
(0437) if (g_Lower400VCnt + g_Over400VCnt > 300)
01EE 90200106 LDS R2,g_Over400VCnt
01F0 90300107 LDS R3,g_Over400VCnt+1
01F2 90400104 LDS R4,g_Lower400VCnt
01F4 90500105 LDS R5,g_Lower400VCnt+1
01F6 0C42 ADD R4,R2
01F7 1C53 ADC R5,R3
01F8 E28C LDI R24,0x2C
01F9 E091 LDI R25,1
01FA 1584 CP R24,R4
01FB 0595 CPC R25,R5
01FC F4C0 BCC 0x0215
(0438) {
(0439) if (g_Lower400VCnt >= g_Over400VCnt)
01FD 90400104 LDS R4,g_Lower400VCnt
01FF 90500105 LDS R5,g_Lower400VCnt+1
0201 1442 CP R4,R2
0202 0453 CPC R5,R3
0203 F020 BCS 0x0208
(0440) {
(0441) g_OverVol = 1;
0204 E081 LDI R24,1
0205 93800119 STS g_OverVol,R24
(0442) }
0207 C003 RJMP 0x020B
(0443) else
(0444) {
(0445) g_OverVol = 0;
0208 2422 CLR R2
0209 92200119 STS g_OverVol,R2
(0446) }
(0447) g_Lower400VCnt = 0;
020B 2422 CLR R2
020C 2433 CLR R3
020D 92300105 STS g_Lower400VCnt+1,R3
020F 92200104 STS g_Lower400VCnt,R2
(0448) g_Over400VCnt = 0;
0211 92300107 STS g_Over400VCnt+1,R3
0213 92200106 STS g_Over400VCnt,R2
(0449) }
(0450)
(0451)
(0452) if (g_StartLedFlick)
0215 9020010E LDS R2,g_StartLedFlick
0217 2022 TST R2
0218 F409 BNE 0x021A
0219 C048 RJMP 0x0262
(0453) {
(0454) if (g_LedTimesCnt)
021A 90200112 LDS R2,g_LedTimesCnt
021C 2022 TST R2
021D F149 BEQ 0x0247
(0455) {
(0456) if (g_LedTimesT1 < LEDFLICKTIME1)
021E 91800110 LDS R24,g_LedTimesT1
0220 3382 CPI R24,0x32
0221 F468 BCC 0x022F
(0457) {
(0458) if (g_LedType)
0222 90200113 LDS R2,g_LedType
0224 2022 TST R2
0225 F011 BEQ 0x0228
(0459) {
(0460) RED_ON();
0226 9842 CBI 0x08,2
(0461) }
0227 C001 RJMP 0x0229
(0462) else
(0463) {
(0464) GREEN_ON();
0228 9843 CBI 0x08,3
(0465) }
(0466) g_LedTimesT1 ++;
0229 91800110 LDS R24,g_LedTimesT1
022B 5F8F SUBI R24,0xFF
022C 93800110 STS g_LedTimesT1,R24
(0467) }
022E C018 RJMP 0x0247
(0468) else
(0469) {
(0470) if (g_LedType)
022F 90200113 LDS R2,g_LedType
0231 2022 TST R2
0232 F011 BEQ 0x0235
(0471) {
(0472) RED_OFF();
0233 9A42 SBI 0x08,2
(0473) }
0234 C001 RJMP 0x0236
(0474) else
(0475) {
(0476) GREEN_OFF();
0235 9A43 SBI 0x08,3
(0477) }
(0478) g_LedTimesT2 ++;
0236 9180010F LDS R24,g_LedTimesT2
0238 5F8F SUBI R24,0xFF
0239 9380010F STS g_LedTimesT2,R24
(0479) if (g_LedTimesT2 == LEDFLICKTIME2)
023B 3382 CPI R24,0x32
023C F451 BNE 0x0247
(0480) {
(0481) g_LedTimesT2 = 0;
023D 2422 CLR R2
023E 9220010F STS g_LedTimesT2,R2
(0482) g_LedTimesT1 = 0;
0240 92200110 STS g_LedTimesT1,R2
(0483) g_LedTimesCnt--;
0242 91800112 LDS R24,g_LedTimesCnt
0244 5081 SUBI R24,1
0245 93800112 STS g_LedTimesCnt,R24
(0484) }
(0485) }
(0486) }
(0487) if (g_LedTimesCnt == 0)
0247 90200112 LDS R2,g_LedTimesCnt
0249 2022 TST R2
024A F4B9 BNE 0x0262
(0488) {
(0489) g_LedTimesT3 ++;
024B 91800100 LDS R24,g_LedTimesT3
024D 91900101 LDS R25,g_LedTimesT3+1
024F 9601 ADIW R24,1
0250 93900101 STS g_LedTimesT3+1,R25
0252 93800100 STS g_LedTimesT3,R24
(0490) if (g_LedTimesT3 == LEDFLICKTIME3)
0254 3F8A CPI R24,0xFA
0255 E0E0 LDI R30,0
0256 079E CPC R25,R30
0257 F451 BNE 0x0262
(0491) {
(0492) g_LedTimesT3 = 0;
0258 2422 CLR R2
0259 2433 CLR R3
025A 92300101 STS g_LedTimesT3+1,R3
025C 92200100 STS g_LedTimesT3,R2
(0493) g_LedTimesCnt = g_LedTimes;
025E 90200111 LDS R2,g_LedTimes
0260 92200112 STS g_LedTimesCnt,R2
(0494) }
(0495) }
(0496) }
0262 9508 RET
FILE: D:\bak\新建文件夹\Err_debug_main.c
(0001) //ICC-AVR application builder : 2005-7-14 20:07:57
(0002) // Target : M88
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom88v.h>
(0006) #include <macros.h>
(0007) #include "Err.h"
(0008)
(0009) void timer1_ovf_isr_(void);
(0010)
(0011) //宏定义:定义常用口线操作等,具体应用前应根据实际情况修改!
(0012) //#define LEDFLICKTIME1 50 // LED 灯闪烁时亮的时间T1 * 10 ms
(0013) //#define LEDFLICKTIME2 50 // LED 灯闪烁时灭的时间T2 * 10 ms
(0014) //#define LEDFLICKTIME3 150 // LED 灯闪烁时两次闪烁间隔时间T3 * 10 ms
(0015)
(0016) byte g_ErrCode01,g_ErrCode02; // 故障代码 每一位指代不同的故障// 初始化为0
(0017) word g_Over220VCnt; // 记录超过220v 的次数// 初始化为0
(0018) word g_Lower220VCnt; // 记录低于220v 的次数// 初始化为0
(0019) word g_Over400VCnt; // 记录超过400v 的次数// 初始化为0
(0020) word g_Lower400VCnt; // 记录低于400v 的次数// 初始化为0
(0021) word g_LowSpeedCnt; // 记录电机速度小于10 RPM 的次数// 初始化为0
(0022) byte g_LedTimesCnt; // LED 灯闪烁次数计数// 初始化为0
(0023) byte g_LedTimes; // LED 灯闪烁次数 // 初始化为0
(0024) byte g_LedTimesT1; // LED 灯闪烁时亮的时间统计 10ms 为单位// 初始化为0
(0025) byte g_LedTimesT2; //LED 灯闪烁时灭的时间统计 10ms 为单位// 初始化为0
(0026) word g_LedTimesT3; //LED 灯闪烁时间隔的时间统计 10ms 为单位// 初始化为0
(0027)
(0028) byte g_MotorRun; // 电机运动状态标志 : 1 表示运行 0 表示停止// 初始化为0
(0029) byte g_LowVol; // 确定检测到欠压标志: 1 表示欠压// 初始化为0
(0030) byte g_singleLowVol; // 单次欠压标志: 1 表示欠压// 初始化为0
(0031) byte g_SynEncoderErr; // 同步编码器故障: 1 表示发生故障// 初始化为0
(0032) byte g_MotorBlock; //电机堵转标志: 1 表示发生电机堵转// 初始化为0
(0033) byte g_LowSpeed; // 电机速度小于10 RPM 标志1 表示速度小于10 RPM // 初始化为0
(0034) byte g_NostopNeedle; // 无停针信号标志 : 1 表示无停针信号// 初始化为0
(0035) byte g_OverVol; // 确定检测到过压标志: 1 表示过压// 初始化为0
(0036) byte g_SingleOverVol; // 单次过压标志: 1 表示过压// 初始化为0
(0037) byte g_HallErr; // 电机HALL信号故障 标志1 表示电机HALL信号故障 // 初始化为0
(0038) byte g_LedType; // LED 灯闪烁类别 1 红灯 0 绿灯 // 初始化为0
(0039) byte g_StartLedFlick; // 启动LED 灯闪烁标志// 初始化为0
(0040) byte g_LedTimes; // LED 灯闪烁次数 1 表示 开始闪烁 // 初始化为0
(0041) byte g_E_Mag_No; // 选择电磁铁的序号1~3 // 初始化为1
(0042) byte g_Err_Det_Disable; // 故障检测禁止1 表示禁止检测故障 // 初始化为0
(0043)
(0044)
(0045) void port_init(void)
(0046) {
(0047) PORTB = 0x00;
_port_init:
0263 2422 CLR R2
0264 B825 OUT 0x05,R2
(0048) DDRB = 0x00;
0265 B824 OUT 0x04,R2
(0049) PORTC = 0x00; //m103 output only
0266 B828 OUT 0x08,R2
(0050) DDRC = 0x00;
0267 B827 OUT 0x07,R2
(0051) PORTD = 0x00;
0268 B82B OUT 0x0B,R2
(0052) DDRD = 0x00;
0269 B82A OUT 0x0A,R2
026A 9508 RET
(0053) }
(0054)
(0055) //TIMER0 initialize - prescale:1024
(0056) // WGM: Normal
(0057) // desired value: 10mSec
(0058) // actual value: 9.984mSec (0.2%)
(0059) void timer0_init(void)
(0060) {
(0061) TCCR0B = 0x00; //stop
_timer0_init:
026B 2422 CLR R2
026C BC25 OUT 0x25,R2
(0062) TCNT0 = 0xB2; //set count
026D EB82 LDI R24,0xB2
026E BD86 OUT 0x26,R24
(0063) TCCR0A = 0x00;
026F BC24 OUT 0x24,R2
(0064) TCCR0B = 0x05; //start timer
0270 E085 LDI R24,5
0271 BD85 OUT 0x25,R24
0272 9508 RET
_timer0_ovf_isr:
0273 D04A RCALL push_lset
(0065) }
(0066)
(0067) #pragma interrupt_handler timer0_ovf_isr:17
(0068) void timer0_ovf_isr(void)
(0069) {
(0070) //TIMER0 has overflowed
(0071) TCNT0 = 0xB2; //set count
0274 EB82 LDI R24,0xB2
0275 BD86 OUT 0x26,R24
(0072)
(0073) timer1_ovf_isr_();
0276 DEE6 RCALL _timer1_ovf_isr_
0277 D05D RCALL pop_lset
0278 9518 RETI
(0074)
(0075)
(0076)
(0077) }
(0078)
(0079) //call this routine to initialize all peripherals
(0080) void init_devices(void)
(0081) {
(0082) //stop errant interrupts until set up
(0083) CLI(); //disable all interrupts
_init_devices:
0279 94F8 BCLR 7
(0084) port_init();
027A DFE8 RCALL _port_init
(0085) timer0_init();
027B DFEF RCALL _timer0_init
(0086)
(0087) MCUCR = 0x00;
027C 2422 CLR R2
027D BE25 OUT 0x35,R2
(0088) EICRA = 0x00; //extended ext ints
027E 92200069 STS 0x69,R2
(0089) EIMSK = 0x00;
0280 BA2D OUT 0x1D,R2
(0090)
(0091) TIMSK0 = 0x01; //timer 0 interrupt sources
0281 E081 LDI R24,1
0282 9380006E STS 0x6E,R24
(0092) TIMSK1 = 0x00; //timer 1 interrupt sources
0284 9220006F STS 0x6F,R2
(0093) TIMSK2 = 0x00; //timer 2 interrupt sources
0286 92200070 STS 0x70,R2
(0094)
(0095) PCMSK0 = 0x00; //pin change mask 0
0288 9220006B STS 0x6B,R2
(0096) PCMSK1 = 0x00; //pin change mask 1
028A 9220006C STS 0x6C,R2
(0097) PCMSK2 = 0x00; //pin change mask 2
028C 9220006D STS 0x6D,R2
(0098) PCICR = 0x00; //pin change enable
028E 92200068 STS 0x68,R2
(0099) PRR = 0x00; //power controller
0290 92200064 STS 0x64,R2
(0100) SEI(); //re-enable interrupts
0292 9478 BSET 7
0293 9508 RET
(0101) //all peripherals are now initialized
(0102) }
(0103)
(0104) //
(0105) void main(void)
(0106) {
(0107) byte i;
(0108)
(0109) i = 1;
_main:
i --> R20
0294 E041 LDI R20,1
(0110) init_devices();
0295 DFE3 RCALL _init_devices
0296 C006 RJMP 0x029D
(0111) //insert your functional code here...
(0112) while (1)
(0113) {
(0114) //det_err();
(0115) if (i)
0297 2344 TST R20
0298 F019 BEQ 0x029C
(0116)
(0117) led_flicker(1,3);
0299 E023 LDI R18,3
029A E001 LDI R16,1
029B DE8A RCALL _led_flicker
(0118)
(0119) i = 0;
FILE: <library>
029C 2744 CLR R20
029D CFF9 RJMP 0x0297
029E 9508 RET
push_gset5:
029F 92FA ST R15,-Y
02A0 92EA ST R14,-Y
push_gset4:
02A1 92DA ST R13,-Y
02A2 92CA ST R12,-Y
push_gset3:
02A3 92BA ST R11,-Y
02A4 92AA ST R10,-Y
push_gset2:
02A5 937A ST R23,-Y
02A6 936A ST R22,-Y
push_gset1:
02A7 935A ST R21,-Y
02A8 934A ST R20,-Y
02A9 9508 RET
pop_gset1:
02AA E0E1 LDI R30,1
pop:
02AB 9149 LD R20,Y+
02AC 9159 LD R21,Y+
02AD FDE0 SBRC R30,0
02AE 9508 RET
02AF 9169 LD R22,Y+
02B0 9179 LD R23,Y+
02B1 FDE1 SBRC R30,1
02B2 9508 RET
02B3 90A9 LD R10,Y+
02B4 90B9 LD R11,Y+
02B5 FDE2 SBRC R30,2
02B6 9508 RET
02B7 90C9 LD R12,Y+
02B8 90D9 LD R13,Y+
02B9 FDE3 SBRC R30,3
02BA 9508 RET
02BB 90E9 LD R14,Y+
02BC 90F9 LD R15,Y+
02BD 9508 RET
push_lset:
02BE 93FA ST R31,-Y
02BF 93EA ST R30,-Y
02C0 93BA ST R27,-Y
02C1 93AA ST R26,-Y
02C2 939A ST R25,-Y
02C3 938A ST R24,-Y
02C4 933A ST R19,-Y
02C5 932A ST R18,-Y
02C6 931A ST R17,-Y
02C7 930A ST R16,-Y
02C8 929A ST R9,-Y
02C9 928A ST R8,-Y
02CA 927A ST R7,-Y
02CB 926A ST R6,-Y
02CC 925A ST R5,-Y
02CD 924A ST R4,-Y
02CE 923A ST R3,-Y
02CF 922A ST R2,-Y
02D0 921A ST R1,-Y
02D1 920A ST R0,-Y
02D2 B60F IN R0,0x3F
02D3 920A ST R0,-Y
02D4 9508 RET
pop_lset:
02D5 9009 LD R0,Y+
02D6 BE0F OUT 0x3F,R0
02D7 9009 LD R0,Y+
02D8 9019 LD R1,Y+
02D9 9029 LD R2,Y+
02DA 9039 LD R3,Y+
02DB 9049 LD R4,Y+
02DC 9059 LD R5,Y+
02DD 9069 LD R6,Y+
02DE 9079 LD R7,Y+
02DF 9089 LD R8,Y+
02E0 9099 LD R9,Y+
02E1 9109 LD R16,Y+
02E2 9119 LD R17,Y+
02E3 9129 LD R18,Y+
02E4 9139 LD R19,Y+
02E5 9189 LD R24,Y+
02E6 9199 LD R25,Y+
02E7 91A9 LD R26,Y+
02E8 91B9 LD R27,Y+
02E9 91E9 LD R30,Y+
02EA 91F9 LD R31,Y+
02EB 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -