问题1:
    我用API函数写一个自己的串口类,利用CreateFile(),ReadFlie()WriteFile()等函数来完成通讯过程。PC(发送)->MCU(接收),然后,MCU(发送)->PC(接收);在主界面的控制下循环这个过程。在这种情况下是否要用到线程,如果不用应怎样实现,如果需要,如何实现。问题2:
     PC传输时发送和接收的数据都是一个字符的二进制,如0011 1111。在发送时应该表示成ASCII的字符值。发送->max232->单片机(SBUF)时,SBUF=0x3F?
     另PC在接收单片机发来的数据,并保存在变量buf中,这时如何对这个二进制进行位处理,比如判断其那一位的的值为1/0。

解决方案 »

  1.   

    1:看你具体做什么应用了,如果通讯协议是一问一答的话就不需要多线程了。
    2:你可以把你的数据放在一个 Buff中,直接调用WriteFile这个函数就可以了,至于位处理你可以看看参考书。
      

  2.   

    谢谢上面两位我的通讯方式应该是一问一答了。主机发送,然后从机接收,等待从机发送,主机接收。一个过程结束。那就要建一个线程了位处理问题:对于接收到的一个字节数据,保存在Buff中。需要对其位进行某一位的测试其1/0值,这个可以举下简单的例子吗?
      

  3.   

    #define MASK_BIT7 0X80
    #define MASK_BIT6 0X40
    #define MASK_BIT5 0X20
    #define MASK_BIT4 0X10
    #define MASK_BIT3 0X08
    #define MASK_BIT2 0X04
    #define MASK_BIT1 0X02
    #define MASK_BIT0 0X01//
    BYTE bRet=ReceiveFrmPort();
    if( MASK_BIT0 & bRet)
    {  
          // bit 0 = 1, do sth.}
      

  4.   

    TO: 
    what_a_big() ( ) 信誉:100    Blog   加为好友  2007-4-20 18:40:36  得分: 0  
    ___________________________________________________________________________
        谢谢你例子,这个只能解决单独的判断每一位的1/0值,但是如果bRet=0011 0001;其中为1的位是不确定的.在这样的情况下,我要去判断bRet中的这个二进制中哪一位为1/0. 有没有解决的办法,是否要用到混合编程呢?
      

  5.   

    please refer to the online resources for programming serial portfor this bit-flag mask like 0011 0001,you define in advance its spec. such as MASK_CONFIG1 0X31
      

  6.   

    如果是只有八位,你可以一位一位的判断,如果多了可以做个循环。如。
    bRet=0011 0001
    for (int i=0;i<8)
    {
    if ((bRet>>i & 0X01)==1)
       printf(" 第%d是1",i+1);
    }
    等等。
    当然你也可以用一个CString类。把bRet的二进制转化为CSting , 然后再找其中有几个“1”