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

📄 control.c

📁 汽车测功机源肛码.单片机用的是LPC2104. 实现测速,对涡流机的控制,马达的控制.
💻 C
字号:
#include "cgj.h"
#include "control.h"
#include "math.h"

/************************************************************************************************************************
* 函数名称: SendRealParaToComputer()
* 功    能: 向上位机发送实时的测控数据
* 入口参数: 无
* 出口参数: 无
* 调用模块: SendProgrmaRumStatus()  -> 向上位机发送程序运行状态字符串函数
*           OSMutexPend()           -> 等互斥型信号函数
*           CommputChar()           -> 向串口缓冲区写数据
*           OSMutexPost()           -> 发送互斥型信号量函数
*           CommGetTxChar()         -> 取串口缓冲区字符函数
* 全局变量: parameter[]
* 设计者:   饶阳胜,周川福
* 日    期: 05-8-7
* 说    明: 发送的一组测控数据格式: ASCII码
*                                   "*xxxx.x xxxx.x xxxx.x A\n"
*           A 校验码
************************************************************************************************************************/
void SendRealParaToComputer()
{   
    INT8U           i, j, err;
    INT32U          send_data;
    unsigned char   k;
    char            send_buffer[10];


    k = 0;                                                      // 校验码回0
    k += '*';
    
    OSMutexPend(uart0, 0, &err);                              // 等互斥型信号量   
    CommPutChar(COMM1, '*', 0);                              // 向发送缓冲区送出'*'

    for(i = 0; i < 5; i++){
        if(i == SPEED){

            OS_ENTER_CRITICAL();

            sprintf(send_buffer, "%06.2f", parameter[SPEED]);

            OS_EXIT_CRITICAL();

            for(j = 0; j < 6; j++){
                k += send_buffer[j];
                CommPutChar(COMM1, send_buffer[j], 0);
            }

        }else if(i == FORCE){ 
            
            OS_ENTER_CRITICAL();

            send_data = (INT32U)parameter[FORCE];
            
            sprintf(send_buffer, "%05d", send_data);

            OS_EXIT_CRITICAL();

            for(j = 0; j < 5; j++){
                k += send_buffer[j]; 
                CommPutChar(COMM1, send_buffer[j], 0);
            }

        }else if(i == POWER){
            OS_ENTER_CRITICAL();

            sprintf(send_buffer, "%06.1f", parameter[POWER]);

            OS_EXIT_CRITICAL();

            for(j = 0; j < 6; j++){
                k += send_buffer[j]; 
                CommPutChar(COMM1, send_buffer[j], 0);
            }

        }else if(i == JSD){
                        
            OS_ENTER_CRITICAL();
            
            sprintf(send_buffer, "%06.2f", parameter[JSD]);

            OS_EXIT_CRITICAL();

            for(j = 0; j < 6; j++){
                k += send_buffer[j]; 
                CommPutChar(COMM1, send_buffer[j], 0);
            }

        }else if(i == DISTANCE) {
            OS_ENTER_CRITICAL();
            
            sprintf(send_buffer, "%08.2f", parameter[DISTANCE]);

            OS_EXIT_CRITICAL();

            for(j = 0; j < 8; j++){
                k += send_buffer[j];
                CommPutChar(COMM1, send_buffer[j], 0);
            }

        }
        
        if((U0IER & 0x02) == 0){                            // 如果发送中断是关的
            U0IER |= 0x02;                                  // 开发送中断
            U0THR = CommGetTxChar(COMM1, &err);             // 往发送寄存器写初始值
        }
    }

    CommPutChar(COMM1, k, 0);
    CommPutChar(COMM1, '\r', 0);

    if((U0IER & 0x02) == 0){                                // 如果发送中断是关的
        U0IER |= 0x02;                                      // 开发送中断
        U0THR = CommGetTxChar(COMM1, &err);                 // 往发送寄存器写初始值
    }

    OSMutexPost(uart0);                                     // 释放互斥型信号量 

}

/******************************************************************************************************
*
******************************************************************************************************/
void SendTimePeriodToComputer(FP32 time){
    char   send_buffer[10];
    INT8U           i, k, err;
    
    
    sprintf(send_buffer, "%06.3f", time);

    k = 0;

    OSMutexPend(uart0, 0, &err);                            // 等互斥型信号量

    CommPutChar(COMM1,'*', 0);                              // 向发送缓冲区送出'*'
    CommPutChar(COMM1,'T', 0);                              // 向发送缓冲区送出'T'
    k += '*';
    k += 'T';
    for(i = 0; i < 6; i++){
        k += send_buffer[i]; 
        CommPutChar(COMM1,send_buffer[i],0);
    }

    CommPutChar(COMM1, k, 0);
    CommPutChar(COMM1,'\r',0);
      
    if((U0IER & 0x02) == 0){                            // 如果发送中断是关的
        U0IER |= 0x02;                                  // 开发送中断
        U0THR = CommGetTxChar(COMM1, &err);             // 往发送寄存器写初始值
    }

    OSMutexPost(uart0);                                     // 释放互斥型信号量   
}

⌨️ 快捷键说明

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