📄 proc_motoraction_sctr.lis
字号:
.module PROC_MotorAction_SCTR.c
.area text(rom, con, rel)
0000 .dbfile H:\单片机\源程序\2007全国电子设计大赛\电机闭环模块\PROC_MotorAction_SCTR.c
.area data(ram, con, rel)
0000 .dbfile H:\单片机\源程序\2007全国电子设计大赛\电机闭环模块\PROC_MotorAction_SCTR.c
0000 _Delta::
0000 .blkb 2
.area idata
0000 0000 .word 0
.area data(ram, con, rel)
0002 .dbfile H:\单片机\源程序\2007全国电子设计大赛\电机闭环模块\PROC_MotorAction_SCTR.c
0002 L2:
0002 .blkb 2
.area idata
0002 0000 .word 0
.area data(ram, con, rel)
0004 .dbfile H:\单片机\源程序\2007全国电子设计大赛\电机闭环模块\PROC_MotorAction_SCTR.c
.area text(rom, con, rel)
0000 .dbfile H:\单片机\源程序\2007全国电子设计大赛\电机闭环模块\PROC_MotorAction_SCTR.c
0000 .dbfunc e PROC_Motor_Postion_Control _PROC_Motor_Postion_Control fc
0000 ; ERR3 -> R12,R13
0000 ; ERR1 -> R12,R13
0000 ; dTempDCounter1 -> y+0
.even
0000 _PROC_Motor_Postion_Control::
0000 00D0 rcall push_xgsetF03C
0002 2497 sbiw R28,4
0004 .dbline -1
0004 .dbline 75
0004 ; /***********************************************************
0004 ; * 函数库说明:电机闭环位置控制模块函数库 *
0004 ; * 版本: v1.00 *
0004 ; * 作者: 王卓然 *
0004 ; * 创建日期: 2007年4月16日 *
0004 ; * -------------------------------------------------------- *
0004 ; * [支 持 库] *
0004 ; * 支持库名称: *
0004 ; * 需要版本: *
0004 ; * 支持库说明: *
0004 ; * -------------------------------------------------------- *
0004 ; * [版本更新] *
0004 ; * 修改: *
0004 ; * 修改日期: *
0004 ; * 版本: *
0004 ; * -------------------------------------------------------- *
0004 ; * [版本历史] *
0004 ; * -------------------------------------------------------- *
0004 ; * [使用说明] *
0004 ; ***********************************************************/
0004 ;
0004 ; /********************
0004 ; * 头 文 件 配 置 区 *
0004 ; ********************/
0004 ; # include "RD_MacroAndConst.h"
0004 ; # include "PF_Config.h"
0004 ; # include "PROC_MotorAction_SCTR.h"
0004 ;
0004 ; /********************
0004 ; * 系 统 宏 定 义 *
0004 ; ********************/
0004 ;
0004 ; /*------------------*
0004 ; * 常 数 宏 定 义 *
0004 ; *------------------*/
0004 ; #ifndef MOTOR_P
0004 ; # define MOTOR_P 10
0004 ; #endif
0004 ;
0004 ;
0004 ; /*------------------*
0004 ; * 动 作 宏 定 义 *
0004 ; *------------------*/
0004 ;
0004 ; /********************
0004 ; * 结构体定义区 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 模块函数声明区 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 全局函数声明区 *
0004 ; ********************/
0004 ; BOOL PROC_Motor_Postion_Control(void);
0004 ;
0004 ; /********************
0004 ; * 模块变量声明区 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 全局变量声明区 *
0004 ; ********************/
0004 ;
0004 ; uint16 Delta = 0;
0004 ;
0004 ; /***********************************************************
0004 ; * 函数说明:电机位置控制函数 *
0004 ; * 输入: 无 *
0004 ; * 输出: 无 *
0004 ; * 调用函数:无 *
0004 ; ***********************************************************/
0004 ; BOOL PROC_Motor_Postion_Control(void)
0004 ; {
0004 .dbline 76
0004 ; uint32 dTempDCounter = 0;
0004 .dbline 77
0004 ; uint16 ERR = 0;
0004 .dbline 80
0004 ; static uint16 I = 0;
0004 ;
0004 ; SAFE_CODE_PERFORMANCE
0004 F894 cli
0006 .dbline 80
0006 40900200 lds R4,_g_dNowMotorPosition+2
000A 50900300 lds R5,_g_dNowMotorPosition+2+1
000E 20900000 lds R2,_g_dNowMotorPosition
0012 30900100 lds R3,_g_dNowMotorPosition+1
0016 2882 std y+0,R2
0018 3982 std y+1,R3
001A 4A82 std y+2,R4
001C 5B82 std y+3,R5
001E .dbline 80
001E .dbline 80
001E 7894 sei
0020 .dbline 85
0020 ; (
0020 ; dTempDCounter = g_dNowMotorPosition;
0020 ; )
0020 ;
0020 ; if (dTempDCounter > g_dAimMotorPosition)
0020 40900200 lds R4,_g_dAimMotorPosition+2
0024 50900300 lds R5,_g_dAimMotorPosition+2+1
0028 20900000 lds R2,_g_dAimMotorPosition
002C 30900100 lds R3,_g_dAimMotorPosition+1
0030 6880 ldd R6,y+0
0032 7980 ldd R7,y+1
0034 8A80 ldd R8,y+2
0036 9B80 ldd R9,y+3
0038 2614 cp R2,R6
003A 3704 cpc R3,R7
003C 4804 cpc R4,R8
003E 5904 cpc R5,R9
0040 08F0 brlo X6
0042 43C0 rjmp L3
0044 X6:
0044 X0:
0044 .dbline 86
0044 ; {
0044 .dbline 87
0044 ; ERR = (uint16)((dTempDCounter - g_dAimMotorPosition)*MOTOR_P);
0044 6218 sub R6,R2
0046 7308 sbc R7,R3
0048 8408 sbc R8,R4
004A 9508 sbc R9,R5
004C 44E1 ldi R20,20
004E 50E0 ldi R21,0
0050 60E0 ldi R22,0
0052 70E0 ldi R23,0
0054 9A92 st -y,R9
0056 8A92 st -y,R8
0058 7A92 st -y,R7
005A 6A92 st -y,R6
005C 8A01 movw R16,R20
005E 9B01 movw R18,R22
0060 00D0 rcall empy32u
0062 6801 movw R12,R16
0064 .dbline 88
0064 ; Delta = ABS((int16)(dTempDCounter - g_dAimMotorPosition));
0064 20900000 lds R2,_g_dAimMotorPosition
0068 30900100 lds R3,_g_dAimMotorPosition+1
006C 8881 ldd R24,y+0
006E 9981 ldd R25,y+1
0070 8219 sub R24,R2
0072 9309 sbc R25,R3
0074 8030 cpi R24,0
0076 E0E0 ldi R30,0
0078 9E07 cpc R25,R30
007A 54F4 brge L5
007C X1:
007C 8881 ldd R24,y+0
007E 9981 ldd R25,y+1
0080 8219 sub R24,R2
0082 9309 sbc R25,R3
0084 8095 com R24
0086 9095 com R25
0088 8F5F subi R24,0xFF
008A 9F4F sbci R25,0xFF
008C 5C01 movw R10,R24
008E 08C0 rjmp L6
0090 L5:
0090 20900000 lds R2,_g_dAimMotorPosition
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -