C# 串口16进制发送 每次接收只能收到2个字节 SerialDataReceivedEventHandler只触发了2次
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string dataout;
string datain;
int count2=0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string str_t;
string textboxvalue;
int textl1,textl2;
int i=0;
byte[] buffer = new byte[1];
//serialPort1.DiscardInBuffer();
//serialPort1.DiscardOutBuffer();
if (!serialPort1.IsOpen)
{
MessageBox.Show("请打开串口!");
return;
}
if (Hex_Mode_T.Checked)
{
textboxvalue = textBox1.Text.Replace(" ","");
textl1 = textboxvalue.Length;
textl2 = textboxvalue.Length % 2;
for (i = 0; i < ((textl1-textl2)/2); i++)
{
str_t = textboxvalue.Substring(2 * i, 2);
buffer[0] = Convert.ToByte(str_t, 16);
//
try
{
serialPort1.Write(buffer, 0, 1);
// count.Text = Convert.ToString(i,10);
}
catch
{
MessageBox.Show("串口发送有错误!");
}
}
if (textl1 % 2 != 0)
{
str_t = textboxvalue.Substring( 2*i, 1);
buffer[0] = Convert.ToByte(str_t, 16);
try
{
serialPort1.Write(buffer, 0, 1);
}
catch
{
MessageBox.Show("串口发送有错误!");
}
}
}
else
{
//dataout = str_t;
dataout = textBox1.Text;
serialPort1.WriteLine(dataout);
}
}
private void Form1_Load(object sender, EventArgs e)
{
//端口设置
string[] portList = System.IO.Ports.SerialPort.GetPortNames();
for (int i = 0; i < portList.Length; i++)
{
string name = portList[i];
comboBox1.Items.Add(name);
}
try
{
this.comboBox1.SelectedIndex = 1;
serialPort1.PortName = comboBox1.Text;
//serialPort1.PortName = "COM3";
}
catch
{
MessageBox.Show("索引号有问题!");
}
// 波特率设置
baudrate.SelectedIndex = 2;
serialPort1.BaudRate = 4800;
////seriesatet 控件数据设置
string str;
for (int i = 0; i < 256; i++)
{
str = i.ToString("x").ToUpper();
if (str.Length == 1)
{
str = "0" + str;
}
seriesdatat.Items.Add("0x"+str);
seriesdatat.SelectedIndex = 0;
}
}
private void DisplayText(object sender, EventArgs e)
{
textBox2.AppendText(datain);
count.Text = Convert.ToString(count2, 10);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (Rece_Mode_R.Checked)
{
datain = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
count2++;
// textBox2.AppendText(datain);
}
else
{
byte readbuf;
readbuf = (byte)serialPort1.ReadByte();
string readstr = Convert.ToString(readbuf, 16).ToUpper();
// datain = " " + readstr;
datain = readstr;
this.Invoke(new EventHandler(DisplayText));
count2++;
}
}
private void button2_Click(object sender, EventArgs e)
{
serialPort1.Close();
comboBox1.Enabled = true;
button3.Enabled = true;
// Close();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text =textBox1.Text .ToUpper() ;
}
private void textBox1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
if (!serialPort1.IsOpen)
{
serialPort1.Open();
//MessageBox.Show("串口打开成功!");
label2.Text = "没有开始通信!";
comboBox1.Enabled = false;
button3.Text = "关闭串口";
serialPort1.ReceivedBytesThreshold = 1;
}
else if (serialPort1.IsOpen)
{
serialPort1.Close();
// MessageBox.Show("串口已关闭!");
comboBox1.Enabled = true;
button3.Text = "打开串口";
}
else
{
return;
};
}
private void clear_rece_Click(object sender, EventArgs e)
{
textBox2.Text = "";
}
}
}