- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-05-09 13:43:26
已绑定手机
新手上路
- 积分
- 11
|
MCU端串口一直接收数据,上一次接收的数据还没接收完,就又收到新的数据,然后单片机端一直不执行反馈信息给串口助手端,这个问题是啥情况呀?正常代码是mcu端每接收完一次数据先返回一个数给PC串口助手端,现在就mcu还没返回信息给串口助手端,MCU就又接到新的数据。导致后面都不在返回数据了,而且也MCU也收不到数据了。代码串口是中断方式。下面是串口的中断函数和main函数部分代码
main()
{
.........
....
while(1) {
unsigned char *p = ReadUart(); //½ÓÊÕ»º³åÇøµÄÊý¾Ý
#if 1
lock_buf[0] = p[0]; //Ö¡Í·
lock_buf[1] = p[1]; //½âÎö»º³åÇøÊý¾Ý,µÚ¼¸¸ö°å¿¨
lock_buf[2] = p[2]; //½âÎö»º³åÇøÊý¾Ý£¬µÚ¼¸¸öËø
delay_ms(50);
if(lock_buf[0] == 0xAA){
if(lock_buf[1] == 1) //
{
lock_buf_test[0] = 0xbb; //Ö¡Í·
lock_buf_test[1] = lock_buf[1]; //½âÎö»º³åÇøÊý¾Ý,µÚ¼¸¸ö°å¿¨
lock_buf_test[2] = lock_buf[2]; //½âÎö»º³åÇøÊý¾Ý£¬µÚ¼¸¸öËø
WriteUart(lock_buf_test,3);
Lock_open_conctrl(lock_buf[2],1);
delay_ms(50);
Lock_open_conctrl(lock_buf[2],0);
}else{
COMD485[0]=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[RX1_Cnt] = 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);
}
}
}
|
|