串口接受数据通过起始位和结束位来判断

来源:互联网 发布:天津教研室网络平台 编辑:程序博客网 时间:2024/05/21 02:49
/*******************************************************************************
* 实验名   : 串口实验
* 使用的IO     : P2
* 实验效果       : 将接收到发送回电脑上面。
* 注意
*******************************************************************************/


#include<reg51.h>
#include<stdio.h>
#include<string.h>

int num=0;

static int begin=0;
char array[30];//数组
static int count=0;//数组计数
int flags;

//--声明全局函数--//
void UsartConfiguration();
/*******************************************************************************
* 函 数 名         : main
* 函数功能   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/




void main()
{
UsartConfiguration();
while(1)
{
 
}
}
/*******************************************************************************
* 函 数 名         :UsartConfiguration()
* 函数功能   :设置串口
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/


void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X00; //波特率加倍
TH1=0XFd;    //计数器初始值设置,注意波特率是4800的
TL1=0XFd;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1;    //打开计数器
}


/*******************************************************************************
* 函 数 名         :Delay(unsigned int i)
* 函数功能   : 延时函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Usart() interrupt 4
{


unsigned char temp;
RI = 0; 
temp=SBUF;


if(temp==0x90||temp==0x80||begin==1)//如果是0x90或0x80表示起始位,则接下来的数据都是要接收的,如果begin是1也表示是要接收的
   {
begin=1;
      //flag=0;


            if(temp!=0xff)
              {
                array[count]=temp;
                   count++;
               }

             if(temp==0xff)//停止位
                {
                   begin=0;
          array[count]=0xff;
 
                 flags=1;
                //return(array);                  

          for(temp=0;temp<(count+1);temp++)

SBUF=array[temp]; //将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
      
count=0;  
                   
                }
       }
}
0 0
原创粉丝点击