我这几天做串口通讯的开发,使用串口助手能够接收到串口发送过来的数据,但是用SerialPort就接收不到数据
1个回答
展开全部
由于没写中断处理程序当发送完成后,触发串口中断进入0x0023地址处运行,就相当于复位了一次一样。所以会出现2次的情况。(第二次由于TI已经为1了所以不会触发中断)
解决方法
1、关闭串口中断
EA=0;
ES=0;
2、写一个串口中断处理函数
void UARTInterrupt(void) interrupt 4
{
if(RI)//RI标志位为1代表接收到数据
{
RI = 0 ;//清零接收标志位
//在这里添加中断处理函数
}
else
TI = 0;//如果RI不为1一般是发送完成中断 把TI(发送完成标志位)清零
}
发送完成后清零TI
SBUF = 'i';
while(!TI);//等待发送完成
TI = 0;//发送完成后清零TI
这样就可以实现多个字节发送不会造成冲突
解决方法
1、关闭串口中断
EA=0;
ES=0;
2、写一个串口中断处理函数
void UARTInterrupt(void) interrupt 4
{
if(RI)//RI标志位为1代表接收到数据
{
RI = 0 ;//清零接收标志位
//在这里添加中断处理函数
}
else
TI = 0;//如果RI不为1一般是发送完成中断 把TI(发送完成标志位)清零
}
发送完成后清零TI
SBUF = 'i';
while(!TI);//等待发送完成
TI = 0;//发送完成后清零TI
这样就可以实现多个字节发送不会造成冲突
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询