err.lis
来自「平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案」· LIS 代码 · 共 1,351 行 · 第 1/4 页
LIS
1,351 行
01D8 ; }
01D8 ;
01D8 ; // 欠压检测
01D8 ; // 红灯LED闪烁3下,绿灯熄灭
01D8 ; void deal_err_low_vol(void)
01D8 ; {
01D8 ; led_flicker(1,3);
01D8 ; GREEN_OFF();
01D8 ; }
01D8 ;
01D8 ; // 无停针信号检测
01D8 ; // 红灯LED闪烁4下,绿灯熄灭
01D8 ; void deal_err_no_stop_needle(void)
01D8 ; {
01D8 ; led_flicker(1,4);
01D8 ; GREEN_OFF();
01D8 ; }
01D8 ;
01D8 ; // 过压检测
01D8 ; // 红灯LED闪烁5下,绿灯熄灭
01D8 ; void deal_err_over_vol(void)
01D8 ; {
01D8 ; led_flicker(1,5);
01D8 ; GREEN_OFF();
01D8 ; }
01D8 ;
01D8 ; // 电磁阀驱动回路过流短路故障检测
01D8 ; // 红灯LED长亮,绿灯闪烁1下
01D8 ; void deal_err_solenoid_short(void)
01D8 ; {
01D8 ; RED_ON();
01D8 ; led_flicker(0,1);
01D8 ; }
01D8 ;
01D8 ; // 同步编码器故障检测
01D8 ; // 红灯LED长亮,绿灯闪烁2下
01D8 ; void deal_err_syn_encoder(void)
01D8 ; {
01D8 ; RED_ON();
01D8 ; led_flicker(0,2);
01D8 ; }
01D8 ;
01D8 ; // 电机堵转检测
01D8 ; // 红灯LED长亮,绿灯闪烁3下
01D8 ; void deal_err_motor_block(void)
01D8 ; {
01D8 ; RED_ON();
01D8 ; led_flicker(0,3);
01D8 ; }
01D8 ;
01D8 ; // 电机HALL信号故障检测
01D8 ; // 红灯LED长亮,绿灯闪烁4下
01D8 ; void deal_err_motor_hall(void)
01D8 ; {
01D8 ; RED_ON();
01D8 ; led_flicker(0,4);
01D8 ; }
01D8 ; #endif
01D8 ;
01D8 ; /****************************************************
01D8 ;
01D8 ;
01D8 ; 控制LED 灯闪烁函数
01D8 ; 参数type : 1 表示控制红灯 0 表示控制绿灯
01D8 ; 参数times : 闪烁的次数
01D8 ;
01D8 ; *****************************************************/
01D8 ; void led_flicker(byte type,byte times)
01D8 ; {
01D8 .dbline 314
01D8 ; g_LedTimesT1 = 0;
01D8 2224 clr R2
01DA 20920000 sts _g_LedTimesT1,R2
01DE .dbline 315
01DE ; g_LedTimesT2 = 0;
01DE 20920000 sts _g_LedTimesT2,R2
01E2 .dbline 316
01E2 ; g_LedTimesT3 = 0;
01E2 3324 clr R3
01E4 30920100 sts _g_LedTimesT3+1,R3
01E8 20920000 sts _g_LedTimesT3,R2
01EC .dbline 318
01EC ;
01EC ; g_LedType = type;
01EC 00930000 sts _g_LedType,R16
01F0 .dbline 319
01F0 ; g_LedTimes = times;
01F0 20930000 sts _g_LedTimes,R18
01F4 .dbline 320
01F4 ; g_LedTimesCnt = times;
01F4 20930000 sts _g_LedTimesCnt,R18
01F8 .dbline 321
01F8 ; g_StartLedFlick = 1;
01F8 81E0 ldi R24,1
01FA 80930000 sts _g_StartLedFlick,R24
01FE .dbline -2
01FE L49:
01FE .dbline 0 ; func end
01FE 0895 ret
0200 .dbsym r times 18 c
0200 .dbsym r type 16 c
0200 .dbend
0200 .dbfunc e electromagne_ctrl _electromagne_ctrl fV
0200 ; ctrl -> R18
0200 ; target -> R16
.even
0200 _electromagne_ctrl::
0200 00D0 rcall push_gset1
0202 .dbline -1
0202 .dbline 331
0202 ; }
0202 ;
0202 ;
0202 ;
0202 ;
0202 ; // 电磁铁控制函数
0202 ; // 参数 target : 电磁铁序号1~3
0202 ; // 参数 ctrl : 1 启动 0 停止
0202 ; void electromagne_ctrl(byte target ,byte ctrl)
0202 ; {
0202 .dbline 332
0202 ; switch (target)
0202 402F mov R20,R16
0204 5527 clr R21
0206 4130 cpi R20,1
0208 E0E0 ldi R30,0
020A 5E07 cpc R21,R30
020C 49F0 breq L54
020E 4230 cpi R20,2
0210 E0E0 ldi R30,0
0212 5E07 cpc R21,R30
0214 59F0 breq L57
0216 4330 cpi R20,3
0218 E0E0 ldi R30,0
021A 5E07 cpc R21,R30
021C 69F0 breq L60
021E 11C0 rjmp L52
0220 X0:
0220 .dbline 333
0220 ; {
0220 L54:
0220 .dbline 335
0220 ; case 1:
0220 ; if (ctrl)
0220 2223 tst R18
0222 11F0 breq L55
0224 .dbline 336
0224 ; {
0224 .dbline 337
0224 ; E_MAG1_ON();
0224 2B98 cbi 0x5,3
0226 .dbline 338
0226 ; }
0226 0DC0 rjmp L52
0228 L55:
0228 .dbline 340
0228 ; else
0228 ; {
0228 .dbline 341
0228 ; E_MAG1_OFF();
0228 2B9A sbi 0x5,3
022A .dbline 342
022A ; }
022A .dbline 343
022A ; break;
022A 0BC0 rjmp L52
022C L57:
022C .dbline 346
022C ;
022C ; case 2:
022C ; if (ctrl)
022C 2223 tst R18
022E 11F0 breq L58
0230 .dbline 347
0230 ; {
0230 .dbline 348
0230 ; E_MAG2_ON();
0230 5D98 cbi 0xb,5
0232 .dbline 349
0232 ; }
0232 07C0 rjmp L52
0234 L58:
0234 .dbline 351
0234 ; else
0234 ; {
0234 .dbline 352
0234 ; E_MAG2_OFF();
0234 5D9A sbi 0xb,5
0236 .dbline 353
0236 ; }
0236 .dbline 354
0236 ; break;
0236 05C0 rjmp L52
0238 L60:
0238 .dbline 357
0238 ;
0238 ; case 3:
0238 ; if (ctrl)
0238 2223 tst R18
023A 11F0 breq L61
023C .dbline 358
023C ; {
023C .dbline 359
023C ; E_MAG3_ON();
023C 2A98 cbi 0x5,2
023E .dbline 360
023E ; }
023E 01C0 rjmp L52
0240 L61:
0240 .dbline 362
0240 .dbline 363
0240 2A9A sbi 0x5,2
0242 .dbline 364
0242 .dbline 365
0242 .dbline 368
0242 L52:
0242 .dbline -2
0242 L50:
0242 00D0 rcall pop_gset1
0244 .dbline 0 ; func end
0244 0895 ret
0246 .dbsym r ctrl 18 c
0246 .dbsym r target 16 c
0246 .dbend
0246 .dbfunc e timer1_ovf_isr_ _timer1_ovf_isr_ fV
.even
0246 _timer1_ovf_isr_::
0246 .dbline -1
0246 .dbline 382
0246 ; else
0246 ; {
0246 ; E_MAG3_OFF();
0246 ; }
0246 ; break;
0246 ;
0246 ; default:
0246 ; break;
0246 ; }
0246 ;
0246 ; }
0246 ;
0246 ;
0246 ;
0246 ;
0246 ; // 10 ms 中断 一次
0246 ; // 需要提供低于220V 的信号g_singleLowVol
0246 ; // 高于400V 的信号g_singleOverVol
0246 ; // 电机正在运行标志g_MotorRun
0246 ; // 电机速度小于10 RPM 标志g_LowSpeed
0246 ; void timer1_ovf_isr_(void)
0246 ; {
0246 .dbline 383
0246 ; if (!g_MotorRun)
0246 20900000 lds R2,_g_MotorRun
024A 2220 tst R2
024C 09F0 breq X1
024E 45C0 rjmp L64
0250 X1:
0250 .dbline 384
0250 ; {
0250 .dbline 385
0250 ; if (g_SingleLowVol)
0250 20900000 lds R2,_g_SingleLowVol
0254 2220 tst R2
0256 51F0 breq L66
0258 .dbline 386
0258 ; {
0258 .dbline 387
0258 ; g_Lower220VCnt ++;
0258 80910000 lds R24,_g_Lower220VCnt
025C 90910100 lds R25,_g_Lower220VCnt+1
0260 0196 adiw R24,1
0262 90930100 sts _g_Lower220VCnt+1,R25
0266 80930000 sts _g_Lower220VCnt,R24
026A .dbline 388
026A ; }
026A 09C0 rjmp L67
026C L66:
026C .dbline 390
026C ; else
026C ; {
026C .dbline 391
026C ; g_Over220VCnt ++;
026C 80910000 lds R24,_g_Over220VCnt
0270 90910100 lds R25,_g_Over220VCnt+1
0274 0196 adiw R24,1
0276 90930100 sts _g_Over220VCnt+1,R25
027A 80930000 sts _g_Over220VCnt,R24
027E .dbline 392
027E ; }
027E L67:
027E .dbline 393
027E ; if (g_Lower220VCnt + g_Over220VCnt > 300)
027E 20900000 lds R2,_g_Over220VCnt
0282 30900100 lds R3,_g_Over220VCnt+1
0286 40900000 lds R4,_g_Lower220VCnt
028A 50900100 lds R5,_g_Lower220VCnt+1
028E 420C add R4,R2
0290 531C adc R5,R3
0292 8CE2 ldi R24,300
0294 91E0 ldi R25,1
0296 8415 cp R24,R4
0298 9505 cpc R25,R5
029A C0F4 brsh L68
029C .dbline 394
029C ; {
029C .dbline 395
029C ; if (g_Lower220VCnt > g_Over220VCnt)
029C 40900000 lds R4,_g_Lower220VCnt
02A0 50900100 lds R5,_g_Lower220VCnt+1
02A4 2414 cp R2,R4
02A6 3504 cpc R3,R5
02A8 20F4 brsh L70
02AA .dbline 396
02AA ; {
02AA .dbline 397
02AA ; g_LowVol = 1;
02AA 81E0 ldi R24,1
02AC 80930000 sts _g_LowVol,R24
02B0 .dbline 398
02B0 ; }
02B0 03C0 rjmp L71
02B2 L70:
02B2 .dbline 400
02B2 ; else
02B2 ; {
02B2 .dbline 401
02B2 ; g_LowVol = 0;
02B2 2224 clr R2
02B4 20920000 sts _g_LowVol,R2
02B8 .dbline 402
02B8 ; }
02B8 L71:
02B8 .dbline 403
02B8 ; g_Lower220VCnt = 0;
02B8 2224 clr R2
02BA 3324 clr R3
02BC 30920100 sts _g_Lower220VCnt+1,R3
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?