在写一个串口接受多字节的一个程序时遇到了一个问题,我写程序使52单片机以9600波特率接受串口助手发送来的12个字节,然后再发回去,但是在程序启动时,单片机第一次收到数据并发回,发现在发回的数据中第一个字节变成了FF,而第12个字节丢失,第二次发送便正常了,这是为什么?
下面是我的程序
/*
串口发送多字节
for循环发送
*////////////////////////////////
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i,b;//串口接受标识,接受的数据,
//uchar code table[]="I get";//定义发送数组
uchar table1[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void lnit()//初始化
{
TMOD=0x20;//设置工作方式
TH1=0xfd;//设置初值
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;//开总中断
ES=1;//开串口中断
}
void main()
{
lnit();
while(1)
{
if(flag==1)//当接收到数据
{
ES=0;//关闭串口中断
for(i=0;i<12;i++)
{
SBUF=table1[ i];
while(!TI);
TI=0;
}
//SBUF=a;
//while(!TI);
// TI=0;
ES=1;
b=0;
flag=0;
}
}
}
void ser()interrupt 4
{
table1=SBUF;
while(!RI);
RI=0;
b++;
if(b==12)
flag=1;
}
|