微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 写的一个扩展串口的程序,发多字节,点三次发送才收到...

写的一个扩展串口的程序,发多字节,点三次发送才收到...

时间:10-02 整理:3721RD 点击:

写的一个扩展串口的程序,发多字节,点三次发送才收到一次,请问这是什么原因吖?
void send(unsigned char *buf,unsigned char n)
{
unsigned char i;
ES=0;
for(i=0;i<n;i++)
{
SBUF=buf;
while(TI==0);
TI=0;
}
ES=1;
TXflag=1;
}
void GM8123_Read(uint8 *buff)   //读数据
{
//memset(buff,0,sizeof(buff));
if(RXflag==0x01)  //子通道1
{
  RXflag=0;
  while(ReadMark!=ReceiveLength1)//若缓存数据有变化,则进入
  {
  buff[DatLength]=table_receive1[ReadMark];
  buff[DatLength+1]='\n';
  DatLength++;
  ReadMark=++ReadMark&0x1f;
  EndFlag=100;
  ReadFlag=BEGIN;
  }
if(ReadFlag==BEGIN)
{
  if(EndFlag==0)
   {
    DatLength=0;
    ReadFlag=STOP;//yizu数据读取结束
   }
  else
   {
    EndFlag--;
     }
  }
}
else if(RXflag==0x02) //子通道2
{
  RXflag=0;
while(ReadMark!=ReceiveLength2)//若缓存数据有变化,则进入
{
  buff[DatLength]=table_receive2[ReadMark];
  buff[DatLength+1]='\n';
  DatLength++;
  ReadMark=++ReadMark&0x1f;
  EndFlag=100;
  ReadFlag=BEGIN;
  }
if(ReadFlag==BEGIN)
{
  if(EndFlag==0)
   {
    DatLength=0;
    ReadFlag=STOP;//yizu数据读取结束
   }
  else
   {
    EndFlag--;
     }
  }
}
  else if(RXflag==0x03)
  //子通道3类似,在此就不在写出
}
void main()
{
GM8123_Init();
  while(1)
{
  ES=0;
  GM8123_Read(UpData);
  if(UpData[0]==0x56&&UpData[1]==0x00&&UpData[2]==0x34&&UpData[3]==0x01&&UpData[4]==0x00)
  GM8123_Write(0x02,UpData);
  ES=1;
  }
}

金币啊啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top