微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于单片机串口接受数组

关于单片机串口接受数组

时间:10-02 整理:3721RD 点击:
单片机通过串口接收数组,对数组判断后返回一串数组。现在出现接受数组需要发送好几次才能收到,返回数组也会出现数据丢失现象,需要发送多次才能出现返回数据,并且返回数据也有丢失。程序如下,求大神指点哪里有问题:
#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;
           }
        }
}

我之前用nRF2401也是这样的,我要发一百几十次才能正确收到一次~
我也不知道怎么解决,我是在数据中加几个验证位来确定收到的数组是否正确~

解决了吗,这个不实用啊

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

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

网站地图

Top