单片机
返回首页

C51的串口中断处理子程序

2016-11-24 来源:eefocus

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

帧内容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
 }
}


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 光控音效发生器电路

  • 离子检测器电路分析

  • 非常简单的150W功放电路图

  • 基于IC555的可变PWM振荡器电路

  • 使用NE555和磁簧开关的橱柜照明电路

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章