单片机通过串口接收数组,对数组判断后返回一串数组。现在出现接受数组需要发送好几次才能收到,返回数组也会出现数据丢失现象,需要发送多次才能出现返回数据,并且返回数据也有丢失。程序如下,求大神指点哪里有问题:
#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 Ini
tialUART0_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;
}
}
}
我也不知道怎么解决,我是在数据中加几个验证位来确定收到的数组是否正确~
一周热门 更多>