51单片机怎样进行两个16位数的运算

2020-11-25 10:58:44 字数 4057 阅读 3505

1楼:匿名用户

运算过程是在累加器和寄存器中自动进行的

2楼:匿名用户

这是用汇编语言编程时,才要考虑的问题。要是用c语言编程,只要声明了一个16位变量就可以了,四则运算都可以的。

汇编语言写程序,加减法,比较容易简单,只是乘除法要麻烦些。不过,也就是用两个字节,分成高8位和低8位分别运算就行了。

3楼:单片机小丸子

分俩次啊,先存储在一个寄存器中。

4楼:顶起石头的小草

你好!是“加减乘除”的哪一种?

80c51单片机编程实现两个16位数的减法。

5楼:七彩镜

sub16:

clr c ;清进位mov a,#50h ;被减数低位送累加器subb a,#4bh ;减去减数低mov 31h,a ;差低位送31hmov a,#6fh ;被减数高位送累加器subb a,#13h ;减去减数高位mov 30h,a ;差高位送30h;如果有借位,c为1

6楼:顶起石头的小草

你好!是用汇编来完成?

51单片机能完成两个16位的加减运算吗,例如1245h+cb78h

7楼:匿名用户

可以的,但肯定不是一两条语句能 完成的

c语言编程不考虑算法,只管写:

uint a,b,c;

a=0x1234; b=0xcb78;

d=a+b;

51单片机能做两个16位的加法运算吗?如1010h和1010h,求大虾!!!!!

8楼:潘达

8位51,任何运算都可以的,只是无法在一个命令内完成,低位无进位相加,如果溢出,将进位标志置1,高位用进位加法,16位运算就是运算两次加法,低位加低位,高位加高位。。。。

9楼:匿名用户

没有问题的,可以的抄,如用汇编

mov r5, #10h ; 第一数据高字节mov r4,#10h ; 第一数据低字节mov r3, #10h ; 第二数据高字节mov r2,#10h ; 第二数据低字节mov a, r4

add a, r2

mov r4, a ; 和低字节 在 r4 中

mov a, r5

addc a, r3

mov r5, a ; 和高字节 在 r5 中ret

两个16位二进制数相加单片机程序 40

10楼:

啥单片机?如果不考虑负数,那么:

32位cpu的,直接加,

16位的直接加,但要判断最高位是否溢出,

8位的,低8位先加,再高8位相加,同时加上低8位的进位,再判定最高位是否溢出。

以上供参考。

11楼:匿名用户

;r2r3+r4r5=r1r2r3

add16:

mov r1,#0

mov a,r3

add a,r5

mov r3,a

mov a,r2

addc a,r4

mov r2,a

jnc add161

mov r1,#1

add161:ret

51单片机两个十六位数减法

12楼:匿名用户

两个16位?的字符串?还是数字? 如果是数字直接运算。。。。。。如果是字符串,转成数字先。

51单片机二字节乘法程序

13楼:匿名用户

标号: muld 功能:双字节二进制无符号数乘法子程序入口条件:被乘数在r2、r3中,乘数在r6、r7中。

出口信息:乘积在r2、r3、r4、r5中。

影响资源:psw、a、b、r2~r7 堆栈需求: 2字节muld: mov a,r3 ;计算r3乘r7mov 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,aret

14楼:匿名用户

用c语言开发,你就 不用编写这种程序了

51单片机处理16位数

15楼:匿名用户

用汇编也可以处理,一楼的方法也是一种。

如果用c语言编程,无非就是把16位数分成两部分,高8位与低8位,在运算的时候,按照我们一般的规则,从低位开始先乘后加。编程序细致一点,问题不大。

16楼:匿名用户

16位与16位的乘法和除法可能是32位了

unsigned long int ║4字节║0~4294967295

你可以申明个

unsigned long int temp;

unsigned int k1,k2;

temp = k1*k2;

17楼:匿名用户

1、整型数为16位。16位与16位相乘,则需定义长整型32位。除法则会取整处理。汇编实现时需要严谨处理。

2、简单办法是直接定义float型变量。注意float转整型时不会四舍五入处理。+0.5处理。

具体要看看你的**。

18楼:匿名用户

没用过,好像通过移位的方法可以处理16位数据!

如何用汇编设计两个16位数相减的程序

19楼:匿名用户

减数低八位送30h,高八位送31h。被减数低八位送32h,高八位送33h。差送34(低八位)、35(高八位)。

清cymov a, 30hsubb a, 32hmov 34h, a

mov a, 31hsubb a, 33hmov 35h, a

这是8051单片机的设计方法,要是有支持16位的减法指令就不用设计了,直接写就ok了。

20楼:匿名用户

16位数是16位二进制数还是十进制数??(假如单片机是8位的)如果是16位二进制数就用2个寄存器*2+z标志,每个数用2个寄存器来存储,先算低8位的,然后算高8位减去z位其实用c位也可以如果是16位十进制数要转化为二进制,然后就十分麻烦了,定义一个数组或者结构体这么大的数字单片机算得很累的,没有试过

21楼:匿名用户

有16位减法就直接用单个指令实现,没有的话想办法扩展就ok了。

22楼:风雷小草

二楼的基本思路是对的,但没有考虑低字节相减得负数的情况。需要结合状态寄存器,用分支对不同的情况进行区分。

单片机的双串口通讯怎样能让两个串口不互相冲突

1楼 匿名用户 一个用t1产生波特率,一个用自带的brt发生器产生波特率 一个中断的时候立即关总中断,避免另外一个造成中断重入,中断完成后开总中断 这样就能完全避开冲突。比如stc12c5a60s2或者nxp的p89lpc952都是双串口的,我都用过。 2楼 匿名用户 两个用相同的波特率,都用brt...