
8051单片机的存储器在物理结构上分为程序存储器空间和数据存储器空间,共有4个存储空间:片内程序存储器、片外程序存储器以及片内数据存储器、片外数据存储器空间。这种程序存储和数据存储分开的结构形式被称为哈佛结构。但从用户的角度,8051存储器地址空间可分为3类:片内、片外统一编址 0000H~FFFFH的64KB程序存储器地址空间(用16位地址);64KB片外数据存储器地址空间,地址也从0000H~FFFFH(用16位地址)编址;256B片内数据存储器地址空间(用8位地址)。
上述4个存储空间地址是重叠的,如图所示。8051的指令系统设计了不同的数据传送指令以区别这4个不同的逻辑空间:CPU访问片内、片外ROM指令用MOVC,访问片外RAM指令用MOVX,访问片内RAM指令用MOV。
程序存储器用于存放编好的程序和表格常数。程序通过16位程序计数器寻址,寻址能力为64KB。这使得指令能在64KB的地址空间内任意跳转,但不能使程序从程序存储器空间转移到数据存储器空间。
实际上,当引脚EA接高电平时,8051的程序计数器PC执行片内ROM中的程序,当指令地址超过片内ROM地址时,就自动转向片外ROM中去取指令。当引脚EA接低电平(接地)时,8051片内ROM不起作用,CPU只能从片外ROM中取指令,地址可以从0000H开始编址。8051从片内程序存储器和片外程序存储器取指时的执行速度相同。
还可以到这里看看>
以下程序就可以了:
MOV R2, #0
MOV DPTR, #0B5A3H
CALL NUM
CALL NUM
MOV A, R2 ;A = 0x9 = 00001001b
SJMP $
NUM:
MOVX A, @DPTR
INC DPTR
MOV R3, #8
LP:
RLC A
JNC NEXT
INC R2
NEXT:
DJNZ R3, LP
RET
END
软件延时程序就是利用执行每一条指令时所用的时间来进行延时的。
一般采用循环结构,达到多次反复执行某一段指令的目的,来增加延时的时间,可以通过对循环次数的控制,来达到控制延时时间长短的目的。
为了延长延时时间,一般要采用多重循环,即由外循环内部又含有内循环。
延时时间=(内循环时间)×外循环次数。
例如:设计一个延时1ms的延时子程序ys1ms,设单片机8051的时钟频率为12MHZ。
则单片机8051一个机器周期=12T=12/f=12/12MHZ=1微秒
程序和延时时间计算如下:
ys1ms: MOV R7,#4 ; 单周期1uS ( 晶振为12MHz)
DEL1: MOV R6,#123 ; 单周期1uS
DEL2: DJNZ R6,DEL2 ; 双周期2uS123=246uS
DJNZ R7,DEL1 ; 双周期(2us+246+1)4=996uS
NOP ; 单周期1uS
RET; 双周期2uS
延时时间t=1uS +(1us+246uS+2uS)×4+1uS+2uS=1000uS=1ms
其中 (1us+246uS+2uS)=249uS 为内循环时间 4为外循环次数
第一个1uS 是第一条指令的执行时间
1uS+2uS 是 最后二条指令 NOP RET指令的执行时间。
哈哈 给俺加分吧
以上就是关于8051中,最大可寻址的程序存储空间和数据存储空间分别是多少全部的内容,包括:8051中,最大可寻址的程序存储空间和数据存储空间分别是多少、用C语言编制一个在8个数码管上轮流显示1~8的程序(单片机8051)、8051编写一个统计16位二进制数中1的个数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)