/**接收数据函数**/
void recive_date()
{
uchar i;
uint cnt;
for(i=0;i<3;i++)
{
RI=0;
while(!RI)
{
cnt++;
if(cnt>400)
{
break;
}
}
cnt=0;
RI=0;
tabel[i]=SBUF;
}
}
/**功能函数**/
void fun()
{
recive_date();
if(P2==tabel[0])//判断地址码
{
nn=tabel[1];
mm=tabel[2];
alarm=1;
}
else
alarm=0;
sendshow1_4099(1,1,1,nn0);
sendshow1_4099(1,1,0,nn1);
sendshow1_4099(1,0,1,nn2);
sendshow1_4099(1,0,0,nn3);
sendshow1_4099(0,1,1,nn4);
sendshow1_4099(0,1,0,nn5);
sendshow1_4099(0,0,1,nn6);
sendshow1_4099(0,0,0,nn7);
sendshow2_4099(1,1,1,mm0);
sendshow2_4099(1,1,0,mm1);
sendshow2_4099(1,0,1,mm2);
sendshow2_4099(1,0,0,mm3);
sendshow2_4099(0,1,1,mm4);
sendshow2_4099(0,1,0,mm5);
sendshow2_4099(0,0,1,mm6);
sendshow2_4099(0,0,0,mm7);
////////////////
sendout1_4099(1,1,1,nn0);
sendout1_4099(1,1,0,nn1);
sendout1_4099(1,0,1,nn2);
sendout1_4099(1,0,0,nn3);
sendout1_4099(0,1,1,nn4);
sendout1_4099(0,1,0,nn5);
sendout1_4099(0,0,1,nn6);
sendout1_4099(0,0,0,nn7);
sendout2_4099(1,1,1,mm0);
sendout2_4099(1,1,0,mm1);
sendout2_4099(1,0,1,mm2);
sendout2_4099(1,0,0,mm3);
sendout2_4099(0,1,1,mm4);
sendout2_4099(0,1,0,mm5);
sendout2_4099(0,0,1,mm6);
sendout2_4099(0,0,0,mm7);
///////////////
}
/**初始化串口函数**/
void init_serial()
{
TMOD = 0x20; // 定时器T1使用工作方式2
TH1 = 250;
TL1 = 250;
TR1 = 1; // 开始计时
PCON = 0x80; // SMOD = 1
SCON = 0x50; // 工作方式1,波特率9600kbit/s,允许接收
tabel[0]=0xff; //防止地址出错
nn=0x00;
mm=0x00;
alarm=0;
P2=0x0f;
}
/**主函数**/
void main()
{
init_serial();
while(1)
{
// scankey();
fun();
}
}
这是我从机接收部分,这样接收数据很正常,通信一点问题都没有,但是当我把上面打有////////中间的那部分函数去掉通信就不对了,是不是这些函数在这里相当延时恰好处还是怎么回事,希望高手指点,小弟感激不尽! |