救救菜鸟!C51串口接受一帧数据为3个字节——地址、命令、校验和。

[复制链接]
查看11 | 回复1 | 2008-12-30 09:04:19 | 显示全部楼层 |阅读模式
当接受为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].就一下子打乱了原来的设想!
如何解决这种问题,当发送四位时,不响应,但又不影响后续数据的发送!
真的谢谢了!希望各位高手指点!本人将不胜感激!

回复

使用道具 举报

千问 | 2008-12-30 09:04:19 | 显示全部楼层
哦好复杂!你还是到现实中去找个高手吧!...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行