导航:首页 > 操作系统 > 单片机乘2或除2

单片机乘2或除2

发布时间:2022-07-12 15:08:18

㈠ 在单片机的程序里如果b是16进制可以直接乘以2 吗得出来的是十进制

当然可以的,结果是二进制,因为程序运行时是在计算机内部进行的,所有数据都是二进制。

㈡ 用单片机 实现8位2机制数的乘法,必须包含左移或右移啊

我也在学单片机。麻烦楼主表述清楚点,左移/右移一般用于乘/除2或2的倍数,若乘数不是2的倍数那就用不到左移了不是吗?

㈢ 单片机乘除指令计算的具体步骤

关于MUL的用法书上有应该,我就不说了。说几点:

一、单片机的乘法运算只是进制不同,跟我们常用的十进制是一样的。例如:12×10=120

不要简单想成在后边加个0,学了单片机应该学会用*移位*思考,因为单片机不会在后边加 0减0,应该想成12向左移一位,同样二进制的11B×10B =110B ,十六进制11H×10H=110H,八进制也一样。

二、想不通 ,还可换算成十进制去算,然后再转换成相应进制。因为他们数量是一样的只是进 制不同。十进制要满是个进一位,八进制要满8个进一位。十进制的10和八进制的12是一 样的。

啰嗦了半天希望能理解其中的意思。

㈣ 单片机乘法的实现

org 0000h
jmp start
start:
MOV SP,#60H
mov r2,#20h
mov r3,#34h
mov a,#99h
lcall bhd
lcall hbd
NOP
NOP

;三字节除以单字节子程序
;入口条件:被除数在R3、R4、R5中,除数在R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
DV31:
CLR C
MOV A,R3
SUBB A,R7
JC DV30
SETB OV ;商溢出
RET
DV30:
MOV R2,#10H;求R3R4R5/R7-→R4R5
DM23:
CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24:
DJNZ R2,DM23
MOV A,R3 ;四舍五入
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25:
INC R5
MOV A,R5
JNZ DM26
INC R4
DM26:
CLR OV
RET ;商在R4R5中

;两字节除以单字节子程序
;入口条件:被除数在R4、R5中,除数在R7中。
;出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。
; 余数在r4中
;影响资源:PSW、A、R3~R7 堆栈需求: 2字节
D457:
CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV;商溢出
RET
DV50:
MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51:
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52:
CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四舍五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53:
INC R3
DV54:
CLR OV
RET

;四字节除以单字节子程序
;入口条件:被除数在R2、R3、R4、R5中,除数在R7中。
;出口信息:a<ff 时三字节商在R3、r4、r5中,a=ff 时溢出。
; 余数在r2中
;影响资源:PSW、A、R2~R7 堆栈需求:2字节
;input dat1,dat2,dat3,r5 ;r0(h),:divisor dat2(h) dat3() r5(l):quotient
;dat1(h)dat2(l):resie
F_DIV:
clr c
mov a,r7
jz fd_over
fd_begin:
mov a,r2
subb a,r7
jc no_overflow
mov a,#0ffh
ret
no_overflow:
clr a
mov r6,#18h
fdiv0:
lcall rlc4
jc goushang
mov a,r2
subb a,r7
jc fdnext
inc r5
mov r2,a
fdnext:
djnz r6,fdiv0
jmp fdone
goushang:
mov a,r2
subb a,r7
inc a
inc r5
mov r2,a
jmp fdnext
fdone:
clr a
clr ov
ret
fd_over:
mov a,#0ffh
ret
rlc4:
clr c
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
ret
;DIVD功能:双字节二进制无符号数除法
;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
; 余数在r2 r3中
;影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节
DIVD:
CLR C ;比较被除数和除数
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ;溢出
RET
DVD1:
MOV B,#10H ;计算双字节商
DVD2:
CLR C ;部分商和余数同时左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;计算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;结果判断
JC DVD3
MOV R2,A ;够减,存放新的余数
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3:
DJNZ B,DVD2;计算完十六位商(R4R5)
; MOV A,R4 ;商移到R2R3中
; MOV R2,A
; MOV A,R5
; MOV R3,A
CLR OV ;设立成功标志
RET
;双字节乘以双字节乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MULD:
MOV A,R3 ;计算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暂存部分积
MOV R5,A
MOV A,R3 ;计算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;计算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;计算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分积
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
;双字节乘以单字节乘法
;入口条件:被乘数在R2、R3中,乘数在R7中。
;出口信息:乘积在R2、R3、R4中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
mul21:
mov a,r3
mov b,r7
mul ab
mov r4,a
mov r5,b
mov a,r2
mov b,r7
mul ab
add a,r5
mov r3,a
mov a,b
addc a,#00h
mov r2,a
ret
;功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2:
CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3:
MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;处理完16bit
RET

;入口条件:待转换的单字节BCD码整数在累加器A中。
;出口信息:转换后的单字节十六进制整数仍在累加器A中。
;影响资源:PSW、A、B、R4 堆栈需求: 2字节
BCDH:
MOV B,#10H ;分离十位和个位
DIV AB
MOV R4,B ;暂存个位
MOV B,#10 ;将十位转换成十六进制
MUL AB
ADD A,R4 ;按十六进制加上个位
RET

