本帖最后由 yzwzfyz 于 2023-5-29 08:19 编辑
1、51系列的RAM分外部分和内部。
外部的用16位地址访问,访问空间是65536,就叫X-RAM吧。对于8位机来说,相应的操作指令至少3个字节(命令码、地址低、地址高),取指至少分3次。这样速度稍慢。
2、51设立了一个内部的可直接快速访问RAM,只用8位地址,就叫I-RAM吧,所以寻址空间只能有256个,访问内部RAM的指令只要两个字节(命令码、地址),这样速度快。
3、单片机需要用到许多寄存器(A,B,SP,……),由于寄存器本身的性质也是RAM,只不过利用率高一些,所以就从内部的256RAM中,切出了一部分,也就是高128个字节,用于给这些特殊寄存器安家,就叫S-RAM吧。
4、这种借用内部RAM的方式,不仅仅发生在高128字节,其中00-07,08-0F,10-17,18-1F,也被借去来表示R0-R7,且可以有四种切换方式。(由PSW切换)
5、这种借用的好处是,不必另制寄存器了,但占用了用户的资源。为了补上高128字节的空间,后期的51,又增加了128个字节的内部RAM(8052及之后的产品),来填补被特殊寄存器占用的地方。
这就发生了一个矛盾:当访问高128字节地址时(80-8F)时,究竟是访问补充的用户RAM呢,还是特殊寄存器呢?
51想了一个招:用直接访问指令与间接访问指令来区分。在选择上,考虑到特殊寄存器使用频率高,就把直接访问指令用于访问特殊寄存器了。
所以:用户在使用RAM时,就出现了高128字节要用间接指令访问!而低128字节间接、直接都可以。
对于用汇编编程的要注意这个,对于用C编程,由编译平台来控制,但程序员必须将变量的存储位置(方式)做个定义,以便编译平台作区分。
6、当你对特殊寄存器非常了解时,也可以将它当作普通RAM看待使用。这里强调非常了解!!用C写程序的人,不要这样做,风险太大。
7、51与其它类型的单片机比,最灵活的就是有位寻址!同理,8位机的指令,可以访问256个位。51对这256个位做了安排。当然是在256+128个字节的内部RAM中选出256个位了。
选出的256个位是:
7.1、80-8F特殊寄存器中,能被8整除的地址(只有16个字节,共计128位)。如P0=80H中的各个位。而PCON=87H是不可以位寻址的。现在知道为什么特殊寄存器中有的位,是不可以定义成BIT的了吧,就是那些不能被8整除的地址寄存器。
在位地址对应上:用128~256对应80H.0[P0.0],80H.1[P0.1],80H.2[P0.2],……88H.x[TCON.x]……90H.x[P1.x]……F8H.7[STC有利用,基本51未用]。
7.2、20-2F这16个字节,计128位。在位地址对应上:用0~127对应20H.0~2FH.7。
8、在用汇编编程时,常用一个指令修改8个位,这是常用的技巧。
9、STC在51系列的发展上下了很大功夫,STC对51做了重大改进:
9.1、在80-FFH空间上,将基本51未用到的利用了起来,在其中增插了许多特殊寄存器,如双DPTR中的第二个DPTR,PWM……,如何定义的,请看STC的手册,长长见识。
9.2、当80-FFH空间被STC用满后,又将XRAM中的一部分用来做特殊寄存器,如PWM-N,乘法器,除法器……如何定义的,需要看STC的手册,去长知识。
9.3、对取指方案作了改进,加入了队列取指方案,使得原来需要12个机器周期取一条令指方案,提升到1-6个周期。但STC可以选择保留了原方案,且设置为默认。这就是有STC系列,有1T/12T选择的原因。
……
|