求大神解决,串口通信调试工具发出的一个字节和收回来的字节不一样

电脑与PIC单片机的UART1B收发口通信,电脑串口调试工具发送0x01发回来一个0xc0,
下面是接收中断的程序:
void __ISR(_UART_1B_VECTOR, IPL6SOFT) IntUart1BHandler(void) //
{
if (INTGetFlag(INT_SOURCE_UART_RX(UART1B)))
{
if (UARTReceivedDataIsAvailable(UART1B))
{
RecBuff1b[rec1b_cnt] = U1BRXREG;;
U1BTXREG = RecBuff1b[rec1b_cnt ++];
INTClearFlag(INT_SOURCE_UART_RX(UART1B));
}

}
if (INTGetFlag(INT_SOURCE_UART_TX(UART1B)))
{
    INTClearFlag(INT_SOURCE_UART_TX(UART1B));
}

}
运行之后发个01,得了个c0,而且RecBuff1b[0]=0xc0,是不是说明是接收寄存器U1BRXREG接收到的数据有问题,之后的部分是没问题的。
随后我发01 02 03 04 01 02 03 04,得到的是c0 e0 e0 f0 c0 e0 e0 f0。
所以我想知道为什么接收数据不正确呢?

4个回答

波特率之前是对应的19200,我刚刚调成对应是9600之后,电脑发送01 02 03 04 01 02 03 04,读到的变成了FE FC FC F8 FE FC FC F8。
这是不是可以说明点什么?

楼上似乎可以解决你的问题

cw937375431
cw937375431 大哥,问题就是我问的啊,我比较蠢,求解释啊
接近 5 年之前 回复

这是配置UART1B的函数内容:
void Init_UART1B()
{

INTEnable(INT_SOURCE_UART_RX(UART1B), INT_ENABLED); //UART1B接收器中断使能可用
INTEnable(INT_SOURCE_UART_TX(UART1B), INT_ENABLED); //UART1B发送器中断使能可用
INTSetVectorPriority(INT_VECTOR_UART(UART1B), INT_PRIORITY_LEVEL_5); //优先级5
INTSetVectorSubPriority(INT_VECTOR_UART(UART1B), INT_SUB_PRIORITY_LEVEL_0); //总线优先级0
U1BMODEbits.ON = 0; //禁止UART1B
// U1BMODEbits.FRZ=1;
U1BMODEbits.LPBACK = 0; //禁止回环模式
U1BMODEbits.BRGH = 0; //计算波特率模式选择BRGH=0(标准速度模式,使能16x波特率时钟)
U1BMODEbits.PDSEL = 0; //8位数据,无奇偶效验位
U1BMODEbits.STSEL = 0; //1个停止选择位
// U1BMODEbits.UEN=0;
U1BMODEbits.ABAUD = 0; //禁止波特率测量
U1BMODEbits.RXINV = 0; //U1BTX的空闲状态为1,若为1则U1BRX的空闲状态为0
U1BSTAbits.URXEN = 1; //使能UART1B接收器
U1BSTAbits.UTXEN = 1; //使能UART1B发送器
U1BSTAbits.URXISEL = 0; //接收中断模式选择00,Intrupt is generated while atleast one char
U1BSTAbits.OERR = 0;
U1BBRG = 246; //39 for 115200波特率 ,246 for 19200波特率
U1BMODEbits.ON = 1; //使能UART1B
}

1.串口调试助手上面波特率等相关参数应该与你程序中设置的相关参数值相对应;如果对应后还出现这个问题,那么你先测试下串口线有么有问题,测试方法:将串口线一端连接在PC机上,另一端将串口线的2脚和3脚短接,串口调试助手发送数据,查看串口调试助手上接收的数据是否与发送的数据一致,若一致,说明串口线没有问题,那
那么你应该查看程序了,将波特率先配置低,在1200到9600之间,串口调试助手参数配置与程序一致,再次测试,一般在出现问题就是你程序么理解的问题了,这只能自己解决了

cw937375431
cw937375431 谢谢
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