×
单片机 > 单片机程序设计 > 详情

C51的串口中断处理子程序

发布时间:2020-06-04 发布时间:
|

此串口处理程序是基于以下的协议写成的:

帧内容FRAME=帧头FA+帧长度len(不包括帧头帧尾)+数据流data+帧尾FB。

串口中断子程序里对整个数据流进行处理,而不是一个字节一个字节地处理,在中断中等待处理完所有的字节。

void Uart_Int(void) interrupt 4   //串口要加帧头与FA帧尾FB      
{
    unsigned char  len, i;
   unsigned int  j=0;
 unsigned char    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
 }
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址