1

我正在使用一对 xBEE S2C 与 PIC18F4550 和 PC 进行通信。我正在使用 xc8 来编译代码。

我用 Xbee 从 PC 向 PIC 发送一些字符,然后我发送一个“/r”,而 PIC 必须将我发送的字符返回给我。它工作了 9 次迭代,然后它崩溃了。图像显示
串行控制台(红色字符是 PIC 的响应)。

我试过重置 EUSART,但这似乎不起作用。在第 9 次迭代时总是失败。我已经阅读了 OERR 的一些帖子,我尝试了很多东西,但都没有解决我的问题。

编辑:***注意:如果包的传输间隔小于 1500 毫秒,则会出现此错误。我需要至少每 300 毫秒传输一次。

有人知道它可能是什么?谢谢

 #define _XTAL_FREQ 8000000
 volatile char bufferRx[60];
 volatile char bufferTx[60];
 volatile char dum;
 int RxFlag,ContRx, ContTx;

void interrupt isr()
{   
  if(RCSTAbits.OERR)
    {
      RCSTAbits.CREN = 0;
      RCSTAbits.CREN = 1;         
    }
x = RCREG;
if(x== 13)
  {    
   bufferRx[ContRx] = x;
   RxFlag=1;
  }
 else
 {
  bufferRx[ContRx] = x;
  }
 ContRx++;
 }
void main(void)
{
//////////////////////////////////////////////////////////////////
//CONFIGURACIONES

//OSCILLATOR
 OSCCONbits.IRCF= 0b111;
 OSCCONbits.SCS=0b10;
//PORTS    
 PORTB = 0;
 TRISB=1;
 TRISC=0b10000000;
//INTERRUPTIONS
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
PIE1bits.RCIE=1;
PIE1bits.TXIE=0;
PIR1bits.RCIF=0;
//RCSTA  TXSTA
RCSTAbits.SPEN=1;
RCSTAbits.RX9=0;
RCSTAbits.CREN=1;
TXSTAbits.BRGH=0;
TXSTAbits.SYNC=0;
TXSTAbits.TXEN = 1;
TXSTAbits.TX9=0; 
//BAUDRATE BAUDCON
BAUDCONbits.ABDEN = 0;
BAUDCONbits.WUE = 0;
BAUDCONbits.TXCKP = 0;
BAUDCONbits.RXCKP = 0;
BAUDCONbits.BRG16=0;
SPBRG=51;
//////////////////////////////////////////////////////////////////
while(1)
{ 
    while(RCSTAbits.FERR)
    {
     dum = RCREG;       
    }
    if(RCSTAbits.OERR)
    {
      RCSTAbits.CREN = 0;
      RCSTAbits.CREN = 1;         
    }
    ContTx=0;
    if(RxFlag==1)
    {           
          for(int x=0;x<ContRx;x++)
          {
        bufferTx[x] = bufferRx[x];
        TXREG=bufferTx[x]; 
         while(TXSTAbits.TRMT==0);
         {          
         __delay_ms(1); 
              bufferTx[x]= 00;
              bufferRx[x]= 00;
         }             
        ContTx++;
          }  
          RxFlag=0;
          ContRx=0;  
    }        
}       
}
4

1 回答 1

2

尽管您在 ISR 内部修改了一些全局变量并在外部使用它们,但您并没有在任何地方使用“volatile”关键字。

于 2018-02-12T18:40:14.577 回答