0

每个人。

我正在使用 PIC18F452 微控制器。我在 UART 上接收数据,通过附加额外的同步字对其进行帧化并传输它,我在按顺序发送同步字时遇到问题。我想要的是发送的话说... EA 09 C3 与数据。现在我用 MikroC 编写了这段代码:

int j=0;
SPBRG = 129;
TXSTA = 0b00100110;
RCSTA = 0b10010000;
while(1)
{
   if(j == 0)
   {
     TXREG = 0xEA;
   }
   else if(j == 1)
   {
     TXREG = 0x09;
   }
   else if(j == 2)
   {
     TXREG = 0xC3;
   }
   else
   {
    TXREG = RCREG;
   }
   while(!TRMT); // wait for whole data frame to be ready for transmission
  if(j == 100)
     j = 0; // reset j after 100 bytes
  else
     j++;
   }

现在这里发生的情况是同步字被传输但无序,有时还会发生字节重复。我想要的是 j 应该只在传输一个字节后递增,这里我认为 j 的递增与传输无关。

期待中的感谢。

问候,哈桑

4

1 回答 1

0

uart传输的隐藏规律是:

_ _在您发送的每个字节之间放一点延迟_ _

请注意,这是一个与波特率无关的秘密;)。

例如 50 微秒。

由于发送方和接收方正在异步工作,因此他们在接收时会花费太多精力来同步每个字节,而您一直在填充它们……它们只是停滞不前。有时会丢弃字节,有时会在不清除接收注册表的情况下丢弃它,从而复制字节。

因此,如果速度很关键,首先给每个字节 50 毫秒或更多的发送延迟,然后如果它可以缩小它,例如将其降低到 10 微秒。继续缩小它,直到它再次开始失速,最好将延迟设置为该限制的两倍以实现故障保护。

我希望不要着急或渴望速度,否则请使用其他通信渠道而不是 usart。

于 2013-04-19T22:05:41.527 回答