首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >8051 UART,串行接收字节

8051 UART,串行接收字节
EN

Stack Overflow用户
提问于 2012-08-10 19:37:41
回答 4查看 2.1K关注 0票数 0

我必须将文件逐个字节地从计算机(VB.NET)发送到串行连接的AT89s52。

在微控制器中,每个发送的字节都有一些工作要做,这需要一些时间。

下面是我的C代码中与接收字节相关的部分:

代码语言:javascript
复制
SCON = 0x50;
TMOD = 0x20; // timer 1, mode 2, 8-bit reload
TH1  = 0xFD; // reload value for 9600 baud
TR1  = 1;
TI   = 1;

again:

        while(RI!=0)
        {
            P1=SBUF;          // show data on led's
            RI=0;
            receivedBytes++;
        }

        if (key1==0)
        {
            goto exitreceive; // break receiving
        }

        show_lcd_received_bytes(receivedBytes); 
        // here is one more loop 
        // with different duration for every byte
        goto again;

下面是用于发送字节的VB.NET代码:

代码语言:javascript
复制
    For a As Integer = 1 To 10
        For t As Integer = 0 To 255
            SerialPort1.Write(Chr(t))
        Next t
    Next a

问题是,在每个接收字节之后,mC有一些工作要做,而VB.NET不知道这一点,并且发送字节太快了,所以在mC中只完成了所有字节的一部分(大约10%)。我可以将“睡眠(20)”合并到VB循环中,然后事情就会正常工作,但我有很多浪费的时间,因为每个字节需要不同的时间来处理,这将是不可接受的缓慢通信。

现在,我的问题是,8051是否可以在发送之前在UART上设置一些VB可以读取的忙状态,以决定是否发送字节。或者如何建立如上所述的通信?我还尝试在mC端使用串行中断接收字节,结果相同。

硬件当然可以,因为我可以很好地将数据发送到计算机(正如预期的那样)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-11 01:07:03

您的问题是架构问题。不要试图在处理字节Rx的中断中处理接收到的数据。使字节Rx中断仅将接收到的字节复制到单独的Rx数据缓冲区,并具有一个后台任务,该任务在不阻塞Rx中断处理程序的情况下执行输入数据的实际处理。如果由于总体吞吐量问题而跟不上,那么RTS/CTS流量控制是合适的机制。例如,当Rx缓冲区达到90%已满时,取消断言流控制信号以暂停发送端。

票数 1
EN

Stack Overflow用户

发布于 2012-08-10 20:05:57

过去,我记得使用break来调试这类东西时,使用了串行线跟踪器。

使用串行通信时,如果所有引脚/线路都已使用,则可通过RTS (准备发送)和DTR (数据终端就绪)进行流量控制,用于在可以发送更多数据时发出信号。在你用C编写代码的设备中,你能控制它吗?在VB.NET中,有用于接收这些信号的事件,或者可以使用SerialPort对象上的属性来查询它们。

票数 1
EN

Stack Overflow用户

发布于 2012-08-11 11:09:03

正如@TJD提到的,硬件流控制可用于在微型计算机处理接收到的字节时停止PC发送字符。在过去,我通过使用可用的端口线作为输出来实现硬件流。输出需要连接到TTL转RS-232驱动器(如果您当前使用的是RS-232,则可能有额外的驱动器可用)。如果您使用USB虚拟串行端口或RS-422/485,则需要实现软件流控制。通常,发送control-S来通知PC停止发送,发送control-Q来继续发送。为了充分利用流控制,您很可能还需要实现一个完全中断驱动的FIFO来接收/发送字符。

如果您想了解有关硬件流控制的更多信息,请查看http://electronics.stackexchange.com

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11900866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档