//读取ADS1248型号的ADC芯片采集到的数据,并将其进行处理和储存
int32 ADCResult;
void ADS1248_ReadResult(ADC_ADS1248_CON *Var)
{
int32 Temp32;
Uint16 i;
Uint8 Status;
if((Var->ADS1248_CON1.Status == ADS1248_STATUS_READ_BUSY) || (Var->ADS1248_CON2.Status == ADS1248_STATUS_READ_BUSY))
{
Status = ADS1248ReadResult(&Temp32);
if(Status == TRUE)
{
ADCResult = Temp32;
if(Var->ADS1248_CON1.Status == ADS1248_STATUS_READ_BUSY)
{
ADS1248CS1HIGH();
AdcBufferLoad(&Var->ADS1248_CON1.Buffer[Var->ADS1248_CON1.CurChannel],Temp32,AdcBufLen_);
Temp32 = (int32)MaxValue_mV_1000_;
Var->ADS1248_CON1.Result[Var->ADS1248_CON1.CurChannel] = GetAverageValue(&(Var->ADS1248_CON1.Buffer[Var->ADS1248_CON1.CurChannel][0]),AdcBufLen_) + Temp32;
Var->ADS1248_CON1.Status = ADS1248_STATUS_IDLE; //表示读取完成
Var->ADS1248_CON1.Pointer++;
if(Var->ADS1248_CON1.Pointer > 3)
{
Var->ADS1248_CON1.Pointer = 0;
}
Var->ADS1248_CON1.NextChannel = Var->ADS1248_CON1.Pointer;
usartSendData(calculatedianliu(Var->ADS1248_CON1.Result[0]), calculatedianya(Var->ADS1248_CON1.Result[3]));
发送协议程序如下
const unsigned char header[2] = {0x55, 0xaa};
const unsigned char ender[2] = {0x0d, 0x0a};
//发送数据共用体
void usartSendData(unsigned int current, unsigned int voltage)
{
// 协议数据缓存数组
unsigned char buf[10] = {0};
int i, length = 0;
// 设置消息头
for(i = 0; i < 2; i++)
buf[i] = header[i]; // buf[0] buf[1]
// 设置采集数据长度与采集值
length = 4;
buf[2] = length; // buf[2]
// 将result[0]的电流值存储到buf数组的第4、5位
buf[3] = (current >> 8) & 0xFF; // 高位
buf[4] = current & 0xFF; // 低位
// 将result[3]的电压值存储到buf数组的第6、7位
buf[5] = (voltage >> 8) & 0xFF; // 高位
buf[6] = voltage & 0xFF; // 低位
// 设置校验值、消息尾
buf[3 + length] = getDataSum(buf, 7); // buf[7]
buf[3+ length + 1] = ender[0]; // buf[8]
buf[3+ length + 2] = ender[1]; // buf[9]
//发送字符串数据
USART_Send_String(buf,sizeof(buf));
}
void USART_Send_String(unsigned char *p, int sendSize)
{
static int length =0;
while(length<sendSize)
{
while(SciaRegs.SCICTL2.bit.TXEMPTY != 1);//发送缓冲区为空
SciaRegs. SCITXBUF = *p;
p++;
length++;
}
length =0;
}
unsigned char getDataSum(unsigned char *ptr, unsigned int len)
{
unsigned char sum = 0;
while (len--)
{
sum += *ptr++;
}
return sum;
}
将采集到的值换算再发送
unsigned int calculatedianliu(unsigned int huansuanzhi1)
{
unsigned int x = (huansuanzhi1 + 5886025.5) / 837680.5 * 1000;
return x;
}
unsigned int calculatedianya(unsigned int huansuanzhi2)
{
unsigned int x = (huansuanzhi2 + 5881672) / 2221741 * 1000;
return x;
}
接收到的电流一直是一个固定的值,该怎么把采集到的数据(图中4027258那个值)发送出去?