应广单片机吧 关注:140贴子:454
  • 2回复贴,共1

应广单片机 除法 实现方法 #应广单片机技巧

只看楼主收藏回复

应广的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 $;
}
}
}


IP属地:广东1楼2023-04-03 10:40回复
    特别简单
    列:
    a1=234;
    b1=0;b2=0;b3=0;
    while(a1>99){a1 -=100; b1++;}
    while(a1>9){a1 -=10; b2++;}
    b3=a1;


    IP属地:北京来自Android客户端3楼2023-05-23 18:58
    回复
      所以说
      voidWord_Div_Byte (void)
      {//div_src2[W] / div_val[B]=div_src2[W] * div_val[B] + div_res[B]
      div_cnt=0;
      div_res=0;
      do
      {
      div_src2<<=1;
      slcdiv_res;//div_res的位左移,位 0 移入进位标志位
      slcdiv_tmp;
      div_cnt++;
      A=div_res- div_val;
      if (div_tmp.0 || !CF)f
      {
      div_res=A;
      div_src2.0=1;
      }
      } while (! div_cnt.4);
      }
      这个是怎么计算的,基础比较薄弱,半天没有明白


      4楼2023-08-18 16:39
      回复