|
本帖最后由 yzwzfyz 于 2023-5-29 08:19 編輯
1、51系列的RAM分外部分和內(nèi)部。
外部的用16位地址訪問,訪問空間是65536,就叫X-RAM吧。對(duì)于8位機(jī)來(lái)說,相應(yīng)的操作指令至少3個(gè)字節(jié)(命令碼、地址低、地址高),取指至少分3次。這樣速度稍慢。
2、51設(shè)立了一個(gè)內(nèi)部的可直接快速訪問RAM,只用8位地址,就叫I-RAM吧,所以尋址空間只能有256個(gè),訪問內(nèi)部RAM的指令只要兩個(gè)字節(jié)(命令碼、地址),這樣速度快。
3、單片機(jī)需要用到許多寄存器(A,B,SP,……),由于寄存器本身的性質(zhì)也是RAM,只不過利用率高一些,所以就從內(nèi)部的256RAM中,切出了一部分,也就是高128個(gè)字節(jié),用于給這些特殊寄存器安家,就叫S-RAM吧。
4、這種借用內(nèi)部RAM的方式,不僅僅發(fā)生在高128字節(jié),其中00-07,08-0F,10-17,18-1F,也被借去來(lái)表示R0-R7,且可以有四種切換方式。(由PSW切換)
5、這種借用的好處是,不必另制寄存器了,但占用了用戶的資源。為了補(bǔ)上高128字節(jié)的空間,后期的51,又增加了128個(gè)字節(jié)的內(nèi)部RAM(8052及之后的產(chǎn)品),來(lái)填補(bǔ)被特殊寄存器占用的地方。
這就發(fā)生了一個(gè)矛盾:當(dāng)訪問高128字節(jié)地址時(shí)(80-8F)時(shí),究竟是訪問補(bǔ)充的用戶RAM呢,還是特殊寄存器呢?
51想了一個(gè)招:用直接訪問指令與間接訪問指令來(lái)區(qū)分。在選擇上,考慮到特殊寄存器使用頻率高,就把直接訪問指令用于訪問特殊寄存器了。
所以:用戶在使用RAM時(shí),就出現(xiàn)了高128字節(jié)要用間接指令訪問!而低128字節(jié)間接、直接都可以。
對(duì)于用匯編編程的要注意這個(gè),對(duì)于用C編程,由編譯平臺(tái)來(lái)控制,但程序員必須將變量的存儲(chǔ)位置(方式)做個(gè)定義,以便編譯平臺(tái)作區(qū)分。
6、當(dāng)你對(duì)特殊寄存器非常了解時(shí),也可以將它當(dāng)作普通RAM看待使用。這里強(qiáng)調(diào)非常了解!!用C寫程序的人,不要這樣做,風(fēng)險(xiǎn)太大。
7、51與其它類型的單片機(jī)比,最靈活的就是有位尋址!同理,8位機(jī)的指令,可以訪問256個(gè)位。51對(duì)這256個(gè)位做了安排。當(dāng)然是在256+128個(gè)字節(jié)的內(nèi)部RAM中選出256個(gè)位了。
選出的256個(gè)位是:
7.1、80-8F特殊寄存器中,能被8整除的地址(只有16個(gè)字節(jié),共計(jì)128位)。如P0=80H中的各個(gè)位。而PCON=87H是不可以位尋址的。現(xiàn)在知道為什么特殊寄存器中有的位,是不可以定義成BIT的了吧,就是那些不能被8整除的地址寄存器。
在位地址對(duì)應(yīng)上:用128~256對(duì)應(yīng)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個(gè)字節(jié),計(jì)128位。在位地址對(duì)應(yīng)上:用0~127對(duì)應(yīng)20H.0~2FH.7。
8、在用匯編編程時(shí),常用一個(gè)指令修改8個(gè)位,這是常用的技巧。
9、STC在51系列的發(fā)展上下了很大功夫,STC對(duì)51做了重大改進(jìn):
9.1、在80-FFH空間上,將基本51未用到的利用了起來(lái),在其中增插了許多特殊寄存器,如雙DPTR中的第二個(gè)DPTR,PWM……,如何定義的,請(qǐng)看STC的手冊(cè),長(zhǎng)長(zhǎng)見識(shí)。
9.2、當(dāng)80-FFH空間被STC用滿后,又將XRAM中的一部分用來(lái)做特殊寄存器,如PWM-N,乘法器,除法器……如何定義的,需要看STC的手冊(cè),去長(zhǎng)知識(shí)。
9.3、對(duì)取指方案作了改進(jìn),加入了隊(duì)列取指方案,使得原來(lái)需要12個(gè)機(jī)器周期取一條令指方案,提升到1-6個(gè)周期。但STC可以選擇保留了原方案,且設(shè)置為默認(rèn)。這就是有STC系列,有1T/12T選擇的原因。
……
|
|