關(guān)于51單片機(jī)中的RAM、SFR和位地址的問題
51單片機(jī)中_有_4EH這個(gè)位地址。
51單片機(jī)片內(nèi)RAM的20H~2FH,這十六字節(jié),可以按照“位”來尋址。
這里面共有128個(gè)“位地址”,分別為00H~7FH。
位地址4EH,是在“字節(jié)地址為29H的字節(jié)單元”中的第6位。
后記:做而論道搜集了51單片機(jī)中片內(nèi)RAM的使用規(guī)范,整理如下。
MCS-51系列單片機(jī)片內(nèi)RAM共有128字節(jié),地址范圍為00H~7FH。
在這128字節(jié)中,全部都可以按照字節(jié)地址進(jìn)行操作(讀、寫或運(yùn)算),直接或間接尋址方式皆可。
在這128字節(jié)中,按照使用特點(diǎn),可以分成三類:工作寄存器區(qū)、位尋址區(qū)和通用數(shù)據(jù)區(qū)。
片內(nèi)RAM的使用分類可見表1。
下面按照它們的功能特點(diǎn),分別加以介紹。
1.工作寄存器區(qū)
在MCS-51系列單片機(jī)的片內(nèi)RAM中,有四個(gè)工作寄存器區(qū),分別稱為工作寄存器區(qū)0~工作寄存器區(qū)3。
每區(qū)有八個(gè)字節(jié),除了可以用字節(jié)地址號(hào)碼操作之外,還可以用R0、R1…R7為名稱對(duì)其操作。用名稱進(jìn)行操作,稱為寄存器尋址,指令代碼較為簡(jiǎn)短。
其中R0、R1可以作為間接尋址寄存器,以其中內(nèi)容作為地址,能夠?qū)ζ瑑?nèi)RAM(或片外RAM的256字節(jié))進(jìn)行間接尋址。
在任何時(shí)刻,只能使用一個(gè)工作寄存器區(qū)。當(dāng)前使用那個(gè)區(qū),可以通過指令設(shè)置PSW中的RS1和RS0來決定。PSW稱為程序狀態(tài)字,是下面要介紹的特殊功能寄存器。
通過設(shè)置RS1和RS0,可以快速切換當(dāng)前工作寄存器區(qū),適合在不同的程序段中進(jìn)行保護(hù)現(xiàn)場(chǎng)。當(dāng)前沒有使用的工作寄存器區(qū),不能使用R0、R1…R7等名稱,但可以按字節(jié)地址對(duì)其隨意讀寫。
復(fù)位時(shí)RS1和RS0皆初始化為0,故此復(fù)位后將自動(dòng)使用工作寄存器區(qū)0。
2.位尋址區(qū)
位尋址區(qū)共有16字節(jié),字節(jié)地址為20H~2FH,每個(gè)字節(jié)中的8個(gè)“位”,都有一個(gè)“位地址”。共有128個(gè)位,“位地址”的范圍為00H~7FH。
這個(gè)區(qū)域中的“字節(jié)地址”與“位地址”的對(duì)應(yīng)關(guān)系可見表2。
從表2中可以看到,前面問題所提到的“位地址4EH”,是在“字節(jié)地址29H”中,是第6位。
對(duì)位尋址區(qū)可以按照“位地址”來對(duì)某一個(gè)位單獨(dú)進(jìn)行操作,也可以按照“字節(jié)地址”進(jìn)行操作,即同時(shí)對(duì)八個(gè)位地址的內(nèi)容進(jìn)行操作。
MCS-51系列單片機(jī)具有一套專用的“位操作”指令(又稱為布爾指令),可對(duì)這些位地址進(jìn)行“與”、“或”、“非”等操作。這是該系列單片機(jī)的特色之一。
3.通用數(shù)據(jù)區(qū)
通用數(shù)據(jù)區(qū)有80字節(jié),只能按“字節(jié)地址”(直接或間接尋址)進(jìn)行操作。
上面介紹了00H~7FH地址范圍內(nèi)的RAM,下面接著這個(gè)地址,繼續(xù)向高地址方向介紹。
在片內(nèi)80H~FFH地址范圍內(nèi),離散的分布著21個(gè)特殊功能寄存器(SFR),寄存器名稱與地址分布見表3。
8052系列單片機(jī),在80H~FFH范圍內(nèi),還有128字節(jié)的片內(nèi)通用RAM,對(duì)其操作時(shí),則必須采用“間址”尋址方式。
而對(duì)這片地址范圍內(nèi)的特殊功能寄存器只能采用“直接”尋址方式進(jìn)行操作。
特殊功能寄存器中有11個(gè)還可以進(jìn)行“位尋址”,表3中也列出了可以位尋址的寄存器以及位地址號(hào)碼。
在表3中,如果位地址為空白,則說明該寄存器不能進(jìn)行“位尋址”。
由表3可以看出規(guī)律:當(dāng)字節(jié)地址可以被8整除時(shí),該字節(jié)即可以按位尋址。其最低位的“位地址”與“字節(jié)地址”相同,其他位的位地址向高位依次加1。
================================================