⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 err_debug.lst

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    001A EFCF      LDI	R28,0xFF
    001B E0D4      LDI	R29,4
    001C BFCD      OUT	0x3D,R28
    001D BFDE      OUT	0x3E,R29
    001E 52C0      SUBI	R28,0x20
    001F 40D0      SBCI	R29,0
    0020 EA0A      LDI	R16,0xAA
    0021 8308      STD	Y+0,R16
    0022 2400      CLR	R0
    0023 E0E0      LDI	R30,0
    0024 E0F1      LDI	R31,1
    0025 E011      LDI	R17,1
    0026 32E0      CPI	R30,0x20
    0027 07F1      CPC	R31,R17
    0028 F011      BEQ	0x002B
    0029 9201      ST	R0,Z+
    002A CFFB      RJMP	0x0026
    002B 8300      STD	Z+0,R16
    002C E3E4      LDI	R30,0x34
    002D E0F0      LDI	R31,0
    002E E0A0      LDI	R26,0
    002F E0B1      LDI	R27,1
    0030 E010      LDI	R17,0
    0031 33E4      CPI	R30,0x34
    0032 07F1      CPC	R31,R17
    0033 F021      BEQ	0x0038
    0034 95C8      LPM
    0035 9631      ADIW	R30,1
    0036 920D      ST	R0,X+
    0037 CFF9      RJMP	0x0031
    0038 D25B      RCALL	_main
_exit:
    0039 CFFF      RJMP	_exit
_det_err:
  sign                 --> R20
    003A D26C      RCALL	push_gset1
