gpt4 book ai didi

c - USART 在 PIC18F2550 上崩溃,我该怎么办?

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:39 24 4
gpt4 key购买 nike

我正在研究 PIC18F4550 和带有一对 xBEE S2C 的 PC 的通信。和我正在使用 xc8 来编译代码。

我使用 Xbee 从 PC 向 PIC 发送一些字符,然后我发送一个“/r”,PIC 必须返回我发送的字符。它适用于 9 次迭代,然后崩溃。图片显示了
Serial Console (红字为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;
}
}
}

最佳答案

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

关于c - USART 在 PIC18F2550 上崩溃,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48753018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com