MSComm1.InputMode = 1
MSComm1.InputLen = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 0oncomm事件中,接受事件如下:
...
Case comEvReceive ' 收到 Rthreshold 个字符。
N = MSComm1.InBufferCount
m = m + N ’此处设置断点
MSComm1.InputLen = 1
For I = m - N To m - 1
Afifo = MSComm1.Input
A(I) = Afifo(0)
Next I
....下位机向上位机发送133个字节数据,我在m = m + N 设置断点
程序运行到m = m + N停下来时,发现InBufferCount=133(这个结果应该是正确的),可是N=8(这也太奇怪了吧?)难道上面一句N = MSComm1.InBufferCount没执行??哪位高手知道啊?
MSComm1.InputLen = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 0oncomm事件中,接受事件如下:
...
Case comEvReceive ' 收到 Rthreshold 个字符。
N = MSComm1.InBufferCount
m = m + N ’此处设置断点
MSComm1.InputLen = 1
For I = m - N To m - 1
Afifo = MSComm1.Input
A(I) = Afifo(0)
Next I
....下位机向上位机发送133个字节数据,我在m = m + N 设置断点
程序运行到m = m + N停下来时,发现InBufferCount=133(这个结果应该是正确的),可是N=8(这也太奇怪了吧?)难道上面一句N = MSComm1.InBufferCount没执行??哪位高手知道啊?
因为下位机的发送不一定是“均匀的”,而PC机的速度是很高的,所以在你执行到
N = MSComm1.InBufferCount时,有可能只接收了8个字符,但你在m = m + N停下来后,就会有足够的时间接收到完所有的字符,所以发现InBufferCount=133。
通常,需要加入一个或多个延时与接收的循环,以保证你能接收所有的信息