FILE: D:\bak\新建文件夹\函数库\ERR\Err.c
(0001) /*****************************************************************
(0002)  *  文件名:      		Err.c
(0003)  *  版本号:      
(0004)  *  创作日期:    	2005.7.13
(0005)  *  作者:        		Zhoujie
(0006)  *  功能说明:    	故障检测与故障处理
(0007)  *  其它说明:    
(0008)  
(0009)  *****************************************************************/
(0010)  
(0011) 
(0012) /*****************************************************************
(0013) 
(0014)  *   修改日期:     
(0015)  *   修改人:
(0016)  *   修改原因:
(0017) 
(0018) *******************************************************************/
(0019) 
(0020) #include "Err.h"
(0021) 
(0022) // 检测以及处理故障函数
(0023) // 依次检测是否出现各种故障
(0024) // 按照检测到的先后顺序
(0025) // 控制LED 灯显示最先检测到的故障
(0026) // 随后检测到的故障将相应的错误位置起来
(0027) // 怎样清除故障显示 ?
(0028) void det_err(void)
(0029) {
(0030) 	byte sign;
(0031) 
(0032) 	if (g_Err_Det_Disable)
    003B 9020010C  LDS	R2,g_Err_Det_Disable
    003D 2022      TST	R2
    003E F009      BEQ	0x0040
(0033) 		return;
    003F C071      RJMP	0x00B1
(0034) 	
(0035) 	sign = 1;
    0040 E041      LDI	R20,1
(0036) 	
(0037) 	if (det_err_over_flow())
    0041 D071      RCALL	_det_err_over_flow
    0042 2300      TST	R16
    0043 F031      BEQ	0x004A
(0038) 	{
(0039) 		RED_ON();
    0044 9842      CBI	0x08,2
(0040) 		GREEN_OFF();
    0045 9A43      SBI	0x08,3
(0041) 		sign = 0;
    0046 2744      CLR	R20
(0042) 		g_Err_Det_Disable = 1;
    0047 E081      LDI	R24,1
    0048 9380010C  STS	g_Err_Det_Disable,R24
(0043) 	}
(0044) 	if ( (det_err_inver_protect()) && sign )
    004A D073      RCALL	_det_err_inver_protect
    004B 2300      TST	R16
    004C F051      BEQ	0x0057
    004D 2344      TST	R20
    004E F041      BEQ	0x0057
(0045) 	{
(0046) 		led_flicker(1,2);
    004F E022      LDI	R18,2
    0050 E001      LDI	R16,1
    0051 D0D4      RCALL	_led_flicker
(0047) 		GREEN_OFF();
    0052 9A43      SBI	0x08,3
(0048) 		sign = 0;
    0053 2744      CLR	R20
(0049) 		g_Err_Det_Disable = 1;
    0054 E081      LDI	R24,1
    0055 9380010C  STS	g_Err_Det_Disable,R24
(0050) 	}
(0051) 	if ((det_err_low_vol()) && sign )
    0057 D075      RCALL	_det_err_low_vol
    0058 2300      TST	R16
    0059 F051      BEQ	0x0064
    005A 2344      TST	R20
    005B F041      BEQ	0x0064
(0052) 	{
(0053) 		led_flicker(1,3);
    005C E023      LDI	R18,3
    005D E001      LDI	R16,1
    005E D0C7      RCALL	_led_flicker
(0054) 		GREEN_OFF();
    005F 9A43      SBI	0x08,3
(0055) 		sign = 0;
    0060 2744      CLR	R20
(0056) 		g_Err_Det_Disable = 1;
    0061 E081      LDI	R24,1
    0062 9380010C  STS	g_Err_Det_Disable,R24
(0057) 	}
(0058) 	if ((	det_err_no_stop_needle()) && sign)
    0064 D075      RCALL	_det_err_no_stop_needle
    0065 2300      TST	R16
    0066 F051      BEQ	0x0071
    0067 2344      TST	R20
    0068 F041      BEQ	0x0071
(0059) 	{
(0060) 		led_flicker(1,4);
    0069 E024      LDI	R18,4
    006A E001      LDI	R16,1
    006B D0BA      RCALL	_led_flicker
(0061) 		GREEN_OFF();
    006C 9A43      SBI	0x08,3
(0062) 		sign = 0;
    006D 2744      CLR	R20
(0063) 		g_Err_Det_Disable = 1;
    006E E081      LDI	R24,1
    006F 9380010C  STS	g_Err_Det_Disable,R24
(0064) 	}
(0065) 	if ((det_err_over_vol()) && sign )
    0071 D075      RCALL	_det_err_over_vol
    0072 2300      TST	R16
    0073 F051      BEQ	0x007E
    0074 2344      TST	R20
    0075 F041      BEQ	0x007E
(0066) 	{
(0067) 		led_flicker(1,5);
    0076 E025      LDI	R18,5
    0077 E001      LDI	R16,1
    0078 D0AD      RCALL	_led_flicker
(0068) 		GREEN_OFF();
    0079 9A43      SBI	0x08,3
(0069) 		sign = 0;
    007A 2744      CLR	R20
(0070) 		g_Err_Det_Disable = 1;
    007B E081      LDI	R24,1
    007C 9380010C  STS	g_Err_Det_Disable,R24
(0071) 	}
(0072) 	if ((det_err_solenoid_short()) && sign )
    007E D075      RCALL	_det_err_solenoid_short
    007F 2300      TST	R16
    0080 F051      BEQ	0x008B
    0081 2344      TST	R20
    0082 F041      BEQ	0x008B
(0073) 	{
(0074) 		RED_ON();
    0083 9842      CBI	0x08,2
(0075) 		led_flicker(0,1);
    0084 E021      LDI	R18,1
    0085 2700      CLR	R16
    0086 D09F      RCALL	_led_flicker
(0076) 		sign = 0;
    0087 2744      CLR	R20
(0077) 		g_Err_Det_Disable = 1;
    0088 E081      LDI	R24,1
    0089 9380010C  STS	g_Err_Det_Disable,R24
(0078) 	}
(0079) 	if ((det_err_syn_encoder()) && sign )
    008B D073      RCALL	_det_err_syn_encoder
    008C 2300      TST	R16
    008D F051      BEQ	0x0098
    008E 2344      TST	R20
    008F F041      BEQ	0x0098
(0080) 	{
(0081) 		RED_ON();
    0090 9842      CBI	0x08,2
(0082) 		led_flicker(0,2);
    0091 E022      LDI	R18,2
    0092 2700      CLR	R16
    0093 D092      RCALL	_led_flicker
(0083) 		sign = 0;
    0094 2744      CLR	R20
(0084) 		g_Err_Det_Disable = 1;
    0095 E081      LDI	R24,1
    0096 9380010C  STS	g_Err_Det_Disable,R24
(0085) 	}
(0086) 	if ((det_err_motor_block()) && sign )
    0098 D073      RCALL	_det_err_motor_block
    0099 2300      TST	R16
    009A F051      BEQ	0x00A5
    009B 2344      TST	R20
    009C F041      BEQ	0x00A5
(0087) 	{
(0088) 		RED_ON();
    009D 9842      CBI	0x08,2
(0089) 		led_flicker(0,3);
    009E E023      LDI	R18,3
    009F 2700      CLR	R16
    00A0 D085      RCALL	_led_flicker
(0090) 		sign = 0;
    00A1 2744      CLR	R20
(0091) 		g_Err_Det_Disable = 1;
    00A2 E081      LDI	R24,1
    00A3 9380010C  STS	g_Err_Det_Disable,R24
(0092) 	}
(0093) 	if (det_err_motor_hall() && sign)
    00A5 D073      RCALL	_det_err_motor_hall
    00A6 2300      TST	R16
    00A7 F049      BEQ	0x00B1
    00A8 2344      TST	R20
    00A9 F039      BEQ	0x00B1
(0094) 	{
(0095) 		RED_ON();
    00AA 9842      CBI	0x08,2
(0096) 		led_flicker(0,4);
    00AB E024      LDI	R18,4
    00AC 2700      CLR	R16
    00AD D078      RCALL	_led_flicker
(0097) 		g_Err_Det_Disable = 1;
    00AE E081      LDI	R24,1
    00AF 9380010C  STS	g_Err_Det_Disable,R24
(0098) 	}
    00B1 D1F8      RCALL	pop_gset1
    00B2 9508      RET
(0099) 	
(0100) }
(0101) 
(0102) 
(0103) // 硬件过流检测
(0104) // 需要A/D 模块控制当母线电流大于20A,FO_MCU由低电平转到高电平
(0105) byte det_err_over_flow(void)
(0106) {
(0107) 	if ( FO_MCU() != 0 )
_det_err_over_flow:
    00B3 9B31      SBIS	0x06,1
    00B4 C007      RJMP	0x00BC
(0108) 	{
(0109) 		g_ErrCode01  |= 0x01;
    00B5 9180011F  LDS	R24,g_ErrCode01
    00B7 6081      ORI	R24,1
    00B8 9380011F  STS	g_ErrCode01,R24
(0110) 		return 1;
    00BA E001      LDI	R16,1
    00BB C001      RJMP	0x00BD
(0111) 	}
(0112) 	else
(0113) 		return 0;
    00BC 2700      CLR	R16
    00BD 9508      RET
(0114) }
(0115) 
(0116) // 反转保护检测
(0117) // 当电机反转180度机械角,REV_MCU由高电平转到低电平;
(0118) byte det_err_inver_protect(void)
(0119) {
(0120) 	if  ( ( REV_MCU() == 0 ) && (g_MotorRun) )
_det_err_inver_protect:
    00BE 994C      SBIC	0x09,4
    00BF C00B      RJMP	0x00CB
    00C0 9020011D  LDS	R2,g_MotorRun
    00C2 2022      TST	R2
    00C3 F039      BEQ	0x00CB
(0121) 	{
(0122) 		g_ErrCode01  |= 0x02;
    00C4 9180011F  LDS	R24,g_ErrCode01
    00C6 6082      ORI	R24,2
    00C7 9380011F  STS	g_ErrCode01,R24
(0123) 		return 1;
    00C9 E001      LDI	R16,1
    00CA C001      RJMP	0x00CC
(0124) 	}
(0125) 	else
(0126) 		return 0;
    00CB 2700      CLR	R16
    00CC 9508      RET
(0127) }
(0128) 
(0129) // 欠压检测
(0130) // 在定时器中断服务函数中检测
(0131) byte det_err_low_vol(void)
(0132) {
(0133) 	if (g_LowVol)
_det_err_low_vol:
    00CD 9020011A  LDS	R2,g_LowVol
    00CF 2022      TST	R2
    00D0 F039      BEQ	0x00D8
(0134) 	{
(0135) 		g_ErrCode01  |= 0x04;
    00D1 9180011F  LDS	R24,g_ErrCode01
    00D3 6084      ORI	R24,4
    00D4 9380011F  STS	g_ErrCode01,R24
(0136) 		return 1;
    00D6 E001      LDI	R16,1
    00D7 C001      RJMP	0x00D9
(0137) 	}
(0138) 	else
(0139) 		return 0;
    00D8 2700      CLR	R16
    00D9 9508      RET
(0140) }
(0141) 
(0142) // 无停针信号检测
(0143) // 需要提供连续45次FG_MCU中断而下停针信号未监测到1次,
(0144) // 或者连续45次FG_MCU中断而上停针信号未监测到1次
(0145) // 的开关量g_NostopNeedle
(0146) byte det_err_no_stop_needle(void)
(0147) {
(0148) 	if (g_NostopNeedle)
_det_err_no_stop_needle:
    00DA 9020011B  LDS	R2,g_NostopNeedle
    00DC 2022      TST	R2
    00DD F039      BEQ	0x00E5
(0149) 	{
(0150) 		g_ErrCode01  |= 0x08;
    00DE 9180011F  LDS	R24,g_ErrCode01
    00E0 6088      ORI	R24,0x8
    00E1 9380011F  STS	g_ErrCode01,R24
(0151) 		return 1;
    00E3 E001      LDI	R16,1
    00E4 C001      RJMP	0x00E6
(0152) 	}
(0153) 	else
(0154) 		return 0;
    00E5 2700      CLR	R16
    00E6 9508      RET
(0155) }
(0156) 
(0157) // 过压检测
(0158) // 在定时器中断服务函数中检测
(0159) byte det_err_over_vol(void)
(0160) {
(0161) 	if (g_OverVol)
_det_err_over_vol:
    00E7 90200119  LDS	R2,g_OverVol
    00E9 2022      TST	R2
    00EA F039      BEQ	0x00F2
(0162) 	{
(0163) 		g_ErrCode01  |= 0x10;
    00EB 9180011F  LDS	R24,g_ErrCode01
    00ED 6180      ORI	R24,0x10
    00EE 9380011F  STS	g_ErrCode01,R24
(0164) 		return 1;
    00F0 E001      LDI	R16,1
    00F1 C001      RJMP	0x00F3
(0165) 	}
(0166) 	else
(0167) 		return 0;
    00F2 2700      CLR	R16
    00F3 9508      RET
(0168) 
(0169) }
(0170) 
(0171) // 电磁阀驱动回路过流短路故障检测
(0172) // 需提供电磁阀驱动回路电流大于200mA
(0173) // T_Fault 由高电平转到低电平
(0174) byte det_err_solenoid_short(void)
(0175) {
(0176) 	if (T_Fault() == 0)
_det_err_solenoid_short:
    00F4 9949      SBIC	0x09,1
    00F5 C007      RJMP	0x00FD
(0177) 	{
(0178) 		g_ErrCode01  |= 0x20;
    00F6 9180011F  LDS	R24,g_ErrCode01
    00F8 6280      ORI	R24,0x20
    00F9 9380011F  STS	g_ErrCode01,R24
(0179) 		return 1;
    00FB E001      LDI	R16,1
    00FC C001      RJMP	0x00FE
(0180) 	}
(0181) 	else
(0182) 		return 0;
    00FD 2700      CLR	R16
    00FE 9508      RET
(0183) 
(0184) }
(0185) 
(0186) // 同步编码器故障检测
(0187) // 需在连续12次FG_MCU中断而同步编码信号未监测到1次
(0188) // 置起变量 g_SynEncoderErr
(0189) byte det_err_syn_encoder(void)
(0190) {
(0191) 	if (g_SynEncoderErr )
_det_err_syn_encoder:
    00FF 90200117  LDS	R2,g_SynEncoderErr
    0101 2022      TST	R2
    0102 F039      BEQ	0x010A
(0192) 	{
(0193) 		g_ErrCode01  |= 0x40;
    0103 9180011F  LDS	R24,g_ErrCode01
    0105 6480      ORI	R24,0x40

⌨️ 快捷键说明

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