|
在寫(xiě)一個(gè)串口接受多字節(jié)的一個(gè)程序時(shí)遇到了一個(gè)問(wèn)題,我寫(xiě)程序使52單片機(jī)以9600波特率接受串口助手發(fā)送來(lái)的12個(gè)字節(jié),然后再發(fā)回去,但是在程序啟動(dòng)時(shí),單片機(jī)第一次收到數(shù)據(jù)并發(fā)回,發(fā)現(xiàn)在發(fā)回的數(shù)據(jù)中第一個(gè)字節(jié)變成了FF,而第12個(gè)字節(jié)丟失,第二次發(fā)送便正常了,這是為什么?
{DS6TCZUQ$QLZ0$C1)))0]9.png (39.12 KB, 下載次數(shù): 139)
下載附件
2015-8-28 14:15 上傳
下面是我的程序
/*
串口發(fā)送多字節(jié)
for循環(huán)發(fā)送
*////////////////////////////////
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i,b;//串口接受標(biāo)識(shí),接受的數(shù)據(jù),
//uchar code table[]="I get";//定義發(fā)送數(shù)組
uchar table1[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void lnit()//初始化
{
TMOD=0x20;//設(shè)置工作方式
TH1=0xfd;//設(shè)置初值
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;//開(kāi)總中斷
ES=1;//開(kāi)串口中斷
}
void main()
{
lnit();
while(1)
{
if(flag==1)//當(dāng)接收到數(shù)據(jù)
{
ES=0;//關(guān)閉串口中斷
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;
}
|
評(píng)分
-
查看全部評(píng)分
|