27,375
社区成员
发帖
与我相关
我的任务
分享
#include<reg52.h>
sbit LED0=P0^0;
int i=4,j,flag=0;
unsigned int T=0,temp=1,start=0;
unsigned char buf,d[5];
void init();
void main()
{
unsigned char a,b;
unsigned int c;
TMOD=0x20;//设定定时器1为工作方式2,8位自装填
TH1=0xf3;
TL1=0xf3;//4800
REN=1;
SM0=0;
SM1=1;//10位异步收发波特率计算公式波特率=(2^SMOD/32)*(T1溢出率)
EA=1;
ES=1;
TR1=1;
while(1)
{
if(start==1)
{
ES=0;
SBUF=d[0];
while(!TI);
TI=0;
SBUF=d[1];
while(!TI);
TI=0;
SBUF=d[2];
while(!TI);
TI=0;
SBUF=d[3];
while(!TI);
TI=0;
SBUF=d[4];
while(!TI);
TI=0;
ES=1;
for(c=T;c>0;c--)//T为脉冲个数
{
for(b=12;b>0;b--)
for(a=248;a>0;a--);
LED0=1; //延时一个机器周期
for(b=12;b>0;b--)
for(a=248;a>0;a--);
LED0=0; //延时一个机器周期
}
start=0;
T=0;
}
}
}
void UART(void) interrupt 4
{
buf=SBUF;
for(j=0;j<i;j++)
temp=temp*10;
T=T+((buf-48)*temp);
d[4-i]=buf;
i--;
temp=1;
if(i==-1)
{
i=4;
start=1;
}
RI = 0;
}
代码的问题,缓冲区是怎么处理的,仔细看看。