📄 control.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 + -