本帖最后由 江陵龙少 于 2011-4-25 22:18 编辑
思路基本是这样:单片机通过串口一桢一桢的接收数据,接收的每一帧定长10个字节
,我想实现的是,每帧的第一个字节到来时,进入中断,之后立即变为查询方式接收剩下的9个字节,请大家指点,能否可行?
#include <reg51.h>
unsigned char xdata SerialRecBuf[200];
unsigned char xdata InLine[10];
unsigned char xdata Rin;
bit Rfull;
//串口接收中断
void UartRecIsr(void) interrupt 4
{
if(RI&&~Rfull)
{
EA=0;
RI=0;
SerialRecBuf[Rin]=SBUF;
Rin++;
for(;;)
{
unsigned char i=200;
while(!RI)
{
i--;
if(i) continue;
else break;
}
if(RI)
{
RI=0;
SerialRecBuf[Rin]=SBUF;
Rin++;
}
else break;
}
if(Rin==10) { Rfull=1;Rin=0;}
else {Rin=0;Rfull=0;}
EA=1;
}
}
main()
{
//变量初始化
Rin=0;
Rfull=0;
//串口初始化
SCON=0x50;
TMOD=0x21;
TH1=0xfa;
TL1=0xfa;
TR1=1;
//开中断
EA=1;
ES=1;
for(;;)
{
if(Rfull)
{
P1=0x0a;
Rfull=0;
}
}
} |