怎么在c#应用程序中读取串口传送过来的数据

怎么在c#应用程序中读取串口传送过来的数据,第1张

//创建一个串口通讯

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次的时候程序自动崩溃了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9713651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存