新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机通信协议处理

单片机通信协议处理

作者: 时间:2012-10-26 来源:网络 收藏

4. 上位机中的数据接收和命令

上位机中数据接收的过程与下位机可以做到完全一致,不过针对不同的串口操作方法有所不同。对于阻赛式的串口读函数,例如直接进行API操作或者调用windows的串口控件,最好能够开启一个线程专门用于监视串口的数据接收,每接收到一个数据可以向系统发送一个消息。笔者常用的CSerialPort类中就是这样的过程。CSerialPort打开串口后开启线程监视串口的数据接收,将接收的数据保存到缓冲区,并向父进程发送接收数据的消息,数据将随消息一起发送到父进程。父进程中开启此消息的函数,从中获取串口数据后就可以把以上的代码拷贝过来使用。

CSerialPort向父类发送的消息号如下:

#define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.

因此需要手动添加此消息的响应函数:

afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);

ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)

响应函数的具体代码如下:

LONG CWellInfoView::OnCommunication(WPARAM ch, LPARAM port)

{

int retval = 0;

rcvdat = (BYTE)ch;

if(state_machine == 0) //解析状态机

{

if(rcvdat == 0x55) // 接收到帧头第一个数据

state_machine = 1;

else

state_machine = 0; // 状态机复位

}

else if(state_machine == 1)

{

if(rcvdat == 0xAA) // 接收到帧头第二个数据

state_machine = 2;

else

state_machine = 0; // 状态机复位

......

5. 总结

以上给出的是系统运作的基本雏形,虽然简单,但是可行。实际的系统中比这个要复杂,而且涉及到数据包响应、命令错误、延时等等一系列的问题,在这样的一个基础上可以克服这些困难并且实现出较为稳定可靠的系统。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