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

2019-07-16 02:48发布

本帖最后由 hbdxzn 于 2013-1-10 14:53 编辑

写的一个扩展串口的程序,发多字节,点三次发送才收到一次,请问这是什么原因吖?
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]=' ';
  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]=' ';
  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;
  }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。