辦不到!
串口通訊是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;
}
|