|
今天试了下PC通过串口发数据给51 (字符串,即多个字节)
有些问题, 以下是我的一些猜想
1.因为51的串口接收中断是在收到一帧后将RI置位请求中断,所以发送多字节至51时,51要产生多次中断才能接收完.
2.在PC中,我所知道的是操作系统会为每个串口开一个缓冲区,收到的数据都先存至这里. 而系统提供给我们的API, windows下的ReadFile ,Linux下的read. 应该都是从这个缓冲区里读数据.所以PC里不用及时地读串口数据,数据也不会丢失(根据以往经验的猜想).
3.相对PC,51的缓冲区似乎就只有一个SBUF.只有一个字节. 因此不及时读数据似乎会丢失.(因为我们51采集温度等数据大概需要一秒.这一秒应是需要严格的时序的,所以这一秒内必须关中断?) 按照这个我用
EA=0;
DelayM(1000); //1秒
EA=1;
模拟了这个情况.
发现我发的多个字节就只收到了第一字节.( 我猜想51对这个的处理maybe是:收完第一个字节,硬件置位RI,
由中断系统结构那个框图,因EA=0.通路断开,不能引发中断. 而后续的字节也许是因为R1为置位状态,表示当前帧末被处理.
而被51忽略了. 然后当1秒延时过后,EA=1.通路通了,马上引发中断.但此时数据已没了.
4.PC上似乎没有写缓冲区(好像也不需要),当上层调用Write发数据时是直接发的,并且不保证所发数据是否被接收方收到.
所以我想问问串口底层的一些问题, 不知我上面理解的对不对? 重点为红字吧.不对的话可纠正我.有补充的也希望能回帖一下..
另外,大家对PC给51发字符串有什么好方法么.. (在51还有其它东西也要处理的时候?)
|
|