|
本帖最后由 ahshmj 于 2013-9-9 18:04 編輯
你自己仿真了沒有?提出的問題要清晰明了。
照這樣修改一下:
/******************************
十六進(jìn)制發(fā)送和接收數(shù)據(jù)
/******************************
十六進(jìn)制發(fā)送和接收數(shù)據(jù)
******************************/
#include <REG52.H>
bit Flag;
unsigned char ReData;
unsigned char i,SenData[]="完成";
void main (void)
{
SCON = 0x50; //REN=1允許串行接受狀態(tài),串口工作模式1
TMOD|= 0x20; //定時(shí)器工作方式2
PCON|= 0x00;
TH1 = 0xFD; //baud*2 /* 波特9600、數(shù)據(jù)位8、停止位1。效驗(yàn)位無 (12M)
TL1 = 0xFD;
TR1 = 1;
ES = 1; //開串口中斷
EA = 1; // 開總中斷
// IE = 0x0;
while(1)
{
if (Flag==1 /*& ReData == 1*/) // 可能要根據(jù)你接收的字符或數(shù)字應(yīng)加上 & ReData =='1' 或 & ReData == 1
{ // if (Flag==1 & ReData == 1)
ES=0; //關(guān)閉串口中斷
for(i=0;i<4;i++)
{SBUF=SenData;
while(!TI); //等待發(fā)送結(jié)束
TI=0; //軟件清發(fā)送中斷標(biāo)志位
}
// SBUF=SenData; //SUBF接受/發(fā)送緩沖器
// while(TI==0);
// TI=0;
Flag=0;
ES = 1; //開串口中斷
}
}
}
/****************************************************
串口中斷程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(TI == 1)
{ TI=0; }
else
{ if(RI == 1) //RI接受中斷標(biāo)志
{
RI = 0; //清除RI接受中斷標(biāo)志
ReData = SBUF; //SUBF接受/發(fā)送緩沖器
// SenData=ReData;
Flag=1;
}
}
}
|
|