關(guān)于C51絕對(duì)尋址的問(wèn)題
在keilC51中 基本有兩種絕對(duì)尋址方式,盡量都不要使用。畢竟C51中內(nèi)存地址是由軟件自動(dòng)設(shè)置好了的。如果不熟悉就濫用反而引起程序出現(xiàn)問(wèn)題。
調(diào)試的程序如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
//#define led_on DBYTE[0x01]
idata char led_on _at_ 0x01;
void main()
{
led_on = 0x0F;
while(1)
{
P0 = led_on;
}
}
方式1: XBYTE[XXXX] :一般是用在擴(kuò)展I/O的時(shí)候,比如可以用為: XBYTE[0x8000]=0x01; 對(duì)外部8000RAM單元寫(xiě)入0x01;;DBYTE用于單片機(jī)內(nèi)部256RAM單元尋址。還有CBYTE,CWORD等等。就不盡數(shù)詳說(shuō)了。
方式2:【根據(jù)尋址范圍使用:IDATA、 XDATA 、...】 【數(shù)據(jù)類(lèi)型:char、...】 【變量名】 _at_ 【地址】
例如:idata char led_on _at_ 0x01; 即是申明為單片機(jī)內(nèi)部256單元的RAM的01單元,即R1(寄存器組0);
其他的地址根據(jù)尋址范圍來(lái)決定idata xdata 或者其他。
例子中的我使用的R1寄存器 在實(shí)際使用的時(shí)候不要這樣用。因?yàn)樗枪ぷ骷拇嫫?,值隨時(shí)可能在變!?。?/p>