请教一个串口编程问题啊
我想编一个计算机和单片机通信的程序,用VC6,主界面是一个对话框,上面有一个编辑框、几个图片和几个按钮。串口数据格式有两种
如果电脑接收到的信号是05 21 ......... 0D共25位就显示在编辑框
如果电脑接收的信号是05 22 .... 0D 00共10位就改变图片表示。
电脑接收到一串信号,不管是那种,都向单片机发出键盘状态信号,格式为05 41 ........ 0D 共10位。
如果有按键被按下,则10位数据中的某一位会变化,但是也要等收到单片机信号才会发出。
我用MSComm编程,现在我的问题是
如果我接收一个字节就触发OnComm,也就是设置如下:
m_ctrlComm.SetSettings("19200,n,8,1");
m_ctrlComm.SetRThreshold(1);
m_ctrlComm.SetInputLen(1);
开机屏幕显示正常。但是按下按键后,单片机的状态有了变化,编辑框的显示却没有变化。
如果我改成10个字节触发一次OnComm,也就是设置如下:
m_ctrlComm.SetSettings("19200,n,8,1");
m_ctrlComm.SetRThreshold(10);
m_ctrlComm.SetInputLen(10);
效果就好的多,按下按键后单片机有反应,编辑框也有反应,但是反应有点慢。
有时要连按两下按键。
如果我改成20个字节触发一次OnComm,也就是设置如下:
m_ctrlComm.SetSettings("19200,n,8,1");
m_ctrlComm.SetRThreshold(20);
m_ctrlComm.SetInputLen(20);
反应就更快一点,但是我总感觉有丢失数据的现象。
而且如果接收的第一个信号不是05,也就是正好从中间开始接收信号
程序好像就不太正常。
我该从哪里下手修改程序呢?
是不是不能用OnComm啊?
我是初学。领导赶鸭子上架,谢谢各位帮忙了。