51單片機(jī)中data,idata,xdata,pdata的區(qū)別
就不如我很清楚s12單片機(jī)什么片內(nèi)ram啊,flash大小啊,反而是51的不敢肯定的回答哦。
本文引用地址:http://m.butianyuan.cn/article/201611/323092.htm比如今天再次看到的這個問題,以前就看到過,但因?yàn)橐恢辈辉趺锤銋R編程序,所以對51單片機(jī)中的data、idata、xdata和pdata一直不清楚,不過今天不再脫了,決定一定弄清楚。
--------------------------------------------------------------------------------------------
再附上51片內(nèi)資源簡介,再次記憶。
.8位CPU·4kbytes 程序存儲器(ROM) (52為8K)
·256bytes的數(shù)據(jù)存儲器(RAM) (52有384bytes的RAM)
·32條I/O口線·111條指令,大部分為單字節(jié)指令
·21個專用寄存器
·2個可編程定時/計數(shù)器·5個中斷源,2個優(yōu)先級(52有6個)
·一個全雙工串行通信口
·外部數(shù)據(jù)存儲器尋址空間為64kB
·外部程序存儲器尋址空間為64kB
·邏輯操作位尋址功能·雙列直插40PinDIP封裝
·單一+5V電源供電
CPU:由運(yùn)算和控制邏輯組成,同時還包括中斷系統(tǒng)和部分外部特殊功能寄存器;
RAM:用以存放可以讀寫的數(shù)據(jù),如運(yùn)算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);
ROM:用以存放程序、一些原始數(shù)據(jù)和表格;
I/O口:四個8位并行I/O口,既可用作輸入,也可用作輸出;
T/C:兩個定時/記數(shù)器,既可以工作在定時模式,也可以工作在記數(shù)模式;
五個中斷源的中斷控制系統(tǒng);
一個全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實(shí)現(xiàn)單片機(jī)之間或單片機(jī)與微機(jī)之間的串行通信;
片內(nèi)振蕩器和時鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最高振蕩頻率為12M。
--------------------------------------------------------------------------------------------
回到主題上來,從數(shù)據(jù)存儲類型來說,8051系列有片內(nèi)、片外程序存儲器,片內(nèi)、片外數(shù)據(jù)存儲器,片內(nèi)程序存儲器還分直接尋址區(qū)和間接尋址類型,分別對應(yīng)code、data、xdata、idata以及根據(jù)51系列特點(diǎn)而設(shè)定的pdata類型,使用不同的存儲器,將使程序執(zhí)行效率不同,在編寫C51程序時,最好指定變量的存儲類型,這樣將有利于提高程序執(zhí)行效率(此問題將在后面專門講述)。與ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各種不同的模式對應(yīng)不同的實(shí)際硬件系統(tǒng),也將有不同的編譯結(jié)果。
在51系列中data,idata,xdata,pdata的區(qū)別:
data:固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼
也最小。
idata:固定指前面0x00-0xff的256個RAM,其中前128和data的128完全相同,只是因?yàn)樵L
問的方式不同。idata是用類似C中的指針方式訪問的。匯編中的語句為:
mox ACC,@Rx.(不重要的補(bǔ)充:c中idata做指針式的訪問效果很好)。
xdata:外部擴(kuò)展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。
pdata:外部擴(kuò)展RAM的低256個字節(jié),地址出現(xiàn)在A0-A7的上時讀寫,用movx ACC,@Rx
讀寫。這個比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優(yōu)點(diǎn),具
體用法屬于中級問題,這里不提。
評論