PIC单片机串口不能连续收发

来源:百度知道 编辑:UC知道 时间:2024/06/02 01:32:42
PIC串口采用中断方式收数据,要接收的报文格式是连续8个16进制数据,比如0x02 0x03 0x00 0x00 0x00 0x06 0XC5 0xFB
但每次只能从串口助手发一个,然后删掉刚发那个再发第二个,直到发完8个
如果一次发一串 则得到的数据部正确 这是什么原因呢?我需要的是一次能收一串

串口中断接收程序如下:
if(RCIF==1)
{
v = RCREG; rxstr[rx_count]=v;
PrintChar(rxstr[rx_count]);
rx_count++;
if(rx_count >7)
testcomflag =1;
}
RCIF=0;
RCIE=1;
是PIC和串口助手通信,但不能一次从串口助手那收一串数据,只能一个字节一个字节地收才正确
我想要解决的是单片机一次可以从串口收一串数据

给你个例子,pic16f77 usart的驱动;
http://blog.ednchina.com/warden/236267/message.aspx
上面例子是用轮循方式做的,在很多地方有限制。

PIC的USART使用发送中断时要注意:Once the TXREG register transfers the data to the TSR register(occurs in one TCYCLE), the TXREG is empty and interrupt bit TXIF (PIR1<4>) is set。就是只要TXREG里没有数据就会置TXIF中断标志。

你可以这样实现:先把TX中断关了,把要发的数据放入一个定义好的TX_BUF[]中,然后再开TX中断,把TX_BUF发出,发完之后再关TX中断!

希望对你有点帮助。

if(RCIF==1)
{
v = RCREG;
rxstr[rx_count]=v;
PrintChar(rxstr[rx_count]);//PrintChar的原型是什么???
rx_count++;
if(rx_count >7)
testcomflag =1;
}
// RCIF=0; 去掉这两句,没必要+上去
// RCIE=1;

1。把最后两句去掉
2。你的PintChar原型是什么?

我看我的博客。
我用的是51,你看看就明白了