|
辦不到!
串口通訊是8位數(shù)據(jù),所以一次只能發(fā)送一個字符。
如果你的判斷控制需要一次性123456,則可以在發(fā)送完字符串后,加上結(jié)束符,一般是回車符,就可以了。即:在沒有接收到回符之前,程序一直等接收并保存,直到接收到回車符,才開始判斷控制,結(jié)果就相當(dāng)于一次性獲得了那些字符一樣。我有這樣的一個程序,你看看:
#include<reg51.h>
unsigned char code PuZh1[] = "我的51單片機(jī)串口實驗----發(fā)送字符串\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()//主函數(shù)
{
UsartConfiguration();//設(shè)置串口
Delay10ms(10);
i=0;
while(1)
{
if (RI==1)
{
RI=0;
k=SBUF;
if (k!='\n')//不是結(jié)束符
{
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()//設(shè)置串口
{
SCON=0X50;//串口通信設(shè)置為工作方式1
TMOD=0X20;//設(shè)置定時器1工作方式2
PCON=0X80;//波特率加倍
TH1=0XF3;//計數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF3;
TR1=1;//打開計數(shù)器
}
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[])//發(fā)送字符串子函數(shù)
{
unsigned char i;
for (i=0;i<j;i++)
{
SBUF = Data[i];
while (!TI);
TI = 0;
}
k=0;
}
|
評分
-
查看全部評分
|