关于单片机串口接受数组

2019-07-15 16:30发布

单片机通过串口接收数组,对数组判断后返回一串数组。现在出现接受数组需要发送好几次才能收到,返回数组也会出现数据丢失现象,需要发送多次才能出现返回数据,并且返回数据也有丢失。程序如下,求大神指点哪里有问题:
#include<stdio.h>
#include "jidianqi.h"
#include "n79e81x.h"
#include "typedef.h"
#include "define.h"
#include "version.h"
#include "Common.h"
#include "Delay.h"
#include <intrins.h>
#define FOSC_221184
#define S_ADDR 0X01

bit recive_com=0;
unsigned char *ptr;

bit send_com=0;
bit k_diver=1;
unsigned char cntxd;
unsigned char recive_dat[6];
unsigned char  send_dat[6]={0xaa,0x01,0x40,0x0c,0x00,0xbb};

void InitialUART0_Timer1(UINT32 u32Baudrate)
{
    SCON = 0x52;
        TMOD |= 0x21;
        TH0=0X0D;
        TL0=0X67;
        ES=1;
    EA=1;
    TR1=1;
    TR0=1;
    ET0=0;
    ET1=0 ;

#ifdef FOSC_110592
    TH1 = 256 - (28800/u32Baudrate); /* 11.059M/384=28800 */
#endif
#ifdef FOSC_184320
    TH1 = 256 - (48000/u32Baudrate); /* 18.4320M/384=48000 */
#endif
#ifdef FOSC_221184
     TH1 = 256 - (57600/u32Baudrate); /* 22.1184M/384=57600 */
#endif
#ifdef FOSC_331776
     TH1 = 256 - (86400/u32Baudrate); /* 33.1776M/384=86400 */
#endif
#ifdef FOSC_368640
     TH1 = 256 - (96000/u32Baudrate); /* 36.8640M/384=96000 */
#endif
    TR1 = 1;
}

void delay(int z)                 
{
        int x,y;
        for(x=z;x>0;x--)
                for(y=125;y>0;y--);
}

void main()
{
    InitialUART0_Timer1(9600);

        while(1)
        {
         
          if(recive_com==1)
          {
             recive_com=0;
                 cntxd=sizeof(send_dat);ptr=send_dat;TI=1;                  
          }
        }


}
void UART1_int() interrupt 4
{
    static unsigned char count;
        if(RI)
        {
          RI=0;
          recive_dat[count]=SBUF;         
          if(count==0&&recive_dat[count]==0xaa)
          {
             count=1;                 
          }                                       
          else if(count==1&&recive_dat[count]==0x01 )
          {
             count=2;
          }
          else if(count==2 &&recive_dat[count]==0x40)
          {
             count=3;
          }
          else if(count==3 )
          {
             count=4;
          }
          else if(count==4)
          {
             count=5 ;
          }
          else if(count==5 )
          {
             count=0;
                 recive_com=1;

          }
        }
        if(TI)
        {
           TI=0;
           if(cntxd>0)
           {
              SBUF=*ptr;
                  cntxd--;
                  ptr++ ;
                  send_com=1;
           }
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
格古洛
1楼-- · 2019-07-15 17:55
我之前用nRF2401也是这样的,我要发一百几十次才能正确收到一次~
我也不知道怎么解决,我是在数据中加几个验证位来确定收到的数组是否正确~
bx2008
2楼-- · 2019-07-15 20:57
 精彩回答 2  元偷偷看……
bx2008
3楼-- · 2019-07-15 23:16
bx2008 发表于 2015-7-27 08:33
解决了吗,这个不实用啊

换了个usb口之后好了,这是什么情况啊,电脑问题

一周热门 更多>