2019-03-24 08:53发布
lcccx12 发表于 2016-9-15 23:54 贴程序出来,不然没法知道你什么问题
huaiqiao 发表于 2016-9-13 23:31 你可以这样,把接收的数据存在一个buff数组中,debug模式下,单步调结合你的程序看看具体其他数据在执行什 ...
最多设置5个标签!
do /////////////////////////////do的内容////////////////////////////////
{
restart0:
if (UCA0IFG==1)//如果接收到数据
{
tmpdat=UCA0RXBUF;//先把接收到的数据放到tmpdat中
UCA0IFG=0;
if ((tmpdat==0xef)&&(start==FALSE))//这个数据为第一个传回来的数据,也就是“指令应答”的第一个字节
{
count=0;
FIFO[0]=tmpdat;//读入第一个应答字节(0XEF),存在第“0”个元素中
flag=1;
goto
restart0;//可以用中断方式进行
}
if(flag==1)//第一个字节已经回来,所以flag==1成立
{
if(tmpdat!=0x01) //接收数据错误,将重新从缓冲区接收数据
{
flag=0;//接收应答失败
result=FALSE;
start =FALSE;
stop=FALSE;
count=0;
goto
restart0;
}
//如果成功接收到0xef01,可以开始接收数据
flag=2;//flag=2;表示应答成功,可以开始接收数据了
count++;//现在count=1;
FIFO[count]=tmpdat;//读入第二个应答字节(0X01),存在第“1”个元素中
start=TURE; //应答成功可以开始接收数据
goto
restart0;
}
if((flag==2)&&(start==TURE))//flag=2;表示应答成功,可以开始接收数据了
{
count++; //数据元素下标++
FIFO[count]=tmpdat;//存入数据
if(count>=6)
{
checksum=FIFO[count]+checksum; //计算校验和
}
if(count==8)
{
package=FIFO[7]*0X100+FIFO[8]; //计算包长度
stop= TURE;
}
if(stop)
{
if(count==package+8)
{
checksum=checksum-FIFO[count-1];
if(checksum!=FIFO[count]&0xff)
result=FALSE; //校验失败,置结果标志为0
else
result=TURE;
flag=0;
break;
}
}
}
}
}/////////////////////////////do的内容----------------结束////////////////////////////////
while ((clk0<=MaxTime)&&(count<=MAX_NUMBER)&&(changeflag==0)); //由定时器以及最大接收数据来控制,保证不会在此一直循环
FifoNumber=count; //保存接收到的数据个数
do /////////////////////////////do的内容////////////////////////////////
{
restart0:
if (UCA0IFG==1)//如果接收到数据
{
tmpdat=UCA0RXBUF;//先把接收到的数据放到tmpdat中
UCA0IFG=0;
if ((tmpdat==0xef)&&(start==FALSE))//这个数据为第一个传回来的数据,也就是“指令应答”的第一个字节
{
count=0;
FIFO[0]=tmpdat;//读入第一个应答字节(0XEF),存在第“0”个元素中
flag=1;
goto
restart0;//可以用中断方式进行
}
if(flag==1)//第一个字节已经回来,所以flag==1成立
{
if(tmpdat!=0x01) //接收数据错误,将重新从缓冲区接收数据
{
flag=0;//接收应答失败
result=FALSE;
start =FALSE;
stop=FALSE;
count=0;
goto
restart0;
}
//如果成功接收到0xef01,可以开始接收数据
flag=2;//flag=2;表示应答成功,可以开始接收数据了
count++;//现在count=1;
FIFO[count]=tmpdat;//读入第二个应答字节(0X01),存在第“1”个元素中
start=TURE; //应答成功可以开始接收数据
goto
restart0;
}
if((flag==2)&&(start==TURE))//flag=2;表示应答成功,可以开始接收数据了
{
count++; //数据元素下标++
FIFO[count]=tmpdat;//存入数据
if(count>=6)
{
checksum=FIFO[count]+checksum; //计算校验和
}
if(count==8)
{
package=FIFO[7]*0X100+FIFO[8]; //计算包长度
stop= TURE;
}
if(stop)
{
if(count==package+8)
{
checksum=checksum-FIFO[count-1];
if(checksum!=FIFO[count]&0xff)
result=FALSE; //校验失败,置结果标志为0
else
result=TURE;
flag=0;
break;
}
}
}
}
}/////////////////////////////do的内容----------------结束////////////////////////////////
while ((clk0<=MaxTime)&&(count<=MAX_NUMBER)&&(changeflag==0)); //由定时器以及最大接收数据来控制,保证不会在此一直循环
FifoNumber=count; //保存接收到的数据个数
一周热门 更多>