该代码片段主要涉及串行通信的处理,包括定时器管理和数据接收功能。tianming_tmr函数用于管理串行通信的定时器,当通信准备好时,定时器递减;否则,定时器重置为3。tianming_rcv函数负责处理接收到的数据,当定时器为0且通信准备好时,函数会解析接收缓冲区中的数据,直到遇到结束符ETX。数据解析过程中,跳过逗号,并将逗号后的浮点数据通过asc_read_float函数读取并存储到float_data数组中。整体代码展示了串行通信中定时器管理和数据解析的基本流程。
#include "cpu.h"
#include "types.h"
#include "const.h"
#include "var.h"
#include "sub.h"
#include "stdarg.h"
#define STX 0x02
#define ETX 0x03
#define CR 0x0d
FP32 asc_read_float(INT8U *p );
void tianming_tmr ( SIO *p )
{
if (*p->fr_ready )
{if (*p->sio_tmr3) *p->sio_tmr3-=1;
}
else *p->sio_tmr3 =3;
}
void tianming_rcv( SIO *p)
{
//FP32 ftmp_data,ftmp2;
INT8U *p1,tmp5;
INT16U tmp_type;
if (*p->fr_ready )
{
if (*p->sio_tmr3 ==0 )
{
tmp5=0;
tmp_type=0;
*p->fr_ready =0;
*p->sio_tmr3 =3;
*p->sio_rx_lenth=0;
p1=p->sio_buf;
while (1)
{
if ( *p1 ==ETX ) return;
if ( *p1 !=',') p1++;
else
{
p1++;
float_data[12+tmp5]= asc_read_float( p1);
tmp5 ++;
}
}
}
}
}