;双字节BCD码整数转换成双字节十六进制整数
;入口条件:待转换的双字节BCD码整数在R2、R3中。
;出口信息:转换后的双字节十六进制整数仍在R2、R3中。
;影响资源:PSW、A、B、R2、R3、R4 堆栈需求:4字节
BH2:
MOV A,R3 ;将低字节转换成十六进制
LCALL BCDH
MOV R3,A
MOV A,R2 ;将高字节转换成十六进制
LCALL BCDH
MOV B,#100 ;扩大一百倍
MUL AB
ADD A,R3 ;和低字节按十六进制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
;标号: BHD功能:单字节BCD码小数转换成单字节十六进制小数
;入口条件:待转换的单字节BCD码数在累加器A中。
;出口信息:转换后的单字节十六进制小数仍在累加器A中。
;影响资源:PSW、A、R2、R3 堆栈需求: 2字节
BHD:
MOV R2,#8 ;准备计算一个字节小数
BHD0: ADD A,ACC ;按十进制倍增
DA A
XCH A,R3
RLC A ;将进位标志移入结果中
XCH A,R3
DJNZ R2,BHD0 ;共计算8bit小数
ADD A,#0B0H ;剩余部分达到0.50否?
JNC BHD1 ;四舍
INC R3 ;五入
BHD1:
MOV A,R3 ;取结果
RET
; 标号: HBD功能:单字节十六进制小数转换成单字节BCD码小数
;入口条件:待转换的单字节十六进制小数在累加器A中。
;出口信息:CY=0时转换后的BCD码小数仍在A中。CY=1时原小数接近整数1。
;影响资源:PSW、A、B 堆栈需求: 2字节
HBD:
MOV B,#100 ;原小数扩大一百倍
MUL AB
RLC A ;余数部分四舍五入
CLR A
ADDC A,B
MOV B,#10 ;分离出十分位和百分位
DIV AB
SWAP A
ADD A,B ;拼装成单字节BCD码小数
DA A ;调整后若有进位,原小数接近整数1
RET

jmp $
end

㈤ 求教:51单片机,十六位二进制数乘以2后放回原单元,用移位的方法怎么做

左移其实就是乘法。
例如十进制;10左移一位就是100,相当于10*10;
二进制:10左移一位就是100,从原先的2变为4,就是乘以2;
左移一位就是把原来的数乘以"进制".
二进制x2就是左移一位。

㈥ 单片机 怎么用位移的方法实现乘除法

因为在寄存器里的数都是二进制的,所以乘以2:左移一位;乘以4左移两位;乘以8左移三位……依此类推(但要注意寄存器总共有多少位,防止溢出),除法用右移。
直接移位只能计算乘数(或除数)为2的n次方的乘(除)运算,对于一般的乘除法,还要配合加(减)法运算,比如a?9=a??3+a
实际上二进制数的基本运算即加,取反,移位等,通过变换来计算减,乘,除。
可以验证,用单片机C语言编程计算乘数为2的n次方的乘法运算比乘数为一般数的乘法运算要快得多,就是因为前者只需直接移位,后者还需配合加法或经多步运算

㈦ 【说得好有奖】单片机查表时用RL或RLC移位乘2的问题!!根据这个程序帮我分析下

RL是循环左移 移除最高位进入最低位 最高位为0时无区别
还有a只有8位 91*2=122h 但是a只能放下ffh 所以最高位舍弃 变成22
严格意义上说 左移不等同于乘2 楼主再理解一下 不懂再把问题补充一下

设表格中有1024个数据项,每个数据为2个字节,表格总长度为2048个字节
你看 这里假设有1024个数据项 如果是超出部分无法查表的话 那么ffff-1024=efdbh 一共有这么多的数据不能查 显然题意不是这样的。

㈧ 51单片机中UART通信中的公式中除2是什么意思

51单片机中UART通信中的公式中除2是又经过2倍分频了,这要结合串口电路原理就明白了。

㈨ 单片机乘法和除法指令及汇编语言程序举例

1.乘法:
MUL AB ;(A)×(B),积的低8位在A中,积的高8位在B中;

C总为0。
2.除法:

DIV AB ;(A)÷(B),商在A中,余数在B中。
若(B)= 0 ,则结果不定,(OV)= 1,(C)= 0。
例、试将A中的二进制数转换为3位BCD码,其中,百位数存放于31H单
元,十位数和个位数压缩后存于30H单元中。
解;MOV B,#100
DIV AB
MOV 31H,A

MOV A,#10
XCH A,B

DIV AB
SWAP A
ADD A,B

MOV 30H,A

阅读全文

与单片机乘2或除2相关的资料

热点内容
广播PDF 浏览:216
单片机编程300例汇编百度 浏览:33
腾讯云连接不上服务器 浏览:221
不能用来表示算法的是 浏览:859
6轴机器人算法 浏览:890
手机主题照片在哪个文件夹 浏览:294
安卓手机后期用什么软件调色 浏览:628
cad修改快捷键的命令 浏览:242
好钱包app怎么登录不了 浏览:859
树莓派都用python不用c 浏览:757
access文件夹树的构造 浏览:662
安卓多指操作怎么设置 浏览:658
linux树形目录 浏览:727
平方根的简单算法 浏览:898
千牛订单页面信息加密取消 浏览:558
单片机自制红外遥控灯 浏览:719
服务器最小配置怎么弄 浏览:853
ibm服务器硬件如何升级 浏览:923
全球程序员节点赞 浏览:986
php函数传递数组 浏览:632