肯定可以,而且也不难!
你那边之所以有上面的情况是因为你将11看做字符串进行传输了,应该看做一个整数!
你可以用C#中的一个函数,好像是BitConverter,呵呵,具体你看下吧,将整数转换成字节数组,再调用串口api进行传输!
  int   dataSended=11;   
  byte[]   dataArray;   
  dataArray=System.BitConverter.GetBytes(dataSended);   

解决方案 »

  1.   

          1    单片机收到的是0X31 
        11    单片机收到的是0X31 0X31 
        111  单片机收到的是0X31 0X31 0X31 
        1111  单片机收到的是0X31 0X31 0X31 0X31
    这是在单字节传输,你是在每次发送一个1到下位机,下位机收了4次,每次收到的是一个1
        1    单片机收到的是0X01 
        11    单片机收到的是0X0B 
        111  单片机收到的是0X6F 
        1111  单片机收到的是0X04 0X57
    你没发现么,11--十六进制显示是0X0B,也就是说,你发送的是一个整数,并不是以字节来发送的,如果要实现基本很简单了,在上位机把下发的16进制数准备好,譬如:0x0B,直接送到串口上发下去,下位机接收到的就是0x0B,就不会接收到两个1了,就实现了
      

  2.   

                int T=1111;
                byte[] _ValueByte = GetByte(T);
               直接发送 _ValueByte就好了
               
             
            public byte[] GetByte(int p_Value)
            {            byte[] _Bytes= BitConverter.GetBytes(p_Value);            if (p_Value <= 255) return new byte[] { _Bytes[0] };            if (p_Value <= 65535) return new byte[] { _Bytes[1],_Bytes[0]};            return _Bytes;
            }
      

  3.   

    直接
    WriteByte((bete)(1));
    WriteByte((bete)(11));
    WriteByte((bete)(111));
    WriteByte((bete)(1111));