导航:首页 > 操作系统 > 单片机移位除法

单片机移位除法

发布时间:2025-06-26 02:56:36

单片机中怎么计算除法

可通过单片机除法运算程”DIV AB“,进行计算。

”DIV AB“表示:(A)÷(B)→(A)和(B),把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。

例如,使用DIV指令计算16÷5,运行如下3个指令:

MOV A,#16;

MOV B,#5;

DIV AB;

得到A为3,表示商;B为1,表示余数。

❷ 8位单片机怎么进行十六位除十六位,最好有程序

二进制除法运算
多字节二进制除法
被除数为3个字节,在wr2_wr1_wr0单元中,wr2.7为最高位,wr0.0为最低位.
除数为2个字节,在wr9_wr8中。
算法:EM78单片机没有除法指令,而且本例中除法为多字节除法,可采用如下算法.
将被除数扩充一个字节0X23_0X22清0.被除数左移1位,0X23_0X22中数据减去0X31_0X30中数据.够减则减且0X20.0置1,减出结果存入0X23_0X22
不够减则0X23_0X22保持不变,0X20.0清0。
然后被除数再左移1位,重复上述过程。共循环16次,最后0X23_0X22中得相减余数,0X21_0X20中得商。

注意,若被除数左移后C标志为1,则不比较0X23_0X22与0X31_0X30数据大小关系而直接相减。
main: mov a,@0x55 ;被除数赋值
mov wr0,a
mov wr1,a
mov wr2,a
mov a,@0x0 ;被除数扩充1字节并清0
mov wr3,a
mov a,@0x12 ;除数赋值
mov wr8,a
mov wr9,a

mov a,@0x10 ;循环次数为16
mov wr7,a
again: call rt_sub ;调移位除法子程
djz wr7 ;16次循环完成则结束
jmp again ;未完成则继续

self: jmp self

rt_sub:
bc 0x03,0 ;c标志清0
rlc wr0 ;被除数左移1位
rlc wr1
rlc wr2
rlc wr3
jbc 0x03,0
jmp rt3 ;c标志为1则直接相减
mov a,wr3 ;c标志为0则先比较大小
mov wr5,a
mov a,wr2
mov wr4,a
mov a,wr9 ;先比较高位
sub wr5,a
jbc 0x03,2
jmp rt1 ;高位相等跳rt1比较低位
jmp rt2 ;高位不等跳rt2
rt1: mov a,wr8 ;比较低位
sub wr4,a
jbc 0x03,2
jmp rt3 ;低位也相等则跳rt3,相减,上1
rt2: jbs 0x03,0
ret ;减数大则返回,减数小则相减,上1
rt3: bs wr0,0 ;上1
call sub_2b ;调2字节减法子程
ret

sub_2b:
mov a,wr9 ;高字节相减
sub wr3,a
mov a,wr8 ;低字节相减
sub wr2,a
jbc 0x03,2
ret ;低字节相等,无借位,返回
jbc 0x03,0
ret ;无借位,返回
dec wr3 ;低字节相减有借位,高字节结果减1
ret
eop

❸ 8051单片机用汇编循环移位指令实现除法,被除数为2的倍数,怎么编啊

很简单呀,比如一个数除以4
MOV A,DAT
CLR C
RRC A
CLR C
RRC A
被除数是2的几次方,就用一次右移指令。

❹ 在单片机汇编语言中怎样做除法运算(不用DIV指令)初步发现右移一次相当于除于2TKS!

可用移位、比较的方法实现任意位除法。右移一次相当于除于2,前提条件是原数必须是偶数。

❺ 关于C51单片机的小数点四舍五入处理

将你需保留的那一位的低一位加5之后舍掉即可

单片机内一般采用整数计算,如果要保留两位小数,需将原数据扩大100倍,小数点该向左移2位
18754/100=187·54 但单片机只能算整数,因此结果只能是187
因此计算时我们我们将被除数扩大100倍 相当于小数点向右移2位,1875400/ 100=18754
然后我们将计算结果的小数点再向左移回来2 位,即变成了 187.54 这就是定点小数的算法
如果18754/100我们只保留一位小数
我们可以这样处理 (18754*100+500)=1875900
1875900/100=18759
小数点左移2位,结果187.59 最后一位不考虑取187.5
但如果18755/100我们只保留一位小数
(18755*100+500)=1876000
1876000/100=18760

小数点左移2位,结果187.60 最后一位不考虑取187.6
看到了吧,4舍去了 5就入上去了
所以要保留三位小数,需将原来数据扩大1000倍,再除1000
所以要保留4位小数,需将原来数据扩大10000倍,再除10000
.......
扩大100倍或1000倍操作要放在除法之前,因除法才会导致小数丢失
需4舍5 入,将要保留的那一位数的低一位加5即可
当然这是低级算法,用C语言编程直接可以用浮点数,结果输出 时会自动四舍5 入
你所要做的是将浮点数转换为字符(用sprint函数)并控制输出数据的位数,格式控制类似于printf函数

❻ 51单片机怎样从一个非常大的数字里面提取个十百千万位等......

下面举例说明万千百十个的表示方法。其实很简单,用除法取余就行。

i=a/b ;//取商
i=a%b;//取余

方法很多,以下是一例:
unsigned int wan,qian,,shi ,ge,
wan=i/10000;//除一万取商,是万位。
qian=(i/1000)%10;//先除1000,取商,商的个位是千位,所以再除10 取余。
=(i%100)/10%10;//先除100,取商,商的个位是百位,所以再除10 取余。
shi=(i%100)/10;//先除100,取余,商再除10 取余。
ge==(i%10;//除10取余。

不过阁下要知道整形量最大是65535,假如你的数据达到999999,你就要定义长整形量了。
unsigned long int i=999999;

如当I<10的时候 P0=table[i/10]; 个位
这样的算法 我写的不行 ,请高手写下 ,我看下我的出错在什么地方
i/10是取商啊,怎么可能是个位呢?是十位。I<10的话,一定是0了。

移位的方法不行,移位是2进制运算。你这个是十进制。

阅读全文

与单片机移位除法相关的资料

热点内容
怎样编译一个表 浏览:77
嘉兴前端程序员私活网站推荐 浏览:466
帝都程序员作品 浏览:833
苹果62个app怎么退出一个 浏览:943
极道通程序员 浏览:327
java任务分发 浏览:442
qq图片怎样做成文件夹 浏览:360
java实现aop 浏览:344
关闭网格的命令是 浏览:119
汉兰达歌曲不显示其他文件夹 浏览:579
vpv服务器地址是什么 浏览:439
如何用手机解压电脑的文件 浏览:637
手机怎么换服务器ip地址 浏览:66
服务器怎么填ins 浏览:727
中兴服务器如何做raid 浏览:175
光遇安卓国服为什么没有大蜡烛 浏览:591
python指示灯控件 浏览:398
pdf图片制作 浏览:52
加密锁频繁写锁 浏览:314
vue程序编译 浏览:859