很简单的一个循环,出现漏掉一次循环没有执行,奇怪
uchar xor_checksum(uchar *pDat,uchar length)// 求异或和,参数1欲求和的数据首地址,参数2 长度{
uchar i,a;
a=0;
sendByte(length);//调试用,输出长度
for(i=0;i<length;i++)
{
a ^= *pDat;
pDat++;
sendByte(i);//调试用,输出循环变量
}
return a;
}
输入长度为0xC9
输出结果C900 中间省略 C6 C7
少一次C8
输入长度比较短的时候都不会出错,想不通什么原因 原因找到了,用的STC15F2k系列的单片机,内部晶振用软件设成33M使用的,下调晶振频率为22M就一切正常{:dizzy:} qiuyan 发表于 2014-9-6 14:57
原因找到了,用的STC15F2k系列的单片机,内部晶振用软件设成33M使用的,下调晶振频率为22M就一切正常{:dizz ...
晶振频率按理来说不会影响程序逻辑的吧。难道你的意思是循环的执行次数是对的,只是通过串口发送出来的数据是错的? 循环次数是错的,导致异或校验结果出错,所以我要用串口把怀疑的数据发出检查的。应该是晶振频率太高不稳定了
页:
[1]