当接受为010102且校验和正确时,命令位点灯。当接受为010203且校验和时,命令位熄灯。
#include
unsigned char i, sum,jiaoy;
unsigned char a[3];
void main()
{//初始化
SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
while(1);//等待中断
}
//中断函数
void buffer_in(void) interrupt 4
{sum=0;
if(RI)
for(i=0;i
unsigned char i,j, sum;
//bit flag=0;
unsigned char a[3];
void main()
{
SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
i=0;
// j=0;
sum=0;
P2=0xff;
while(1);
}
void buffer_in(void) interrupt 4
{ if (RI)
{
RI=0;
a=SBUF;
// 依次接收数据
if(i<2)sum+=a;
i++;
if((a[0]=0x01)&&(a[2]==sum))//判断
{
P2=a[1];
//
flag=1;
sum=0;
i=0;
}
}
}
以上程序我刚好能实现上述功能!
但我现在想当多于3个字节时不响应,例如 发01 01 02 05时并不亮灯!再次输入01 01 02时再响应!
这就不能实现!因为当发第四字节时,SUM为a[0]=05,覆盖了原来地址位的01, 此时i被置1了,再发01 01 02时就分别依次装入了a[1],a[2],a[0].就一下子打乱了原来的设想!
如何解决这种问题,当发送四位时,不响应,但又不影响后续数据的发送!
真的谢谢了!希望各位高手指点!本人将不胜感激!
|