| 
				 3.7 通用数据接收函数ReadDataDelay 
在串行通信中,数据的传输是不连续的,因而,在处理数据接收时,应该将不连续的数据进行叠加,形成一个完整的数据包。本文设计的ReadDataDelay函数实现这一功能,用来从指定的串口nPort接收数据,保存在字节数组bData中,其中,下标为0的字节表示该字节数组的长度,其它为有效字节。nDelayMs是需要等待的节拍数,即在nDelayMs个节拍之内收到的数据,认为是一批数据,依次进行叠加(否则,认为是下一批数据),该参数可以根据机器时钟周期的大小进行调整。该函数的源代码如下。 
void ReadDataDelay(int nPort, byte *bData, unsigned long nDelayMs) 
{ 
    int nData=0;             /*对收到的字节计数*/ 
    unsigned long iCount=0;   /*对等待的节拍计数*/ 
    while(iCount < nDelayMs) 
    { 
        if(IsCom(nPort)==QueueIsNotEmpty) 
        { 
            nData++;       /*收到的字节数加1*/ 
            bData[nData] = ReadCom(nPort); /*将收到的字节存入数组*/ 
            iCount = 0;     /*重新计数,准备接收随后的数据*/ 
            if(nData > 255) break;  /*255是设定的最大的数据包长度*/ 
        } 
        else iCount++;      /*没有数据,则等待的节拍加1*/ 
    } 
    bData[0] = nData;   /*保存收到的字节数*/ 
} 
  
4 通信函数的应用 
通用的数据发送函数SendData与数据接收函数ReadDataDelay实现了简捷的数据传输任务,屏蔽了数据传输的繁琐的细节问题。在嵌入式模块中实现串行通信,首先通过InstallCom函数初始化串行接口,然后,通过SendData函数发送一批数据,等待数据到达。IsCom用于测试是否有数据,典型的关键实例代码如下。 			
				 |