C51的串口中断处理子程序
扫描二维码
随时随地手机看文章
此串口处理程序是基于以下的协议写成的:
帧内容FRAME=帧头FA+帧长度len(不包括帧头帧尾)+数据流data+帧尾FB。
串口中断子程序里对整个数据流进行处理,而不是一个字节一个字节地处理,在中断中等待处理完所有的字节。
void Uart_Int(void) interrupt 4 //串口要加帧头与FA帧尾FB
{
unsignedchar len, i;
unsignedint j=0;
unsignedchar serialStart;
if(RI) //收到数据
{
serialStart=SBUF;
RI=0;
if(serialStart==0xFA)
{
while(RI==0);
len=SBUF; //第一个字节是数据包的长度
RI=0; //清零RI以便接收下一个
for(i=0;i
while(!RI)
{
j++;
if(j>1000)
{
break;//break跳出循环语句
}
}
if(j<1000)
{
serialBuffer[i]=SBUF;
RI=0;
j=0;
}
else
{
break;
}
}
if((i==len+1)&&(serialBuffer[i-1]==0xFB)) //最后一位是0xFB。
{
REN=0; // 清零接收位
serialCmd=TRUE; //接收完毕,收到命令有效,置位1 又说明pc发送的数据单片机接收成功
}
else
return;
}
else
return;
}
else if(!RI && TI) //发送-RI=0,TI=1
{
TI=0;//TI是为了进入中断而故意软件设置的,所以先清0
SBUF=0xFA;
while(!TI);
TI=0;
len=serialBuffer[0]; //发送的第一个字节是包的长度
for(i=0;i
SBUF=serialBuffer[i];
while(!TI); //等待发送完毕
TI=0;
}
SBUF=0xFB;
while(!TI);
TI=0;
REN=1;
//ren=receive enable
}
}