qiuyan 发表于 2014-9-6 14:41:03

很简单的一个循环,出现漏掉一次循环没有执行,奇怪

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

输入长度比较短的时候都不会出错,想不通什么原因

qiuyan 发表于 2014-9-6 14:57:51

原因找到了,用的STC15F2k系列的单片机,内部晶振用软件设成33M使用的,下调晶振频率为22M就一切正常{:dizzy:}

hithms 发表于 2014-9-6 17:07:46

qiuyan 发表于 2014-9-6 14:57
原因找到了,用的STC15F2k系列的单片机,内部晶振用软件设成33M使用的,下调晶振频率为22M就一切正常{:dizz ...

晶振频率按理来说不会影响程序逻辑的吧。难道你的意思是循环的执行次数是对的,只是通过串口发送出来的数据是错的?

qiuyan 发表于 2014-9-6 21:27:43

循环次数是错的,导致异或校验结果出错,所以我要用串口把怀疑的数据发出检查的。应该是晶振频率太高不稳定了
页: [1]
查看完整版本: 很简单的一个循环,出现漏掉一次循环没有执行,奇怪