AI8G单片机串口一直在接收数据时,出现接收不到数据现象
MCU端串口一直接收数据,上一次接收的数据还没接收完,就又收到新的数据,然后单片机端一直不执行反馈信息给串口助手端,这个问题是啥情况呀?正常代码是mcu端每接收完一次数据先返回一个数给PC串口助手端,现在就mcu还没返回信息给串口助手端,MCU就又接到新的数据。导致后面都不在返回数据了,而且也MCU也收不到数据了。代码串口是中断方式。下面是串口的中断函数和main函数部分代码main()
{
.........
....
while(1) {
unsigned char *p = ReadUart(); //½ÓÊÕ»º³åÇøµÄÊý¾Ý
#if 1
lock_buf = p; //Ö¡Í·
lock_buf = p; //½âÎö»º³åÇøÊý¾Ý,µÚ¼¸¸ö°å¿¨
lock_buf = p; //½âÎö»º³åÇøÊý¾Ý£¬µÚ¼¸¸öËø
delay_ms(50);
if(lock_buf == 0xAA){
if(lock_buf == 1) //
{
lock_buf_test = 0xbb; //Ö¡Í·
lock_buf_test = lock_buf; //½âÎö»º³åÇøÊý¾Ý,µÚ¼¸¸ö°å¿¨
lock_buf_test = lock_buf; //½âÎö»º³åÇøÊý¾Ý£¬µÚ¼¸¸öËø
WriteUart(lock_buf_test,3);
Lock_open_conctrl(lock_buf,1);
delay_ms(50);
Lock_open_conctrl(lock_buf,0);
}else{
COMD485=0xee;
WriteUart(COMD485,3);
}
memset(lock_buf,0,3);
memset(p,0,3);
delay_ms(50);
}
#endif
}
.....
.....
}
//========================================================================
// 函数: void UART1_int (void) interrupt UART1_VECTOR
// 描述: UART1中断函数
// 参数: none
// 返回: none
// 备注:
//========================================================================
void UART1_int (void) interrupt 4
{
/*
在模式0,当串口接收数据第8位结束时,由硬件自动将RI置1,并向主机请求中断,响应中断后,需要主动将RI清零
在其他模式,串行接收到停止为的中间时刻由硬件自动将RI置1,向CPU发中断申请,响应中断后RI必须由软件清零。
*/
//if(RI)
if((SCON & 1) != 0)
{
SCON &= ~1; //Clear Rx flag
//RI = 0;//Clear Rx flag
RX1_Buffer = SBUF;
if(++RX1_Cnt >= 3){
RX1_Cnt = 0;
//RI = 0;//Clear Rx flag
RS485_TX();
}
}
/*
在模式0,当串口发送数据第8位结束时,由硬件自动将TI置1,并向主机请求中断,响应中断后,需要主动将TI清零
在其他模式,则在停止位开始发送时由硬件自动将TI置1,向CPU发中断申请,响应中断后TI必须由软件清零。
*/
//if(TI)
if((SCON & 2) != 0)
{
SCON &= ~2; //Clear Tx flag
//TI = 0;//Clear Rx flag
if(++TX1_Cnt >= SendLength){
B_TX1_Busy = 0;
RS485_RX();
return;
}else{
SBUF = *(pSendData + TX1_Cnt);
}
}
}
建议打包上传工程,缺失关键代码
ReadUart
RS485_TX
RS485_RX 串口收发程序参考:
https://www.stcaimcu.com/thread-16321-1-1.html
https://www.stcaimcu.com/thread-4598-1-1.html 你好,工程上傳了,在附件,請下載分析,謝謝 你好,已经上传工程文件,请下载分析,谢谢
上一次接收的数据还没接收完,就又收到新的数据,这是设计协作不合理造成,发送方必须等一包数据发送完毕,才能发送下一包数据。
页:
[1]