本帖最后由 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選擇的原因。
……
|