㈠ 51单片机是否能够完成16位的加减乘除运算
51单片机是8位单片机,一次运算只能进行8位加减乘除,但16位乘除法可以通过多次运算获得,汇编程序在很多教科书上都有
如果用C语言的话,可以不考虑它是怎么实现的,只管定义两个整形变量(16位)即可
㈡ 8位的单片机可不可以直接对16位数进行运算
不能直接进行运算,没有这个指令。
㈢ 8位单片机中如何对16位INT型数据进行操作
分高八位和低八位分别操作就可以了,典型的应用如定时器赋初值:
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
㈣ 在8位单片机如何实现16位运算
如果你是用C编译器,那么根本就不用考虑这个问题,因为编译器都为你解决了,你只需要定义16位的变量(如int型)
但如果你是用汇编语言写程序,那么就得为程序分配内存单元(字型变量),利用四个或四个以上的八位寄存器,先低八位进行运算,然后进行高八位的运算,但其中要注意状态寄存器的变化。
㈤ 51内核8位单片机处理16位数据可行吗
8位单片机一次可以处理8位二进制数的加减乘除,当然也可以计算16二进制位数了,只不过多运算几次就行了,汇编语言的具体算法教科书上有例子,用C语言编程的话,完全不用理会它是怎么算的,只管写公式就行了,如:
uint a,b,c; a=1200; b=2600; c=a+b;
甚至可以算小数:如 double a,b,c; a=125.67; b=36.88; c=a+b;
当然计算小数比较占内存,一个double变量占8个字节,运算也比较慢
归功于库函数,还可以计算三角函数,运算时间也只需数ms
㈥ 8位单片机用汇编怎么运算16位数
汇编一个模块,如下面的是一个 两字节 乘 两字节 的乘法模块,除法也一样,
; / *** *** *** *** *** / 2*2=4字节乘法
; JTYA7 JTYA6 * JTYA5 JTYA4 = JTYA3---JTYA0
PCHD10: MOV JTYA3, #00H
MOV JTYA2, #00H
MOV JTYA1, #00H
MOV JTYA0, #00H
PCHD12: MOV R3, #10H ; 2 字节
PCHD13: CLR C ; = xxxx 左移
MOV A, JTYA0
RLC A
MOV JTYA0, A
MOV A, JTYA1
RLC A
MOV JTYA1, A
MOV A, JTYA2
RLC A
MOV JTYA2, A
MOV A, JTYA3
RLC A
MOV JTYA3, A
MOV A, JTYA6 ; xx * 左移
RLC A
MOV JTYA6, A
MOV A, JTYA7
RLC A
MOV JTYA7, A
JNC PCHD18
MOV A, JTYA0 ; 乘积
ADD A, JTYA4 ; xx * xx = xxxx
MOV JTYA0, A
MOV A, JTYA1
ADDC A, JTYA5
MOV JTYA1, A
MOV A, JTYA2
ADDC A, #00H
MOV JTYA2, A
MOV A, JTYA3
ADDC A, #00H
MOV JTYA3, A
PCHD18: DJNZ R3, PCHD13
RET
㈦ 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