以下程序不知为何在通信一个循环之后,就不能再正常通信,请那位仁兄给予指点一下,多谢!
#include "reg52.h"
#include<intrins.h>
unsigned char xdata temp[3]={0xDD,0x00,0x00};
unsigned char xdata temp1[20];
unsigned char xdata temp2[5]={0xDD,0x00,0x00,0x00,0xDD};
unsigned char xdata temp3[20];
unsigned char xdata temp4[20];
bit ICREAD;
bit ICWRITE;
bit ICVERFIY;
bit ICBELL;
unsigned char u,i,y=0;
unsigned char xdata Rec_Buffercom[20];//接收数据缓冲区
void System_Init(void)
{
TMOD=0x20; //串行口初始化
TH1=0xFD;
TL1=0xFD; //设定波特率 9600
SCON=0x50; //串行口工作在方式1,并允许接收
IE |= 0x90; //Enable Serial Interrupt
EA=1;
ES=1;
TR1=1; //启动T1
}
void del(unsigned char t)
{
for(i=0;i<t;i++)
{
;
}
}
void main(void)
{
SP=0x50;
System_Init(); //初始化
ICWRITE=1;
ICVERFIY=1;
ICBELL=1;
while(1)
{
Delay10Us();
del(10000);
if(ICREAD==0)
{
for(i=0;i<3;i++)
{
y^=temp[i];
temp4[i]=temp[i];
}
temp4[3]=Rec_Buffercom[10];
y^=Rec_Buffercom[10];
for(i=0;i<(Rec_Buffercom[10]);i++)
{
temp4[4+i]=temp1[i];
y^=temp1[i];
}
temp4[Rec_Buffercom[10]+4] =y;
EA=0;
ES=0;
for(i=0;i<(Rec_Buffercom[10]+5);i++)
{
SBUF=temp4[i];
do{}
while(!TI);
TI = 0;
}
ICREAD=1;
EA=1;
ES=1;
y=0;
}
Delay10Us();
del(10000);
if(ICWRITE==0)
{
del(10000);
EA=0;
ES=0;
for(i=0;i<5;i++)
{
SBUF =temp2[i];
do{}
while(!TI );
TI = 0;
}
ICWRITE=1;
EA=1;
ES=1;
}
del(10000);
Delay10Us();
if(ICVERFIY==0)
{
for(i=0;i<5;i++)
{
SBUF =temp2[i];
do{}
while(!TI);
TI = 0;
}
ICVERFIY=1;
EA=1;
ES=1;
}
Delay10Us();
del(10000);
if(ICBELL==0)
{
EA=0;
ES=0;
for(i=0;i<5;i++)
{
SBUF =temp2[i]; //RecBuf[i];
do{}
while(!TI);
TI = 0;
}
ICBELL=1;
EA=1;
ES=1;
}
}
}
void rxdata(void) interrupt 4 using 2
{
EA=0;
ES=0;
while(!RI);
RI=0;
Rec_Buffercom[0]=SBUF;
while(!RI);
RI=0;
Rec_Buffercom[1]=SBUF;
if(Rec_Buffercom[1]==0x64)
{
while(!RI);
RI=0;
Rec_Buffercom[2]=SBUF;
while(!RI);
RI=0;
Rec_Buffercom[3]=SBUF;
for(i=4;i<(Rec_Buffercom[3]+5);i++)
{
while(!RI);
RI=0;
Rec_Buffercom[i]=SBUF;
}
ICVERFIY=0;
}
if(Rec_Buffercom[1]==0x60)
{
while(!RI);
RI=0;
Rec_Buffercom[2]=SBUF;
while(!RI);
RI=0;
Rec_Buffercom[3]=SBUF;
for(i=4;i<(Rec_Buffercom[3]+5);i++)
{
while(!RI);
RI=0;
Rec_Buffercom[i]=SBUF;
}
ICWRITE=0;
}
if(Rec_Buffercom[1]==0xb4)
{
while(!RI);
RI=0;
Rec_Buffercom[2]=SBUF;
while(!RI);
RI=0;
Rec_Buffercom[3]=SBUF;
for(i=4;i<(Rec_Buffercom[3]+5);i++)
{
while(!RI);
RI=0;
Rec_Buffercom[i]=SBUF;
}
ICBELL=0;
}
if(Rec_Buffercom[1]==0x61)
{
while(!RI);
RI=0;
Rec_Buffercom[2]=SBUF;
while(!RI);
RI=0;
Rec_Buffercom[3]=SBUF;
for(i=4;i<(Rec_Buffercom[3]+5);i++)
{
while(!RI);
RI=0;
Rec_Buffercom[i]=SBUF;
}
ICREAD=0;
}
EA=1;
ES=1;
}