SOS!!!!!用RS485串口通信,PC接上51。设置串口助手的自动发送周期为10ms,PC发送一串数据单片机返回一串应答码??
单片机运行不到0.5s便重启?????
程序开始运行时设置了开始声响,LED灯由暗变亮~~~~死机后,程序竟跳到main开始!!??
是不是单片机在发送,而串口助手也在发送,导致数据出错,而影响到单片机???
换了其他的51型号也是如此。计算过之后,单片机发送回来的数据有23个字节,波特率是19200,单片机发回来大概需要9.5ms,串口发送19个字节,需要8.0毫秒,加起来大概需要18ms。而串口利用自动发送,发送周期需要大于等于18ms,单片机才不会死机,重启。否则,小于18ms的就会死机,重启。
这是溢出问题吗???或者是其他原因???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个是发送程序,串口通信则屏蔽485线
void RS485_Send(uchar Data)
{
TI=0;
// RS485_TXDEN = WRITE_485;
SBUF = Data; //send data to buffer
while(!TI);
TI=0; //reset End-send flag bit
// RS485_TXDEN = READ_485;
}
中断处理函数
/***********************************************
* Name: Receive_Data(ucahr Data)
* Describe: main fuction
* Return: None
***********************************************/
void Receive_Data(uchar Data)
{
if(Rec_Count>=REC_BUF_LENGTH-2) Rec_Count=0;
else
Rec_Buf[Rec_Count]=Data;
if(Rec_Buf[0] == DATA_HEAD) Rec_Count++; //count from Data_Head
}
中断程序
void USRAT_int() interrupt 4
{
uchar Data;
EA=0;
if(RI)
{
Data = SBUF;
// RS485_Send(Data);
Receive_Data(Data);
RI=0;
}// end of if(RI)
EA=1;
}
楼上的经典
但是怎么在不正常的做不正常的事。
很明显的问题是Receive_Data中的else是多余的,uart中断没clr TI,
但是这两个都不至于导致复位
一周热门 更多>