大家。
我使用的是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的增量与传输无关。
满怀期待。
此致 哈桑
答案 0 :(得分:0)
uart传输的隐藏元素是:
_ _ 在您发送的每个字节之间稍加延迟 _ _
请注意,这是波特率独立秘密;)。
例如50微秒。
由于发送者和接收者正在异步工作,他们在接收时会花费太多精力来同步每个字节,并且你继续填充它们......它们只是停顿。有时丢弃字节,有时丢弃它而不清除接收寄存器,因此重复字节。
因此,如果速度至关重要,首先给出每个字节50ms或更多的发送延迟,然后如果它的工作范围变窄,例如将其降低到10微秒。继续缩小它直到它再次开始失速,并且最好将延迟设置为故障安全限制的两倍。
我不希望匆忙或挨饿以获得速度,否则使用另一个沟通渠道而不是usart。