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 + -
显示快捷键?