急求解答,C#串口通讯的问题,如何在串口不关闭的情况下改变奇偶校验???
如题,我是用VS2010,用里面封装好的SerialPort类实现串口通讯,而且有个要求,假如我发送一个字节数组byte[]b=newbyte[]{0x01,0x03,0...
如题,我是用VS2010,用里面封装好的SerialPort类实现串口通讯,而且有个要求,假如我发送一个字节数组byte[] b = new byte[]{0x01,0x03,0x00,0x14,0x00,0x01,0x0E,0xC4};分两次发送,其中发送0x01的时候,奇偶校验设置为1(mark),代表地址,发送另外7的字节的时候奇偶校验设为0(space),代表数据。我是这样写的:
byte[] b = new byte[]{0x01,0x03,0x00,0x14,0x00,0x01,0x0E,0xC4};
SerialPort sp = new SerialPort("COM1",2400,Parity.Mark,8,StopBits.One);
sp.Open();
sp.Wirte(b,0,1);
sp.Close();
sp.Parity = Parity.Space;
sp.Open();
sp.Write(b,1,b.Length - 1);
这样写可以实现,但是中间改奇偶校验的时候必须把串口关掉,这样一关一开之间60多毫秒就浪费掉了,请高手解答一下,能不能在串口不关闭的前提下改变奇偶校验,有没有其他的方法节省这个时间啊??? 展开
byte[] b = new byte[]{0x01,0x03,0x00,0x14,0x00,0x01,0x0E,0xC4};
SerialPort sp = new SerialPort("COM1",2400,Parity.Mark,8,StopBits.One);
sp.Open();
sp.Wirte(b,0,1);
sp.Close();
sp.Parity = Parity.Space;
sp.Open();
sp.Write(b,1,b.Length - 1);
这样写可以实现,但是中间改奇偶校验的时候必须把串口关掉,这样一关一开之间60多毫秒就浪费掉了,请高手解答一下,能不能在串口不关闭的前提下改变奇偶校验,有没有其他的方法节省这个时间啊??? 展开
展开全部
我没用C#做过串口程序,以前倒是经常写单片机里的串口通讯,我觉得奇偶校验是单片机或者上位机的程序里处理的东西,应该和串口本身没太大关系(就一个RS232电路),以前做动态改变奇偶校验的功能的时候,是和时钟线数据线结合起来做的,比如你把数据线拉高持续多少微秒,或者拉低多少微秒,然后上位机或者单片机接受到这种信号后,动态的执行某个不同的处理,处理奇偶校验的功能是在双方程序里写的。这样即使不用复位也能够让接收方即时的接收到改变奇偶校验的事件。 如果非得用C#开发,用C#的计时器或者sleep()试试,但前提是接收方设备或者上位机是可编程的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询