在寫一個串口接受多字節的一個程序時遇到了一個問題,我寫程序使52單片機以9600波特率接受串口助手發送來的12個字節,然后再發回去,但是在程序啟動時,單片機第一次收到數據并發回,發現在發回的數據中第一個字節變成了FF,而第12個字節丟失,第二次發送便正常了,這是為什么?
{DS6TCZUQ$QLZ0$C1)))0]9.png (39.12 KB, 下載次數: 139)
下載附件
2015-8-28 14:15 上傳
下面是我的程序
/*
串口發送多字節
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;
}
|