我用STC89C52,接收数据,但是用串口调试助手连续发送数据的时候,一次发送一个字节,但是单片机一次只能接收2次,?怎么会这样?
void MAIN_RS_INT(void) interrupt 4 using 3 //串口通讯中断函数{ uchar DataTemp; uchar i; if(RI) // 接收 { RI = 0; DataTemp = SBUF; /************************************/
switch (ReceState) { case 0: //开始 Send_data(temp3); break; case 1: Send_data(temp4); ReceState = 2; } break; case 2: Send_data(temp5); } ReceState = 3; break; case 3: Send_data(temp6); ReceState = 0; break; default: temp=0; ReceCount=0; ReceState=0; break; }
}
你好,我是初次,使用STC,想问问你,这个循环队列接收,具体怎样啊?能给一个简单的例子吗?
谢谢
我手上没有现成的程序,就是做一个数组,和一个当前存放数据索引号,每一次中断进来都先把数据接收放到索引号对应的数组位置中(索引号记得要变),main函数中判断数组有接收未处理的数据,就对接收内容处理。
这个跟STC单片机没关系
刚经过测试,应该是串口接收的中断函数占据了较长的时间,因为,我这里贴出来的是经过精简的,把处理函数精简后,能连续接收。想问问,串口中断处理函数如果要处理比较多的数据,就会终止下一次的接收吗?
追答不会终止,但可能会接受不到或不全,串口中断函数可以在数据之间加nop()指令延时。这样便于数据接受处理