单片机接收串口的两个字节

我想通过电脑发送1000,继电器延时1000ms关闭,但是现在单片机只能接收一个字节,怎样才能接受两个字节?

#include <reg52.h> //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int
/* 变量定义 -----------------------------------------------*/
sbit relay=P0^1; //定义P0^1位为继电器relay的控制位
uchar num,count;
uint xms;
uchar xms[count];
/* 函数申明 -----------------------------------------------*/
void delay(uint xms);
void main()
{
TMOD=0x20; //用定时器设置串口波特率 9600
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1; //串口初始化
SM0=0;
SM1=1;
EA=1; //开启总中断
ES=1;
relay=0;
while(1)
{
if(num==1) //判断是否有串口数据的传送
{
RI=0;
relay=1; //打开继电器
delay(xms);
relay=0; //关闭继电器
num=0;
}

}
}
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);

}
void ser() interrupt 4
{

RI=0 ;

xms=SBUF;
num=1 ;
}

#include <reg51.h>
unsigned char Receive[]; //存储串口接收的数据
unsigned char Count = 0; //累加用
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xF3;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
//主程序
void main(void)
{
while(1)
{
InitUART();
P0 = Receive[0];
P2 = Receive[1];
}
}
//中断
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
Receive[Count] = SBUF; //用数组接收串口数据,一个BYTE。
Count++;
if(Count == 2){Count = 0;} //只接收两个,下次再接收覆盖。
}

}追问

这个不行呀,为什么还要用到P0和P2呢

温馨提示:答案为网友推荐,仅供参考
相似回答