据我目前对串行端口的了解,数据传输是通过插脚3完成的。如图所示:
有两件事让我不舒服。第一,这似乎意味着两个连接的设备在一个信号速度上是一致的,第二,即使它们被配置成以相同的速度运行,也会遇到可能的同步问题…正确的?我想这类事情是可以处理的,但似乎必须有一个更简单的方法。
对我来说,一个更好的方法是让其中一个串行端口插脚发送一个脉冲,指示下一位已经准备好存储。因此,如果我们将这些管脚连接到移位寄存器,我们基本上有:(一些脉冲管脚)->CLK,TX->D
这是惯例吗?有什么理由不这么做吗?
编辑
迈克不应该删除他的答案。这一方法似乎相当接近我所做的。串行端口没有时钟,你说得对,但这基本上就是我做的。请参阅:
private void sendbytes(byte[]data)
{
int波特率=0;
int字节发送=0;
int位结束=0;
字节位掩码=0;
byte[]触发器=新字节[1];
触发器〔0〕=0;
串行端口P;
尝试
{
p=新序列端口(cmbports.text);
}
抓住
{
返回;
}
如果(!)int.triparse(txtbaudrate.text,out baudrate))返回;
if(波特率<100)返回;
P.波特率=波特率;
for(int index=0;index<data.length*8;index++)
{
byteToSend=(int)(索引/8);
bittosend=索引-(byteTosend*8);
位掩码=(byte)system.math.pow(2,bittosend);
p);
p.奇偶性=奇偶性空间;
p.rtsenable=(字节)(数据[字节发送]&位掩码)>0;
S=P.基流;
s.writebyte(触发器[0]);
p.关闭();
}
}
在有人告诉我这有多难看或者我是如何破坏我的转会速度之前,我的快速回答是我不在乎。我的观点是,这似乎比你在回答Nobugz中描述的方法简单得多。如果.NET serialport类能给我更多的控制pin信号的话,就不会那么难看了。还有其他的串行端口API吗?
有两件事让我不舒服。第一,这似乎意味着两个连接的设备在一个信号速度上是一致的,第二,即使它们被配置成以相同的速度运行,也会遇到可能的同步问题…正确的?我想这类事情是可以处理的,但似乎必须有一种更简单的方法。
对我来说,一个更好的方法是让其中一个串行端口插脚发送一个脉冲,指示下一位已经准备好存储。因此,如果我们将这些管脚连接到移位寄存器,我们基本上有:(一些脉冲管脚)->CLK,TX->D
这是惯例吗?有什么理由不这么做吗?
编辑
迈克不应该删除他的答案。这个I2C (2 pin serial)方法似乎与我所做的相当接近。串行端口没有时钟,你说得对,但这基本上就是我做的。请参见这里:
private void SendBytes(byte[] data)
{
int baudRate = 0;
int byteToSend = 0;
int bitToSend = 0;
byte bitmask = 0;
byte[] trigger = new byte[1];
trigger[0] = 0;
SerialPort p;
try
{
p = new SerialPort(cmbPorts.Text);
}
catch
{
return;
}
if (!int.TryParse(txtBaudRate.Text, out baudRate)) return;
if (baudRate < 100) return;
p.BaudRate = baudRate;
for (int index = 0; index < data.Length * 8; index++)
{
byteToSend = (int)(index / 8);
bitToSend = index - (byteToSend * 8);
bitmask = (byte)System.Math.Pow(2, bitToSend);
p.Open();
p.Parity = Parity.Space;
p.RtsEnable = (byte)(data[byteToSend] & bitmask) > 0;
s = p.BaseStream;
s.WriteByte(trigger[0]);
p.Close();
}
}
在有人告诉我这有多难看或者我是如何破坏我的转会速度之前,我的快速回答是我不在乎。我的观点是,这似乎比你在回答Nobugz中描述的方法简单得多。如果.NET serialport类能给我更多的控制pin信号的话,就不会那么难看了。还有其他的串行端口API吗?