📄 err_debug.lst
字号:
0106 9380011F STS g_ErrCode01,R24
(0194) return 1;
0108 E001 LDI R16,1
0109 C001 RJMP 0x010B
(0195) }
(0196) else
(0197) return 0;
010A 2700 CLR R16
010B 9508 RET
(0198)
(0199) }
(0200)
(0201) // 电机堵转检测
(0202) // 在定时器中断服务函数中检测
(0203) byte det_err_motor_block(void)
(0204) {
(0205) if (g_MotorBlock)
_det_err_motor_block:
010C 90200116 LDS R2,g_MotorBlock
010E 2022 TST R2
010F F039 BEQ 0x0117
(0206) {
(0207) g_ErrCode01 |= 0x80;
0110 9180011F LDS R24,g_ErrCode01
0112 6880 ORI R24,0x80
0113 9380011F STS g_ErrCode01,R24
(0208) return 1;
0115 E001 LDI R16,1
0116 C001 RJMP 0x0118
(0209) }
(0210) else
(0211) return 0;
0117 2700 CLR R16
0118 9508 RET
(0212)
(0213) }
(0214)
(0215) // 电机HALL信号故障检测
(0216) // 需在连续10次上停针中断而FG_MCU中断信号未监测到1次
(0217) // 置起 标志g_HallErr
(0218) byte det_err_motor_hall(void)
(0219) {
(0220) if (g_HallErr)
_det_err_motor_hall:
0119 90200114 LDS R2,g_HallErr
011B 2022 TST R2
011C F039 BEQ 0x0124
(0221) {
(0222) g_ErrCode02 |= 0x01;
011D 9180011E LDS R24,g_ErrCode02
011F 6081 ORI R24,1
0120 9380011E STS g_ErrCode02,R24
(0223) return 1;
0122 E001 LDI R16,1
0123 C001 RJMP 0x0125
(0224) }
(0225) else
(0226) return 0;
0124 2700 CLR R16
0125 9508 RET
(0227)
(0228) }
(0229)
(0230) #if 0
(0231) // 硬件过流处理
(0232) // 红灯LED长亮,绿灯熄灭
(0233) void deal_err_over_flow(void)
(0234) {
(0235) RED_ON();
(0236) GREEN_OFF();
(0237) }
(0238)
(0239) // 反转保护检测
(0240) // 红灯LED闪烁2下,绿灯熄灭
(0241) void deal_err_inver_protect(void)
(0242) {
(0243) led_flicker(1,2);
(0244) GREEN_OFF();
(0245) }
(0246)
(0247) // 欠压检测
(0248) // 红灯LED闪烁3下,绿灯熄灭
(0249) void deal_err_low_vol(void)
(0250) {
(0251) led_flicker(1,3);
(0252) GREEN_OFF();
(0253) }
(0254)
(0255) // 无停针信号检测
(0256) // 红灯LED闪烁4下,绿灯熄灭
(0257) void deal_err_no_stop_needle(void)
(0258) {
(0259) led_flicker(1,4);
(0260) GREEN_OFF();
(0261) }
(0262)
(0263) // 过压检测
(0264) // 红灯LED闪烁5下,绿灯熄灭
(0265) void deal_err_over_vol(void)
(0266) {
(0267) led_flicker(1,5);
(0268) GREEN_OFF();
(0269) }
(0270)
(0271) // 电磁阀驱动回路过流短路故障检测
(0272) // 红灯LED长亮,绿灯闪烁1下
(0273) void deal_err_solenoid_short(void)
(0274) {
(0275) RED_ON();
(0276) led_flicker(0,1);
(0277) }
(0278)
(0279) // 同步编码器故障检测
(0280) // 红灯LED长亮,绿灯闪烁2下
(0281) void deal_err_syn_encoder(void)
(0282) {
(0283) RED_ON();
(0284) led_flicker(0,2);
(0285) }
(0286)
(0287) // 电机堵转检测
(0288) // 红灯LED长亮,绿灯闪烁3下
(0289) void deal_err_motor_block(void)
(0290) {
(0291) RED_ON();
(0292) led_flicker(0,3);
(0293) }
(0294)
(0295) // 电机HALL信号故障检测
(0296) // 红灯LED长亮,绿灯闪烁4下
(0297) void deal_err_motor_hall(void)
(0298) {
(0299) RED_ON();
(0300) led_flicker(0,4);
(0301) }
(0302) #endif
(0303)
(0304) /****************************************************
(0305)
(0306)
(0307) 控制LED 灯闪烁函数
(0308) 参数type : 1 表示控制红灯 0 表示控制绿灯
(0309) 参数times : 闪烁的次数
(0310)
(0311) *****************************************************/
(0312) void led_flicker(byte type,byte times)
(0313) {
(0314) g_LedTimesT1 = 0;
_led_flicker:
times --> R18
type --> R16
0126 2422 CLR R2
0127 92200110 STS g_LedTimesT1,R2
(0315) g_LedTimesT2 = 0;
0129 9220010F STS g_LedTimesT2,R2
(0316) g_LedTimesT3 = 0;
012B 2433 CLR R3
012C 92300101 STS g_LedTimesT3+1,R3
012E 92200100 STS g_LedTimesT3,R2
(0317)
(0318) g_LedType = type;
0130 93000113 STS g_LedType,R16
(0319) g_LedTimes = times;
0132 93200111 STS g_LedTimes,R18
(0320) g_LedTimesCnt = times;
0134 93200112 STS g_LedTimesCnt,R18
(0321) g_StartLedFlick = 1;
0136 E081 LDI R24,1
0137 9380010E STS g_StartLedFlick,R24
0139 9508 RET
_electromagne_ctrl:
ctrl --> R18
target --> R16
013A D16C RCALL push_gset1
(0322) }
(0323)
(0324)
(0325)
(0326)
(0327) // 电磁铁控制函数
(0328) // 参数 target : 电磁铁序号1~3
(0329) // 参数 ctrl : 1 启动 0 停止
(0330) void electromagne_ctrl(byte target ,byte ctrl)
(0331) {
(0332) switch (target)
013B 2F40 MOV R20,R16
013C 2755 CLR R21
013D 3041 CPI R20,1
013E E0E0 LDI R30,0
013F 075E CPC R21,R30
0140 F049 BEQ 0x014A
0141 3042 CPI R20,2
0142 E0E0 LDI R30,0
0143 075E CPC R21,R30
0144 F059 BEQ 0x0150
0145 3043 CPI R20,3
0146 E0E0 LDI R30,0
0147 075E CPC R21,R30
0148 F069 BEQ 0x0156
0149 C011 RJMP 0x015B
(0333) {
(0334) case 1:
(0335) if (ctrl)
014A 2322 TST R18
014B F011 BEQ 0x014E
(0336) {
(0337) E_MAG1_ON();
014C 982B CBI 0x05,3
(0338) }
014D C00D RJMP 0x015B
(0339) else
(0340) {
(0341) E_MAG1_OFF();
014E 9A2B SBI 0x05,3
(0342) }
(0343) break;
014F C00B RJMP 0x015B
(0344)
(0345) case 2:
(0346) if (ctrl)
0150 2322 TST R18
0151 F011 BEQ 0x0154
(0347) {
(0348) E_MAG2_ON();
0152 985D CBI 0x0B,5
(0349) }
0153 C007 RJMP 0x015B
(0350) else
(0351) {
(0352) E_MAG2_OFF();
0154 9A5D SBI 0x0B,5
(0353) }
(0354) break;
0155 C005 RJMP 0x015B
(0355)
(0356) case 3:
(0357) if (ctrl)
0156 2322 TST R18
0157 F011 BEQ 0x015A
(0358) {
(0359) E_MAG3_ON();
0158 982A CBI 0x05,2
(0360) }
0159 C001 RJMP 0x015B
(0361) else
(0362) {
(0363) E_MAG3_OFF();
015A 9A2A SBI 0x05,2
(0364) }
(0365) break;
(0366)
(0367) default:
(0368) break;
015B D14E RCALL pop_gset1
015C 9508 RET
(0369) }
(0370)
(0371) }
(0372)
(0373)
(0374)
(0375)
(0376) // 10 ms 中断 一次
(0377) // 需要提供低于220V 的信号g_singleLowVol
(0378) // 电机停机信号g_MotorStop
(0379) // 高于400V 的信号g_singleOverVol
(0380) // 电机正在运行标志g_MotorRun
(0381) // 电机速度小于10 RPM 标志g_LowSpeed
(0382) void timer1_ovf_isr_(void)
(0383) {
(0384) if (!g_MotorRun)
_timer1_ovf_isr_:
015D 9020011D LDS R2,g_MotorRun
015F 2022 TST R2
0160 F009 BEQ 0x0162
0161 C045 RJMP 0x01A7
(0385) {
(0386) if (g_singleLowVol)
0162 9020011C LDS R2,g_singleLowVol
0164 2022 TST R2
0165 F051 BEQ 0x0170
(0387) {
(0388) g_Lower220VCnt ++;
0166 91800108 LDS R24,g_Lower220VCnt
0168 91900109 LDS R25,g_Lower220VCnt+1
016A 9601 ADIW R24,1
016B 93900109 STS g_Lower220VCnt+1,R25
016D 93800108 STS g_Lower220VCnt,R24
(0389) }
016F C009 RJMP 0x0179
(0390) else
(0391) {
(0392) g_Over220VCnt ++;
0170 9180010A LDS R24,g_Over220VCnt
0172 9190010B LDS R25,g_Over220VCnt+1
0174 9601 ADIW R24,1
0175 9390010B STS g_Over220VCnt+1,R25
0177 9380010A STS g_Over220VCnt,R24
(0393) }
(0394) if (g_Lower220VCnt + g_Over220VCnt > 300)
0179 9020010A LDS R2,g_Over220VCnt
017B 9030010B LDS R3,g_Over220VCnt+1
017D 90400108 LDS R4,g_Lower220VCnt
017F 90500109 LDS R5,g_Lower220VCnt+1
0181 0C42 ADD R4,R2
0182 1C53 ADC R5,R3
0183 E28C LDI R24,0x2C
0184 E091 LDI R25,1
0185 1584 CP R24,R4
0186 0595 CPC R25,R5
0187 F4C0 BCC 0x01A0
(0395) {
(0396) if (g_Lower220VCnt > g_Over220VCnt)
0188 90400108 LDS R4,g_Lower220VCnt
018A 90500109 LDS R5,g_Lower220VCnt+1
018C 1424 CP R2,R4
018D 0435 CPC R3,R5
018E F420 BCC 0x0193
(0397) {
(0398) g_LowVol = 1;
018F E081 LDI R24,1
0190 9380011A STS g_LowVol,R24
(0399) }
0192 C003 RJMP 0x0196
(0400) else
(0401) {
(0402) g_LowVol = 0;
0193 2422 CLR R2
0194 9220011A STS g_LowVol,R2
(0403) }
(0404) g_Lower220VCnt = 0;
0196 2422 CLR R2
0197 2433 CLR R3
0198 92300109 STS g_Lower220VCnt+1,R3
019A 92200108 STS g_Lower220VCnt,R2
(0405) g_Over220VCnt = 0;
019C 9230010B STS g_Over220VCnt+1,R3
019E 9220010A STS g_Over220VCnt,R2
(0406) }
(0407) g_LowSpeedCnt = 0;
01A0 2422 CLR R2
01A1 2433 CLR R3
01A2 92300103 STS g_LowSpeedCnt+1,R3
01A4 92200102 STS g_LowSpeedCnt,R2
(0408) }
01A6 C030 RJMP 0x01D7
(0409) else
(0410) {
(0411) g_Lower220VCnt = 0;
01A7 2422 CLR R2
01A8 2433 CLR R3
01A9 92300109 STS g_Lower220VCnt+1,R3
01AB 92200108 STS g_Lower220VCnt,R2
(0412) g_Over220VCnt = 0;
01AD 9230010B STS g_Over220VCnt+1,R3
01AF 9220010A STS g_Over220VCnt,R2
(0413) if (g_LowSpeed)
01B1 90200115 LDS R2,g_LowSpeed
01B3 2022 TST R2
01B4 F051 BEQ 0x01BF
(0414) {
(0415) g_LowSpeedCnt ++;
01B5 91800102 LDS R24,g_LowSpeedCnt
01B7 91900103 LDS R25,g_LowSpeedCnt+1
01B9 9601 ADIW R24,1
01BA 93900103 STS g_LowSpeedCnt+1,R25
01BC 93800102 STS g_LowSpeedCnt,R24
(0416) }
01BE C006 RJMP 0x01C5
(0417) else
(0418) {
(0419) g_LowSpeedCnt = 0;
01BF 2422 CLR R2
01C0 2433 CLR R3
01C1 92300103 STS g_LowSpeedCnt+1,R3
01C3 92200102 STS g_LowSpeedCnt,R2
(0420) }
(0421) if (g_LowSpeedCnt > 200)
01C5 EC88 LDI R24,0xC8
01C6 E090 LDI R25,0
01C7 90200102 LDS R2,g_LowSpeedCnt
01C9 90300103 LDS R3,g_LowSpeedCnt+1
01CB 1582 CP R24,R2
01CC 0593 CPC R25,R3
01CD F448 BCC 0x01D7
(0422) {
(0423) g_MotorBlock = 1;
01CE E081 LDI R24,1
01CF 93800116 STS g_MotorBlock,R24
(0424) g_LowSpeedCnt = 0;
01D1 2422 CLR R2
01D2 2433 CLR R3
01D3 92300103 STS g_LowSpeedCnt+1,R3
01D5 92200102 STS g_LowSpeedCnt,R2
(0425) }
(0426) }
(0427)
(0428)
(0429) if (g_SingleOverVol)
01D7 90200118 LDS R2,g_SingleOverVol
01D9 2022 TST R2
01DA F051 BEQ 0x01E5
(0430) {
(0431) g_Lower400VCnt ++;
01DB 91800104 LDS R24,g_Lower400VCnt
01DD 91900105 LDS R25,g_Lower400VCnt+1
01DF 9601 ADIW R24,1
01E0 93900105 STS g_Lower400VCnt+1,R25
01E2 93800104 STS g_Lower400VCnt,R24
(0432) }
01E4 C009 RJMP 0x01EE
(0433) else
(0434) {
(0435) g_Over400VCnt ++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -