办不到!
串口通讯是8位数据,所以一次只能发送一个字符。
如果你的判断控制需要一次性123456,则可以在发送完字符串后,加上结束符,一般是回车符,就可以了。即:在没有接收到回符之前,程序一直等接收并保存,直到接收到回车符,才开始判断控制,结果就相当于一次性获得了那些字符一样。我有这样的一个程序,你看看:
#include<reg51.h>
unsigned char code PuZh1[] = "我的51单片机串口实验----发送字符串\r\n";
unsigned char i,j,k;
unsigned char DD[10];
void UsartConfiguration();
void Delay10ms(unsigned int c);
void Out_Data (unsigned char Data[]);
void main()//主函数
{
UsartConfiguration();//设置串口
Delay10ms(10);
i=0;
while(1)
{
if (RI==1)
{
RI=0;
k=SBUF;
if (k!='\n')//不是结束符
{
DD[i]=k;
i++;
if (i>9)
{
i=0;
}
}
else
{
DD[i]=k;
i=0;
if ((DD[0]=='1')&&(DD[1]=='2')&&(DD[2]=='3')&&(DD[3]==0x0d)&&(DD[4]==0x0a))//接收到的是字符123回车
{
j=sizeof(PuZh1);
Out_Data(PuZh1);
Delay10ms(50);
}
j=sizeof(DD);
Out_Data(DD);
Delay10ms(50);
}
}
}
}
void UsartConfiguration()//设置串口
{
SCON=0X50;//串口通信设置为工作方式1
TMOD=0X20;//设置定时器1工作方式2
PCON=0X80;//波特率加倍
TH1=0XF3;//计数器初始值设置,注意波特率是4800的
TL1=0XF3;
TR1=1;//打开计数器
}
void Delay10ms(unsigned int c)//延时10ms
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
void Out_Data (unsigned char Data[])//发送字符串子函数
{
unsigned char i;
for (i=0;i<j;i++)
{
SBUF = Data[i];
while (!TI);
TI = 0;
}
k=0;
}
|