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

2020-01-22 12:13发布

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
输出结果C9  00 中间省略 C6 C7
少一次C8

输入长度比较短的时候都不会出错,想不通什么原因
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
qiuyan
1楼-- · 2020-01-22 14:01
原因找到了,用的STC15F2k系列的单片机,内部晶振用软件设成33M使用的,下调晶振频率为22M就一切正常
hithms
2楼-- · 2020-01-22 17:37
qiuyan 发表于 2014-9-6 14:57
原因找到了,用的STC15F2k系列的单片机,内部晶振用软件设成33M使用的,下调晶振频率为22M就一切正常{:dizz ...


晶振频率按理来说不会影响程序逻辑的吧。难道你的意思是循环的执行次数是对的,只是通过串口发送出来的数据是错的?
qiuyan
3楼-- · 2020-01-22 22:53
循环次数是错的,导致异或校验结果出错,所以我要用串口把怀疑的数据发出检查的。应该是晶振频率太高不稳定了

一周热门 更多>