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