|
上位机与单片机之前传送的数据格式是以ACSII码格式传送的,对吧?
1、C#上位机能过以下代码可以发送数据到单片机中
byte[] cScanCmd = new byte[14];
cScanCmd[0] = 0xaa;
cScanCmd[1] = 0x80;
cScanCmd[2] = 0x81;
cScanCmd[3] = 0x7f;
cScanCmd[4] = 0x04;
cScanCmd[5] = 0x05;
cScanCmd[6] = 0x06;
cScanCmd[7] = 0x07;
cScanCmd[8] = 0x08;
cScanCmd[9] = 0x09;
cScanCmd[10] = 0x0a;
cScanCmd[11] = 0x0b;
cScanCmd[12] = 0x0c;
cScanCmd[13] = 0x55;
string sScanMasterMachineCmd = System.Text.Encoding.Default.GetString(cScanCmd);
serialPort1.Write(sScanMasterMachineCmd);
在上位机程序中以十六进制数据,再通过转换便可以发送十六进制数据到单片机中。其中超过127的数据(0x80)都可以正常发送并显示。
2、单片机发送数据到C#上位机中,C#上位机接收数据部分的代码如下
String szRecv = string.Empty;
System.IO.Ports.SerialPort comPort = (System.IO.Ports.SerialPort)sender;
try
{
serialPort1.ReceivedBytesThreshold = serialPort1.ReadBufferSize;
while (true)
{
byte[] data = System.Text.Encoding.ASCII.GetBytes(serialPort1.ReadExisting());
szRecv = Encoding.ASCII.GetString(data);
if (string.Equals(szRecv, string.Empty))
{
break;
}
strCollect += szRecv;
Application.DoEvents();
System.Threading.Thread.Sleep(100);
}
}
catch (Exception ex)
{
MessageBox.Show(this, ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
我想实现直接能接收到单片机发送过来的十六进制如0XAA 0X80等超过0x7f的数据,但这个程序实现不了,超过0x7f的数据,data显示为0x3f。有什么办法能实现直接接收到像0xaa这样的十六进制数据呢? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|