51单片机什么是字节寻址 能存多少字节

查看: 501|回复: 8
51单片机如何实现4个字节乖以4个字节得结果8个字节
0X * 0X&&= 0X14B66DC1DF4D840
51数据类型最大就是4个字节好像
哈哈,这个我上次遇到过,后面用汇编解决的
哈哈,这个我上次遇到过,后面用汇编解决的
大神,你的汇编方法分享一下啊
在网上找到一个汇编的方法,看上去不错
-------------------------------------------------------------------------------------
还.....倾家荡产跪求,就给100分
这个问题要分成好几种情况:
1. 操作数在寄存器中,R0--R7
2. 操作数在内RAM中
3. 操作数在外RAM中
不过都大同小异,以2例,是个乘法子程序。
入口:乘数R0,被乘数R1,字节数R7,结果在R0
MULN: LCALL N2N ;多字节十六进制乘法
MULN1: MOV A,R5
LCALL RLCN
LCALL ADDN
MULN2: DJNZ R3,MULN1
N1N: MOV A,R1
MULN3: DEC R0
DJNZ R2,MULN3
RLCN: MOV A,R7 ;多字节二进制无符号数左移一位
RLCN1: MOV R2,A
RLCN2: DEC R0
DJNZ R2,RLCN2
N2N: MOV A,R7
N2N1: MOV A,@R1
DJNZ R2,N2N1
LCALL CLRN
LCALL CLRN
ADDN: MOV A,R7
ADN1: DEC R0
ADDC A,@R0
DJNZ R2,ADN1
CLRN: MOV A,R7
CLRN1: DEC R0
DJNZ R2,CLRN1
比如你要把H这个十六进制数乘以H,那么你可以这样调用:
MOV R0,#30H ;被乘数区
MOV R1,#40H ;乘数区
MOV R7,#04H ;字节数
MOV 30H,#12H ;填充被乘数
MOV 31H,#34H
MOV 32H,#56H
MOV 33H,#78H
MOV 40H,#87H ;填充乘数
MOV 41H,#65H
MOV 42H,#43H
MOV 43H,#21H
CALL MULN ;调用
这时的结果在R0所指的数据区,即30H-37H共八个字节。当然你是3字节乘法的话,把R7改成03H就可以了,结果为6个字节,高字节在前,低字节在后。一定要注意把R0所指的区留出存放结果的空间。比如3字节乘法,你要留出6个字节空间,5字节乘法要留出10个字节的空间。反正很灵活的。想做多少字节乘法都可以。
这是除法子程序,入口、字节数、出口和乘法一样,不过有个限制:只限于被除数小于除数,结果为纯小数。不知老兄是否适用。
DIVN: LCALL DIV0 ;多字节16进制除法子程序
DIVN1: MOV A, R0
MOV B, #08H
DIVN4: LCALL DIVN8
LCALL ADDN
DIVN5: MOV A, R5
LCALL RLCN
DJNZ R3,DIVN4
LCALL DIVN8
LCALL INCN
DIVN6: MOV A, R1
DIVN7: DEC R0
MOV A, @R1
MOV @R0, A
DJNZ R2,DIVN7
DIVN8: MOV A,R4
LCALL RLCN
MOV 2FH.4,C
LCALL SUBN
ANL C,/2FH.4
DIV0: MOV A,R7
DIV01: DEC R0
SUBB A,@R1
DJNZ R2,DIV01
ADDN: MOV A,R7
ADN1: DEC R0
ADDC A,@R0
DJNZ R2,ADN1
INCN: MOV A,R7
INCN1: MOV R2,A
INCN2: DEC R0
ADDC A,@R0
DJNZ R2,INCN2
RLCN: MOV A,R7
RLCN1: MOV R2,A
RLCN2: DEC R0
DJNZ R2,RLCN2
SUBN: MOV A,R7
SUB1: DEC R0
SUBB A,@R1
DJNZ R2,SUB1
想想你是怎么列竖式的,就知道了。C语言库给你的乘法运算符只有32位结果,为了不溢出也就是只能用16位的输入。所以你得把32位输入拆成2个16位的,然后自己算,一共4个乘法,3个加法。(其实C库的16位*16位=32位也是用硬件指令8位*8位=16位来算的)
你这是要小蚂蚁拉火车啊
你这是要小蚂蚁拉火车啊
没什么啊,所有图灵完备的指令集,处理能力都是等效的。
人脑实际上只会直接算9*9以内的乘法呢(也就是背九九乘法表 )
更多位数的乘法都是一步一步乘啊加啊做出来的。
51自带的硬乘法器可以一步完成255*255以内的乘法,比人强多了~
jswd0810 发表于
你这是要小蚂蚁拉火车啊
对速度没要求就好
应该有支持long logn的编译器吧,用加法和乘法应该也不难吧
阿莫电子论坛, 原"中国电子开发网"21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 11783|回复: 28
用51单片机中的SBUF怎么传输两个字节的数据?
&&已结帖(5)
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
51单片机中的SBUF一次只能存放8位吗,我想在数码管上显示0~65535之间的数,怎么分开发送?
满意回复+2
最简单的收到两个字节就显示
分两次传,显示时也要分别显示高8位和低8位,这也不是直接处理16位数据的,除非你使用16位的MCU。
支持楼上的想法,接受数据的那个51整一个字来存放SBUF中传过来的数据,每两次接收完SBUF的数据后,就进行显示,注意使用串口工作模式1 ...
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
我是菜鸟,希望老鸟们的回答不要那么深奥含蓄······:L
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
主题帖子积分
资深工程师, 积分 11634, 距离下一级还需 8366 积分
资深工程师, 积分 11634, 距离下一级还需 8366 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.10
主题帖子积分
资深工程师, 积分 11634, 距离下一级还需 8366 积分
资深工程师, 积分 11634, 距离下一级还需 8366 积分
无限个字节都可以传。。。
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定
谁能花一分钟给俺写个示例啊!!想了一下午了,没人可以问,就自己在学,看书也没什么结果!!:Q:Q
谢谢了!!!!!!
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
最简单的收到两个字节就显示
主题帖子积分
高级技术员, 积分 572, 距离下一级还需 428 积分
高级技术员, 积分 572, 距离下一级还需 428 积分
主题帖子积分
专家等级:结帖率:67%
主题帖子积分
高级技术员, 积分 572, 距离下一级还需 428 积分
高级技术员, 积分 572, 距离下一级还需 428 积分
支持楼上的想法,接受数据的那个51整一个字来存放SBUF中传过来的数据,每两次接收完SBUF的数据后,就进行显示,注意使用串口工作模式1
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
最简单的收到两个字节就显示
ayb_ice 发表于
您的意思是收到两个子节后,在软件程序中把收到的两个字节合并为一个数据(int型),再放在数码管上显示?
主题帖子积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:25.76
主题帖子积分
分两次传,显示时也要分别显示高8位和低8位,这也不是直接处理16位数据的,除非你使用16位的MCU。
,站内信、QQ、邮件等仅供业务或私人用途使用,不对技术问题单独解答。
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
我想达到这样的效果:上位机发送FFFE,数码管上显示65534 ,虽然要分两次发送,但这种16位数据整体显示,这种结果是分开显示呢还是要拼接合并呢? 我一样都不会·········
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
技术总监, 积分 40135, 距离下一级还需 9865 积分
基础太差,没有办法
主题帖子积分
中级技术员, 积分 255, 距离下一级还需 45 积分
中级技术员, 积分 255, 距离下一级还需 45 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 255, 距离下一级还需 45 积分
中级技术员, 积分 255, 距离下一级还需 45 积分
分开显示还是合并显示,显示效果都是一样的
主题帖子积分
实习生, 积分 21, 距离下一级还需 29 积分
实习生, 积分 21, 距离下一级还需 29 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 21, 距离下一级还需 29 积分
实习生, 积分 21, 距离下一级还需 29 积分
主题帖子积分
高级技术员, 积分 630, 距离下一级还需 370 积分
高级技术员, 积分 630, 距离下一级还需 370 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 630, 距离下一级还需 370 积分
高级技术员, 积分 630, 距离下一级还需 370 积分
分成4位,HEX&&:FFFE,发的时候3f,3f,3f,3e,头字节加个20
整合起来就是 20h,3fh,3fh,3fh,3eh
主题帖子积分
初级工程师, 积分 2413, 距离下一级还需 587 积分
初级工程师, 积分 2413, 距离下一级还需 587 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级工程师, 积分 2413, 距离下一级还需 587 积分
初级工程师, 积分 2413, 距离下一级还需 587 积分
对LZ这样的只能说无语
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
我同意10楼的想法,就分开送,送的时间很短,你肉眼看不见区别的,,数码管上还是同时显示的
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
我自己搞出来了·····:time:
主题帖子积分
资深工程师, 积分 16588, 距离下一级还需 3412 积分
资深工程师, 积分 16588, 距离下一级还需 3412 积分
主题帖子积分
专家等级:结帖率:96%
主题帖子积分
资深工程师, 积分 16588, 距离下一级还需 3412 积分
资深工程师, 积分 16588, 距离下一级还需 3412 积分
恭喜LZ,&&功力有上一台阶
学习chunyang和maychang两位老师,努力练好基本功。
学习HOT大叔,学好“Cortex-M0”,做“Cortex-M0”之菜鸟。
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
主题帖子积分
专家等级:结帖率:93%
主题帖子积分
资深技术员, 积分 366, 距离下一级还需 134 积分
资深技术员, 积分 366, 距离下一级还需 134 积分
Cortex-M0 老大都来顶我一下,真是惭愧啊·····
我用的是合并方法,,分两次发送,要显示小于256的数时得先发0,再发数,大于256得数直接发两次就行了。
这样有点麻烦,不过总算让我搞出来的,算是达到了自己预想的结果,这道题是郭天祥老师的视频里的,我看差不多了,还剩液晶和IIC总线还没看,继续坚持吧!!!:hug:
技术高手奖章
人才类勋章
涓涓之细流
发帖类勋章
时间类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
精英会员奖章
等级类勋章
奔腾之江水
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
永恒之光奖章
等级类勋章
时间类勋章
晶莹之水滴
发帖类勋章
时间类勋章
湍急之河流
发帖类勋章
技术导师奖章
人才类勋章
精华达人奖章
等级类勋章
核心会员奖章
等级类勋章
热门推荐 /2在AT89C51系列单片机内有几类存储器?存储容量分别是多少?_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
在AT89C51系列单片机内有几类存储器?存储容量分别是多少?
我有更好的答案
即R0,即从用户的角度上,8051单片机有三个存储空间,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器,应采用不同形式的指令以产生不同的存储器空间的选通信号。程序ROM寻址范围:0000H ~ FFFFH 容量64KBEA = 1:1、R1是8位的寄存器。也就是说在寻址片外数据存储器时、片内外统一编址的64K的程序存储器地址空间(MOVC)2、256B的片内数据存储器的地址空间(MOV)3、以及64K片外数据存储器的地址空间(MOVX)在访问三个不同的逻辑空间时;EA = 0,寻址外部ROM地址长度:16位作用: 存放程序及程序运行时所需的常数数据存储器片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,寻址内部ROM,寻址范围超过了256B、片内程序存储器2、片外程序存储器3、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KBMCS-51单片机在物理结构上有四个存储空间:1、片内数据存储器4、片外数据存储器但在逻辑上,R0、R1和DPTR都可以做为间接寻址寄存器,R0
采纳率:80%
在AT89C51系列单片机内有两类存储器:FLASH程序存储容量4K字节;内部数据存储RAM容量128字节.
为您推荐:
其他类似问题
存储容量的相关知识
等待您来回答请问单片机89C51中C语言int和char类型跟占用多少字节?谢谢_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
请问单片机89C51中C语言int和char类型跟占用多少字节?谢谢
我有更好的答案
char类型的占据1个字节对于该款单片机,int类型的变量占据2个字节。不过一般大家为了节约空间,大部分会使用char类型,同时89C51是一款8位的单片机,所以推荐使用char类型的变量进行运算,即使我们在代码中写入int类型的变量进行运算
采纳率:62%
来自团队:
int 是2个字节,char是1个字节。
为您推荐:
其他类似问题
c语言的相关知识
等待您来回答大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

我要回帖

更多关于 单片机单字节指令 的文章

 

随机推荐