在做一个小实验,用串口调试发送一串数据,12866显示出串口发送的数据,同时单片机把发送的数据在发回串口调试的接收区,其中碰到一个很大的难题就是串口发送回来的数据要怎样存在一个数组呢?看了很多资料还没搞懂,c语言有点弱,求大神指导下,程序如下:
现在主程序主要是显示,中断程序里主要实现接收串口来的数据,并把数据存入数组,且发回上位机,显示的先不管,还没调,现在的问题是
如果使用 sendchar(SenData);可以把数据完整发回上位机,使用sendstring(SystemBuf); 发回来的数据不对而且乱,说明存入数组是有错,但不知道错在哪,求各位大神指导下了,先谢谢了!
void sendchar(uchar ch) //串口送一个字节
{
SBUF=ch;
while(TI==0);
TI=0;
}
void sendstring(uchar *p) //送字符串
{
while(*p!='\0')
{
sendchar(*p);
p++;
}
}
void main (void)
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
lcd_init(); //初始化LCD
while(1)
{
// if (Flag==1)
{
lcd_pos(1,0);
for(i=0;i<16;i++)
{ lcd_wdat(SystemBuf[i]);
delay1(1);
}
}
}
}
/****************************************************
串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
ES=0;
RI = 0; //清除RI接受中断标志
ReData = SBUF; //SUBF接受/发送缓冲器
SystemBuf[Rx++]=SBUF;
Rx=Rx&0X0F;
SenData=ReData;
Flag=1;
ES=1;
}
if (Flag==1)
{
ES=0;
sendchar(SenData);//单片机发送一个字节
//sendstring(SystemBuf); //单片机发送字符串
//
Flag=0;
ES=1;
}
}
|