应广的MCU系列并不支持直接除法“/" 的运算方式,因此在程序中如果要使用除法运算,那么需要用其他的方式来实现。
一,偶数除,可以通过右移实现,比如8/2,每右移一位即除2 。
二,奇数除,可以通过减法实现,举例9/3,如下:
9代表被除数dividend,3代表除数divisor,结果是res,运算开始:
1, dividend - divisor = 9-3 = 6, res++, 即res =1; 把6赋值给dividend,进行第2轮。
2, dividend - divisor = 6-3 = 3, res++, 即res = 2; 把3赋值给dividend,进行第3轮。
3, dividend - divisor = 3-3 = 0,res++, 即res = 3; dividend = 0, 运算结束,结果是3。
上述方法的思想是:dividend循环减divisor,每减一次res++,直至dividend =0,或者减法的结果小于divisor,运算停止,此时res就是最终结果值。
再举例9/4 =2.25。
1,dividend - divisor = 9-4 = 5, res++, 即res =1; 把5赋值给dividend,进行第2轮。
2,dividend - divisor = 5-4 = 1, res++, 即res =2; 减法的结果是1<divisor 4,运算结束,最后的结果是2(不计浮点)。
程序写法:
BYTE div_src, div_val, div_res,temp;
...
void FPPA0(void)
{
.ADJUST_ICSYSCLK=IHRC/4, IHRC=16MHz, VDD=5V
...
while(1)
{
temp = div_src - div_val ;
div_src = temp;
div_res ++;
if(div_res >= div_val)
{
goto $;
}
}
}
一,偶数除,可以通过右移实现,比如8/2,每右移一位即除2 。
二,奇数除,可以通过减法实现,举例9/3,如下:
9代表被除数dividend,3代表除数divisor,结果是res,运算开始:
1, dividend - divisor = 9-3 = 6, res++, 即res =1; 把6赋值给dividend,进行第2轮。
2, dividend - divisor = 6-3 = 3, res++, 即res = 2; 把3赋值给dividend,进行第3轮。
3, dividend - divisor = 3-3 = 0,res++, 即res = 3; dividend = 0, 运算结束,结果是3。
上述方法的思想是:dividend循环减divisor,每减一次res++,直至dividend =0,或者减法的结果小于divisor,运算停止,此时res就是最终结果值。
再举例9/4 =2.25。
1,dividend - divisor = 9-4 = 5, res++, 即res =1; 把5赋值给dividend,进行第2轮。
2,dividend - divisor = 5-4 = 1, res++, 即res =2; 减法的结果是1<divisor 4,运算结束,最后的结果是2(不计浮点)。
程序写法:
BYTE div_src, div_val, div_res,temp;
...
void FPPA0(void)
{
.ADJUST_ICSYSCLK=IHRC/4, IHRC=16MHz, VDD=5V
...
while(1)
{
temp = div_src - div_val ;
div_src = temp;
div_res ++;
if(div_res >= div_val)
{
goto $;
}
}
}