Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2342167
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:01:59

Victor: 你好!
   我在多机通讯时遇到些问题,请指教!
1.下面程序中:有 delay_ms() 的语句都不能省略, 特别在 commSelectAddress 时,若省掉delay_ms
  则 Mark,Space效验位根本不能够更改过来, 请问这是为什么?
2.  我想发送 1000 个字节数据到串口,等待回应 num 个字节, 回应不对? 请问该如何做才好?
3. 在发送完 1000 个字节后, 固定延时很讨厌的, 时间总要人为调节, 为何不能省掉延时直接去等待串口的回应?
  有更好的办法吗?

部分程序如下:

//全局定义缓从区
unsigned char inbuf[8192]; //收到的字节数不会超过串口缓存的容量, 所以分配一个缓存容量相同的Buf
unsigned char outbuf[8192];

//发送 1000 个字节数据到串口,等待回应 num 个字节
int __fastcall TSDIAppForm::SnedDataToComm(int num)
{
    long t0ms;

    if (commSelectAddress(Address)) {  //多机通讯选择地址
       YbCommDevice1->Write(outbuf, 1000);
       delay_ms(2000);

       t0ms = GetTickCount();
       for (; (GetTickCount()-t0ms)            count = YbCommDevice1->Read(inbuf, num);
            if (count==num) break;      //收到 num 个字节后退出
        Application->ProcessMessages() ;
       }
    }
}

int __fastcall TSDIAppForm::commSelectAddress(Byte &Address)
{
    if (!setCommParity(ptMarkParity)) return 0;
    delay_ms(50);
    YbCommDevice1->Write(&Address,1);
    delay_ms(50);
    if (!setCommParity(ptSpaceParity)) return 0;
    return 1;
}


int delay_ms(unsigned long time)
{
    long t0ms = GetTickCount();
    for (; (GetTickCount()-t0ms)        Application->ProcessMessages() ;
    }
}



--------------------next---------------------

阅读(1085) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~