err.lis

来自「平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案」· LIS 代码 · 共 1,351 行 · 第 1/4 页

LIS
1,351
字号
                        .even
 0108           _det_err_inver_protect::
 0108                   .dbline -1
 0108                   .dbline 119
 0108           ; }
 0108           ; 
 0108           ; // 反转保护检测
 0108           ; // 当电机反转180度机械角,REV_MCU由高电平转到低电平;
 0108           ; byte det_err_inver_protect(void)
 0108           ; {
 0108                   .dbline 120
 0108           ;       if  ( ( REV_MCU() == 0 ) && (g_MotorRun) )
 0108 4C99              sbic 0x9,4
 010A 0BC0              rjmp L26
 010C 20900000          lds R2,_g_MotorRun
 0110 2220              tst R2
 0112 39F0              breq L26
 0114                   .dbline 121
 0114           ;       {
 0114                   .dbline 122
 0114           ;               g_ErrCode01  |= 0x02;
 0114 80910000          lds R24,_g_ErrCode01
 0118 8260              ori R24,2
 011A 80930000          sts _g_ErrCode01,R24
 011E                   .dbline 123
 011E           ;               return 1;
 011E 01E0              ldi R16,1
 0120 01C0              rjmp L25
 0122           L26:
 0122                   .dbline 126
 0122           ;       }
 0122           ;       else
 0122           ;               return 0;
 0122 0027              clr R16
 0124                   .dbline -2
 0124           L25:
 0124                   .dbline 0 ; func end
 0124 0895              ret
 0126                   .dbend
 0126                   .dbfunc e det_err_low_vol _det_err_low_vol fc
                        .even
 0126           _det_err_low_vol::
 0126                   .dbline -1
 0126                   .dbline 132
 0126           ; }
 0126           ; 
 0126           ; // 欠压检测
 0126           ; // 在定时器中断服务函数中检测
 0126           ; byte det_err_low_vol(void)
 0126           ; {
 0126                   .dbline 133
 0126           ;       if (g_LowVol)
 0126 20900000          lds R2,_g_LowVol
 012A 2220              tst R2
 012C 39F0              breq L29
 012E                   .dbline 134
 012E           ;       {
 012E                   .dbline 135
 012E           ;               g_ErrCode01  |= 0x04;
 012E 80910000          lds R24,_g_ErrCode01
 0132 8460              ori R24,4
 0134 80930000          sts _g_ErrCode01,R24
 0138                   .dbline 136
 0138           ;               return 1;
 0138 01E0              ldi R16,1
 013A 01C0              rjmp L28
 013C           L29:
 013C                   .dbline 139
 013C           ;       }
 013C           ;       else
 013C           ;               return 0;
 013C 0027              clr R16
 013E                   .dbline -2
 013E           L28:
 013E                   .dbline 0 ; func end
 013E 0895              ret
 0140                   .dbend
 0140                   .dbfunc e det_err_no_stop_needle _det_err_no_stop_needle fc
                        .even
 0140           _det_err_no_stop_needle::
 0140                   .dbline -1
 0140                   .dbline 147
 0140           ; }
 0140           ; 
 0140           ; // 无停针信号检测
 0140           ; // 需要提供连续45次FG_MCU中断而下停针信号未监测到1次,
 0140           ; // 或者连续45次FG_MCU中断而上停针信号未监测到1次
 0140           ; // 的开关量g_NostopNeedle
 0140           ; byte det_err_no_stop_needle(void)
 0140           ; {
 0140                   .dbline 148
 0140           ;       if (g_NostopNeedle)
 0140 20900000          lds R2,_g_NostopNeedle
 0144 2220              tst R2
 0146 39F0              breq L32
 0148                   .dbline 149
 0148           ;       {
 0148                   .dbline 150
 0148           ;               g_ErrCode01  |= 0x08;
 0148 80910000          lds R24,_g_ErrCode01
 014C 8860              ori R24,8
 014E 80930000          sts _g_ErrCode01,R24
 0152                   .dbline 151
 0152           ;               return 1;
 0152 01E0              ldi R16,1
 0154 01C0              rjmp L31
 0156           L32:
 0156                   .dbline 154
 0156           ;       }
 0156           ;       else
 0156           ;               return 0;
 0156 0027              clr R16
 0158                   .dbline -2
 0158           L31:
 0158                   .dbline 0 ; func end
 0158 0895              ret
 015A                   .dbend
 015A                   .dbfunc e det_err_over_vol _det_err_over_vol fc
                        .even
 015A           _det_err_over_vol::
 015A                   .dbline -1
 015A                   .dbline 160
 015A           ; }
 015A           ; 
 015A           ; // 过压检测
 015A           ; // 在定时器中断服务函数中检测
 015A           ; byte det_err_over_vol(void)
 015A           ; {
 015A                   .dbline 161
 015A           ;       if (g_OverVol)
 015A 20900000          lds R2,_g_OverVol
 015E 2220              tst R2
 0160 39F0              breq L35
 0162                   .dbline 162
 0162           ;       {
 0162                   .dbline 163
 0162           ;               g_ErrCode01  |= 0x10;
 0162 80910000          lds R24,_g_ErrCode01
 0166 8061              ori R24,16
 0168 80930000          sts _g_ErrCode01,R24
 016C                   .dbline 164
 016C           ;               return 1;
 016C 01E0              ldi R16,1
 016E 01C0              rjmp L34
 0170           L35:
 0170                   .dbline 167
 0170           ;       }
 0170           ;       else
 0170           ;               return 0;
 0170 0027              clr R16
 0172                   .dbline -2
 0172           L34:
 0172                   .dbline 0 ; func end
 0172 0895              ret
 0174                   .dbend
 0174                   .dbfunc e det_err_solenoid_short _det_err_solenoid_short fc
                        .even
 0174           _det_err_solenoid_short::
 0174                   .dbline -1
 0174                   .dbline 175
 0174           ; 
 0174           ; }
 0174           ; 
 0174           ; // 电磁阀驱动回路过流短路故障检测
 0174           ; // 需提供电磁阀驱动回路电流大于200mA
 0174           ; // T_Fault 由高电平转到低电平
 0174           ; byte det_err_solenoid_short(void)
 0174           ; {
 0174                   .dbline 176
 0174           ;       if (T_Fault() == 0)
 0174 4999              sbic 0x9,1
 0176 07C0              rjmp L38
 0178                   .dbline 177
 0178           ;       {
 0178                   .dbline 178
 0178           ;               g_ErrCode01  |= 0x20;
 0178 80910000          lds R24,_g_ErrCode01
 017C 8062              ori R24,32
 017E 80930000          sts _g_ErrCode01,R24
 0182                   .dbline 179
 0182           ;               return 1;
 0182 01E0              ldi R16,1
 0184 01C0              rjmp L37
 0186           L38:
 0186                   .dbline 182
 0186           ;       }
 0186           ;       else
 0186           ;               return 0;
 0186 0027              clr R16
 0188                   .dbline -2
 0188           L37:
 0188                   .dbline 0 ; func end
 0188 0895              ret
 018A                   .dbend
 018A                   .dbfunc e det_err_syn_encoder _det_err_syn_encoder fc
                        .even
 018A           _det_err_syn_encoder::
 018A                   .dbline -1
 018A                   .dbline 190
 018A           ; 
 018A           ; }
 018A           ; 
 018A           ; // 同步编码器故障检测
 018A           ; // 需在连续12次FG_MCU中断而同步编码信号未监测到1次
 018A           ; // 置起变量 g_SynEncoderErr
 018A           ; byte det_err_syn_encoder(void)
 018A           ; {
 018A                   .dbline 191
 018A           ;       if (g_SynEncoderErr )
 018A 20900000          lds R2,_g_SynEncoderErr
 018E 2220              tst R2
 0190 39F0              breq L41
 0192                   .dbline 192
 0192           ;       {
 0192                   .dbline 193
 0192           ;               g_ErrCode01  |= 0x40;
 0192 80910000          lds R24,_g_ErrCode01
 0196 8064              ori R24,64
 0198 80930000          sts _g_ErrCode01,R24
 019C                   .dbline 194
 019C           ;               return 1;
 019C 01E0              ldi R16,1
 019E 01C0              rjmp L40
 01A0           L41:
 01A0                   .dbline 197
 01A0           ;       }
 01A0           ;       else
 01A0           ;               return 0;
 01A0 0027              clr R16
 01A2                   .dbline -2
 01A2           L40:
 01A2                   .dbline 0 ; func end
 01A2 0895              ret
 01A4                   .dbend
 01A4                   .dbfunc e det_err_motor_block _det_err_motor_block fc
                        .even
 01A4           _det_err_motor_block::
 01A4                   .dbline -1
 01A4                   .dbline 204
 01A4           ; 
 01A4           ; }
 01A4           ; 
 01A4           ; // 电机堵转检测
 01A4           ; // 在定时器中断服务函数中检测
 01A4           ; byte det_err_motor_block(void)
 01A4           ; {
 01A4                   .dbline 205
 01A4           ;       if (g_MotorBlock)
 01A4 20900000          lds R2,_g_MotorBlock
 01A8 2220              tst R2
 01AA 39F0              breq L44
 01AC                   .dbline 206
 01AC           ;       {
 01AC                   .dbline 207
 01AC           ;               g_ErrCode01  |= 0x80;
 01AC 80910000          lds R24,_g_ErrCode01
 01B0 8068              ori R24,128
 01B2 80930000          sts _g_ErrCode01,R24
 01B6                   .dbline 208
 01B6           ;               return 1;
 01B6 01E0              ldi R16,1
 01B8 01C0              rjmp L43
 01BA           L44:
 01BA                   .dbline 211
 01BA           ;       }
 01BA           ;       else
 01BA           ;               return 0;
 01BA 0027              clr R16
 01BC                   .dbline -2
 01BC           L43:
 01BC                   .dbline 0 ; func end
 01BC 0895              ret
 01BE                   .dbend
 01BE                   .dbfunc e det_err_motor_hall _det_err_motor_hall fc
                        .even
 01BE           _det_err_motor_hall::
 01BE                   .dbline -1
 01BE                   .dbline 219
 01BE           ; 
 01BE           ; }
 01BE           ; 
 01BE           ; // 电机HALL信号故障检测
 01BE           ; // 需在连续10次上停针中断而FG_MCU中断信号未监测到1次
 01BE           ; // 置起 标志g_HallErr
 01BE           ; byte det_err_motor_hall(void)
 01BE           ; {
 01BE                   .dbline 220
 01BE           ;       if (g_HallErr)
 01BE 20900000          lds R2,_g_HallErr
 01C2 2220              tst R2
 01C4 39F0              breq L47
 01C6                   .dbline 221
 01C6           ;       {
 01C6                   .dbline 222
 01C6           ;               g_ErrCode02  |= 0x01;
 01C6 80910000          lds R24,_g_ErrCode02
 01CA 8160              ori R24,1
 01CC 80930000          sts _g_ErrCode02,R24
 01D0                   .dbline 223
 01D0           ;               return 1;
 01D0 01E0              ldi R16,1
 01D2 01C0              rjmp L46
 01D4           L47:
 01D4                   .dbline 226
 01D4           ;       }
 01D4           ;       else
 01D4           ;               return 0;
 01D4 0027              clr R16
 01D6                   .dbline -2
 01D6           L46:
 01D6                   .dbline 0 ; func end
 01D6 0895              ret
 01D8                   .dbend
 01D8                   .dbfunc e led_flicker _led_flicker fV
 01D8           ;          times -> R18
 01D8           ;           type -> R16
                        .even
 01D8           _led_flicker::
 01D8                   .dbline -1
 01D8                   .dbline 313
 01D8           ; 
 01D8           ; }
 01D8           ; 
 01D8           ; #if 0
 01D8           ; // 硬件过流处理
 01D8           ; // 红灯LED长亮,绿灯熄灭
 01D8           ; void deal_err_over_flow(void)
 01D8           ; {
 01D8           ;       RED_ON();
 01D8           ;       GREEN_OFF();
 01D8           ; }
 01D8           ; 
 01D8           ; // 反转保护检测
 01D8           ; // 红灯LED闪烁2下,绿灯熄灭
 01D8           ; void deal_err_inver_protect(void)
 01D8           ; {
 01D8           ;       led_flicker(1,2);
 01D8           ;       GREEN_OFF();

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?