err.lis
来自「平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案」· LIS 代码 · 共 1,351 行 · 第 1/4 页
LIS
1,351 行
.module Err.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\ERR\Err.c
0000 .dbfunc e det_err _det_err fV
0000 ; sign -> R20
.even
0000 _det_err::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 29
0002 ; /*****************************************************************
0002 ; * 文件名: Err.c
0002 ; * 版本号:
0002 ; * 创作日期: 2005.7.13
0002 ; * 作者: Zhoujie
0002 ; * 功能说明: 故障检测与故障处理
0002 ; * 其它说明:
0002 ;
0002 ; *****************************************************************/
0002 ;
0002 ;
0002 ; /*****************************************************************
0002 ;
0002 ; * 修改日期:
0002 ; * 修改人:
0002 ; * 修改原因:
0002 ;
0002 ; *******************************************************************/
0002 ;
0002 ; #include "Err.h"
0002 ;
0002 ; // 检测以及处理故障函数
0002 ; // 依次检测是否出现各种故障
0002 ; // 按照检测到的先后顺序
0002 ; // 控制LED 灯显示最先检测到的故障
0002 ; // 随后检测到的故障将相应的错误位置起来
0002 ; // 怎样清除故障显示 ?
0002 ; void det_err(void)
0002 ; {
0002 .dbline 32
0002 ; byte sign;
0002 ;
0002 ; if (g_Err_Det_Disable)
0002 20900000 lds R2,_g_Err_Det_Disable
0006 2220 tst R2
0008 09F0 breq L2
000A .dbline 33
000A ; return;
000A 71C0 rjmp L1
000C L2:
000C .dbline 35
000C ;
000C ; sign = 1;
000C 41E0 ldi R20,1
000E .dbline 37
000E ;
000E ; if (det_err_over_flow())
000E 71D0 rcall _det_err_over_flow
0010 0023 tst R16
0012 31F0 breq L4
0014 .dbline 38
0014 ; {
0014 .dbline 39
0014 ; RED_ON();
0014 4298 cbi 0x8,2
0016 .dbline 40
0016 ; GREEN_OFF();
0016 439A sbi 0x8,3
0018 .dbline 41
0018 ; sign = 0;
0018 4427 clr R20
001A .dbline 42
001A ; g_Err_Det_Disable = 1;
001A 81E0 ldi R24,1
001C 80930000 sts _g_Err_Det_Disable,R24
0020 .dbline 43
0020 ; }
0020 L4:
0020 .dbline 44
0020 ; if ( (det_err_inver_protect()) && sign )
0020 73D0 rcall _det_err_inver_protect
0022 0023 tst R16
0024 51F0 breq L6
0026 4423 tst R20
0028 41F0 breq L6
002A .dbline 45
002A ; {
002A .dbline 46
002A ; led_flicker(1,2);
002A 22E0 ldi R18,2
002C 01E0 ldi R16,1
002E D4D0 rcall _led_flicker
0030 .dbline 47
0030 ; GREEN_OFF();
0030 439A sbi 0x8,3
0032 .dbline 48
0032 ; sign = 0;
0032 4427 clr R20
0034 .dbline 49
0034 ; g_Err_Det_Disable = 1;
0034 81E0 ldi R24,1
0036 80930000 sts _g_Err_Det_Disable,R24
003A .dbline 50
003A ; }
003A L6:
003A .dbline 51
003A ; if ((det_err_low_vol()) && sign )
003A 75D0 rcall _det_err_low_vol
003C 0023 tst R16
003E 51F0 breq L8
0040 4423 tst R20
0042 41F0 breq L8
0044 .dbline 52
0044 ; {
0044 .dbline 53
0044 ; led_flicker(1,3);
0044 23E0 ldi R18,3
0046 01E0 ldi R16,1
0048 C7D0 rcall _led_flicker
004A .dbline 54
004A ; GREEN_OFF();
004A 439A sbi 0x8,3
004C .dbline 55
004C ; sign = 0;
004C 4427 clr R20
004E .dbline 56
004E ; g_Err_Det_Disable = 1;
004E 81E0 ldi R24,1
0050 80930000 sts _g_Err_Det_Disable,R24
0054 .dbline 57
0054 ; }
0054 L8:
0054 .dbline 58
0054 ; if (( det_err_no_stop_needle()) && sign)
0054 75D0 rcall _det_err_no_stop_needle
0056 0023 tst R16
0058 51F0 breq L10
005A 4423 tst R20
005C 41F0 breq L10
005E .dbline 59
005E ; {
005E .dbline 60
005E ; led_flicker(1,4);
005E 24E0 ldi R18,4
0060 01E0 ldi R16,1
0062 BAD0 rcall _led_flicker
0064 .dbline 61
0064 ; GREEN_OFF();
0064 439A sbi 0x8,3
0066 .dbline 62
0066 ; sign = 0;
0066 4427 clr R20
0068 .dbline 63
0068 ; g_Err_Det_Disable = 1;
0068 81E0 ldi R24,1
006A 80930000 sts _g_Err_Det_Disable,R24
006E .dbline 64
006E ; }
006E L10:
006E .dbline 65
006E ; if ((det_err_over_vol()) && sign )
006E 75D0 rcall _det_err_over_vol
0070 0023 tst R16
0072 51F0 breq L12
0074 4423 tst R20
0076 41F0 breq L12
0078 .dbline 66
0078 ; {
0078 .dbline 67
0078 ; led_flicker(1,5);
0078 25E0 ldi R18,5
007A 01E0 ldi R16,1
007C ADD0 rcall _led_flicker
007E .dbline 68
007E ; GREEN_OFF();
007E 439A sbi 0x8,3
0080 .dbline 69
0080 ; sign = 0;
0080 4427 clr R20
0082 .dbline 70
0082 ; g_Err_Det_Disable = 1;
0082 81E0 ldi R24,1
0084 80930000 sts _g_Err_Det_Disable,R24
0088 .dbline 71
0088 ; }
0088 L12:
0088 .dbline 72
0088 ; if ((det_err_solenoid_short()) && sign )
0088 75D0 rcall _det_err_solenoid_short
008A 0023 tst R16
008C 51F0 breq L14
008E 4423 tst R20
0090 41F0 breq L14
0092 .dbline 73
0092 ; {
0092 .dbline 74
0092 ; RED_ON();
0092 4298 cbi 0x8,2
0094 .dbline 75
0094 ; led_flicker(0,1);
0094 21E0 ldi R18,1
0096 0027 clr R16
0098 9FD0 rcall _led_flicker
009A .dbline 76
009A ; sign = 0;
009A 4427 clr R20
009C .dbline 77
009C ; g_Err_Det_Disable = 1;
009C 81E0 ldi R24,1
009E 80930000 sts _g_Err_Det_Disable,R24
00A2 .dbline 78
00A2 ; }
00A2 L14:
00A2 .dbline 79
00A2 ; if ((det_err_syn_encoder()) && sign )
00A2 73D0 rcall _det_err_syn_encoder
00A4 0023 tst R16
00A6 51F0 breq L16
00A8 4423 tst R20
00AA 41F0 breq L16
00AC .dbline 80
00AC ; {
00AC .dbline 81
00AC ; RED_ON();
00AC 4298 cbi 0x8,2
00AE .dbline 82
00AE ; led_flicker(0,2);
00AE 22E0 ldi R18,2
00B0 0027 clr R16
00B2 92D0 rcall _led_flicker
00B4 .dbline 83
00B4 ; sign = 0;
00B4 4427 clr R20
00B6 .dbline 84
00B6 ; g_Err_Det_Disable = 1;
00B6 81E0 ldi R24,1
00B8 80930000 sts _g_Err_Det_Disable,R24
00BC .dbline 85
00BC ; }
00BC L16:
00BC .dbline 86
00BC ; if ((det_err_motor_block()) && sign )
00BC 73D0 rcall _det_err_motor_block
00BE 0023 tst R16
00C0 51F0 breq L18
00C2 4423 tst R20
00C4 41F0 breq L18
00C6 .dbline 87
00C6 ; {
00C6 .dbline 88
00C6 ; RED_ON();
00C6 4298 cbi 0x8,2
00C8 .dbline 89
00C8 ; led_flicker(0,3);
00C8 23E0 ldi R18,3
00CA 0027 clr R16
00CC 85D0 rcall _led_flicker
00CE .dbline 90
00CE ; sign = 0;
00CE 4427 clr R20
00D0 .dbline 91
00D0 ; g_Err_Det_Disable = 1;
00D0 81E0 ldi R24,1
00D2 80930000 sts _g_Err_Det_Disable,R24
00D6 .dbline 92
00D6 ; }
00D6 L18:
00D6 .dbline 93
00D6 73D0 rcall _det_err_motor_hall
00D8 0023 tst R16
00DA 49F0 breq L20
00DC 4423 tst R20
00DE 39F0 breq L20
00E0 .dbline 94
00E0 .dbline 95
00E0 4298 cbi 0x8,2
00E2 .dbline 96
00E2 24E0 ldi R18,4
00E4 0027 clr R16
00E6 78D0 rcall _led_flicker
00E8 .dbline 97
00E8 81E0 ldi R24,1
00EA 80930000 sts _g_Err_Det_Disable,R24
00EE .dbline 98
00EE L20:
00EE .dbline -2
00EE L1:
00EE 00D0 rcall pop_gset1
00F0 .dbline 0 ; func end
00F0 0895 ret
00F2 .dbsym r sign 20 c
00F2 .dbend
00F2 .dbfunc e det_err_over_flow _det_err_over_flow fc
.even
00F2 _det_err_over_flow::
00F2 .dbline -1
00F2 .dbline 106
00F2 ; if (det_err_motor_hall() && sign)
00F2 ; {
00F2 ; RED_ON();
00F2 ; led_flicker(0,4);
00F2 ; g_Err_Det_Disable = 1;
00F2 ; }
00F2 ;
00F2 ; }
00F2 ;
00F2 ;
00F2 ; // 硬件过流检测
00F2 ; // 需要A/D 模块控制当母线电流大于20A,FO_MCU由低电平转到高电平
00F2 ; byte det_err_over_flow(void)
00F2 ; {
00F2 .dbline 107
00F2 ; if ( FO_MCU() != 0 )
00F2 319B sbis 0x6,1
00F4 07C0 rjmp L23
00F6 .dbline 108
00F6 ; {
00F6 .dbline 109
00F6 ; g_ErrCode01 |= 0x01;
00F6 80910000 lds R24,_g_ErrCode01
00FA 8160 ori R24,1
00FC 80930000 sts _g_ErrCode01,R24
0100 .dbline 110
0100 ; return 1;
0100 01E0 ldi R16,1
0102 01C0 rjmp L22
0104 L23:
0104 .dbline 113
0104 ; }
0104 ; else
0104 ; return 0;
0104 0027 clr R16
0106 .dbline -2
0106 L22:
0106 .dbline 0 ; func end
0106 0895 ret
0108 .dbend
0108 .dbfunc e det_err_inver_protect _det_err_inver_protect fc
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?