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

📄 proc_communication._c

📁 一个直流电机的闭环控制源代码程序
💻 _C
字号:
/***********************************************************
*   函数库说明:电机闭环位置控制模块通讯函数库             *
*   版本:      v1.00                                      *
*   作者:      王卓然                                     *
*   创建日期:  2007年9月03日                              *
* -------------------------------------------------------- *
*  [支 持 库]                                              *
*   支持库名称:                                           *
*   需要版本:                                             *
*   支持库说明:                                           *
* -------------------------------------------------------- *
*  [版本更新]                                              *
*   修改:                                                 *
*   修改日期:                                             *
*   版本:                                                 *
* -------------------------------------------------------- *
*  [版本历史]                                              *
* -------------------------------------------------------- *
*  [使用说明]                                              *
***********************************************************/

/********************
* 头 文 件 配 置 区 *
********************/
# include "LIB_Config.h"
# include "PF_Config.h"
# include "PROC_Communication.h"

/********************
*   系 统 宏 定 义  *
********************/

/*------------------*
*   常 数 宏 定 义  *
*------------------*/

/*------------------*
*   动 作 宏 定 义  *
*------------------*/


/********************
*    结构体定义区   *
********************/


/********************
*   模块函数声明区  *
********************/

/********************
*   全局函数声明区  *
********************/
BOOL PROC_Command_Check(void);

/********************
*   模块变量声明区  *
********************/

/********************
*   全局变量声明区  *
********************/
BOOL g_bIfBrake = FALSE;
int8 g_cSpeed = 0;
uint16 g_wDistance = 0;

/***********************************************************
*   函数说明:数据帧接收函数                               *
*   输入:    无                                           *
*   输出:    无                                           *
*   调用函数:无                                           *
***********************************************************/
BOOL PROC_Command_Check(void)
{
    uint8 cData = 0;
    static uint8 cByteCounter = 0;
    static uint8 cBytes[sizeof(CMD_FRAME)+1] = {0}; 
    static uint8 cXORCheck = 0;

    if (!SERIAL_IN(cData))
    {
        return TRUE;
    }
    /*
    Set_DISP_BUFF
                (
                    ABS(cData)>>4,
                    ABS(cData)&0x0f,
                    SET_WORD_DIV_4(g_wDistance).BYTEAH,
                    SET_WORD_DIV_4(g_wDistance).BYTEAH,
                    SET_WORD_DIV_4(g_wDistance).BYTEAL
                );
    */
    //接收到了数据
    switch (cByteCounter)
    {
        case 0:
            if (cData == 0xAA)
            {
                cBytes[0] = 0xAA;
                cByteCounter++;
                cXORCheck = 0xAA; 
            }
            break;
        case UBOUND(cBytes):
            if (cData == cXORCheck)
            {
                //数据帧正确
                g_bIfBrake = TYPE_CONVERSION(&cBytes[1],CMD_FRAME).IfBrake;
                #ifndef LEFT_MOTOR
                    g_cSpeed = TYPE_CONVERSION(&cBytes[1],CMD_FRAME).Speed;
                #else
                    g_cSpeed = TYPE_CONVERSION(&cBytes[1],CMD_FRAME).Speed;
                #endif
                g_wDistance = TYPE_CONVERSION(&cBytes[1],CMD_FRAME).Distance;
                
                
                Set_DISP_BUFF
                (
                    ABS(g_cSpeed)>>4,
                    ABS(g_cSpeed)&0x0f,
                    SET_WORD_DIV_4(g_wDistance).BYTEAH,
                    SET_WORD_DIV_4(g_wDistance).BYTEAH,
                    SET_WORD_DIV_4(g_wDistance).BYTEAL
                );
                
            }
            cByteCounter = 0;                               //复位计数器
            cXORCheck = 0;
            
            break;
        default:
            cBytes[cByteCounter++] = cData;
            cXORCheck ^= cData;
            break;
    }
    
    return TRUE;
}

⌨️ 快捷键说明

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