PIC18F452 UART帧结构问题

时间:2013-04-16 04:04:45

标签: pic uart

大家。

我使用的是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的增量与传输无关。

满怀期待。

此致 哈桑

1 个答案:

答案 0 :(得分:0)

uart传输的隐藏元素是:

_ _ 在您发送的每个字节之间稍加延迟 _ _

请注意,这是波特率独立秘密;)。

例如50微秒。

由于发送者和接收者正在异步工作,他们在接收时会花费太多精力来同步每个字节,并且你继续填充它们......它们只是停顿。有时丢弃字节,有时丢弃它而不清除接收寄存器,因此重复字节。

因此,如果速度至关重要,首先给出每个字节50ms或更多的发送延迟,然后如果它的工作范围变窄,例如将其降低到10微秒。继续缩小它直到它再次开始失速,并且最好将延迟设置为故障安全限制的两倍。

我不希望匆忙或挨饿以获得速度,否则使用另一个沟通渠道而不是usart。