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