
51单片机的溢出问题
我记得溢出的意思是超出最大值,可51的溢出标志位OV有点不太理解例如:10000101+11111111=110000101这明显11111111就是最大值,加上任何数都...
我记得溢出的意思是超出最大值,可51的溢出标志位OV有点不太理解
例如: 1000 0101
+ 1111 1111
=1 1000 0101
这明显1111 1111 就是最大值,加上任何数都会溢出的啊,可为什么ov=0
而且51中说只有第六或第七位中有一位进位或借位OV才置位,这话怎么理解? 展开
例如: 1000 0101
+ 1111 1111
=1 1000 0101
这明显1111 1111 就是最大值,加上任何数都会溢出的啊,可为什么ov=0
而且51中说只有第六或第七位中有一位进位或借位OV才置位,这话怎么理解? 展开
展开全部
一个字节只有8位,最大数是1111 1111,+0时不会产生溢出,所以标志位OV=0,当最高位的运算产生进位或借位时OV=1,在编程时,当加法或减法时,并不确定所得的结果是什么,每次需要检查OV位的值用相应的程序去处理有借位和进位的不同情况。如单字节运算中,寄存器中已是1111 1111,加立即值1结果还放在寄存器中,则寄存器中的值加法后变为0000 0000,但OV被置位=1,此时只要检查OV值,如果为1就将另一个寄存器中的值+1,如果这个寄存顺加后OV值又成为1则再另个寄存器中加1,按照所用的字节数,不断检查,就可以进行多个字节的加法运算。简单单片机的指令最多给出4个字节的加法运算指令,但可以用这种方法扩展为20个字节的加法运算,甚至更多,条件是片内的RAM够用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询