//创建一个串口通讯
SerialPort CurrentPort = null;
CurrentPort = new SerialPort();
CurrentPortReadBufferSize = 128;
CurrentPortPortName = comName; //端口号
CurrentPortBaudRate = bandRate; //比特率
CurrentPortParity =parity;//奇偶校验
CurrentPortStopBits = stop;//停止位
CurrentPortDataBits = databit;//数据位
CurrentPortReadTimeout = 1000; //读超时,即在1000内未读到数据就引起超时异常
//绑定数据接收事件,因为发送是被动的,所以你无法主动去获取别人发送的代码,只能通过这个事件来处理
CurrentPortDataReceived += Sp_DataReceived;
CurrentPortOpen();
定义一个变量 byte[] receiveStr;
//绑定的事件处理函数
private static void Sp_DataReceived(object sender, SystemIOPortsSerialDataReceivedEventArgs e)
{
SerialPort sp = sender as SerialPort;
if (sp == null)
return;
byte[] readBuffer = new byte[spReadBufferSize];
spRead(readBuffer, 0, readBufferLength);
//赋值
receiveStr=readBuffer;//当然你可以通过转换将byte[]转换为字符串。
}
//你要求的按钮事件可以这么写
private void button1_Click(object sender, EventArgs e)
{
if(receiveStr!=null)
{
变量 xxx=receiveStr;
}
}
if(a&(1<<(i-1))) RW_SID=1;
表示1左移i-1位再于a进行与运算,i=8的情况下i-1=7,1左移7位就是0x80。再跟a与运算(全1出1有0出0)即可获得a的最高位。以此类推可以取出a的所有位。
if(RW_SID==1) dat|=(1<<(i-1));
当RW_SID端口为1时把1左移i-1位跟dat或运算。i=8的情况下1左移i-1位正好是0x80,再经过与运算保存最高位,循环移位再或运算就能读取到全部位保存在dat里面
可以写成
//写部分
if(a&0x80)//取出a的最高位
RW_SID=1;//如果是1则输出1
else
RW_SID=0;//否则输出0
a<<=1;//a整体左移,让第7位补到最高位的位置,循环取出
E_CLK=1;
delay(100);
E_CLK=0;
delay(100);
//读部分
E_CLK=1;
delay(100);
dat<<=1;//接收1次数据后左移。第一次为0的情况影响数据
if(RW_SID)//当端口为高的时候
dat++;//dat+1相当于dat|=1 当端口为0的时候默认左移最低位是补零的,所以不用管
E_CLK=0;//循环8次后第一次接受到的数据就在最高位了
delay(100);
效果是一样的相对来说比较好理解
str2 = list1at(2)+","+list1at(3)+","+listat(4)//
我觉得问题可能在这 因为你每次读到得数据时不一样的 不能确保切割后都能分成4个 对list的越界访问造成程序崩溃 你可以把buf的内容输出看一下 看是不是能分割成四个!
以上就是关于怎么在c#应用程序中读取串口传送过来的数据全部的内容,包括:怎么在c#应用程序中读取串口传送过来的数据、有个51单片机关于12864串口显示读写程序求助(c语言)、QT下的串口编程我想从串口读数据,但是读第3次的时候程序自动崩溃了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)