C-从C8051F320通过串行端口接收UART数据的错误



我试图通过硅实验室在PC上获取数据c8051f320

我通常在Java中编程,所以如果我在某个地方错了C语言或MCUS理解,请纠正我。

这是我处理UART中断的代码

Unsigned char Byte;
unsigned char TX_Ready =1;
void UART0_Interrupt (void) interrupt 4{
if (RI0 == 1)// Check if Rec flag is set
{
            // Do nothing 
  }
 if (TI0 == 1)  {                 // Check if transmit flag is set
  SBUF0 = Byte;          // copy the character from Byte to Buffer
  TI0 = 0;               // Set Transmit flag to 0
 }
 }

这是我发送数据的方法

void SendData(){
unsigned char incoming_str[] = {'d','s','a','r'};   //array of chars to send
TX_Ready = 0;
for(i=0;i<sizeof(incoming_str);i++) { 
 Byte = incoming_str[i];
 TI0=1;

 } 

 }

第一个问题我以相反的顺序获取数据(是正常的)。第二个问题我在错误的数据中获得字符

这是一个输出样本:

asD

asD

asD

asS

aAD

asD

asD

asD

asD

asD

asS

aAD

asD

asD

asD

asD

asD

asS

aAD

asD

asD

asD

aS

一个公平的奇迹,它根本起作用。您没有采取任何行动来确保中断处理程序与senddata()循环同步。因此,预计会重复或消失。

两个基本方案。如果您不必担心延误,就像现在一样,那么您就不会使用中断。您只需循环直到扫描1 == 1,然后写sbuf。

如果您确实在乎延迟,则需要中断。您需要一个圆形缓冲区来存储字节。您的中断处理程序从缓冲区中拉出一个字节,并将其写入SBUF。如果缓冲区为空,则需要设置一个布尔以表明检测到中断但未维修。现在,您通过禁用中断来发送字节并附加要发送到圆形缓冲区的字节。如果设置了布尔标志,请立即将字节写入SBUF并清除标志。重新启用中断。

还检查时钟源 - 计算波特率/crytal ??

的失败比是多少

我曾经有两个AVR。由于我无法稳定时钟源,因此我通过发送"字节ff -byte"来实现一个简单的检查 - 就像接收器可以验证数据是否正确

相关内容

  • 没有找到相关文章

最新更新