如何理解微控制器裡面地址的概念是什麼?例如標頭檔案中已經定義好

2021-03-22 06:49:54 字數 6002 閱讀 2037

1樓:匿名使用者

微控制器裡面地址的概念,

就好比儲存器(暫存器)的標籤,以使不同儲存單元區分開來,不致發生混淆。更形象的比喻是門牌號,這就是地址,對應這個門牌號的房屋就是儲存單元,房屋內的東西就是儲存內容。

標頭檔案中已經定義好的各引腳地址,就是位地址,也就是一個埠有8位,就有8個位地址,可以理解成二級地址。形象的比方是門牌號是一個賓館的地址(位元組地址),賓館內部還有許多房間,要有房間號(位地址)。

2樓:匿名使用者

地址就是地址呀,就像你要找個人需要知道這個人的地址一樣,資料就是人,地址對應物理位置,引腳會在硬體上對映到對應的地址上,標頭檔案中的定義實際上是你在按通用的習慣給各個引腳一個名字罷了,其實主要還是讓你自己方便操作,能在看到名字的時候知道是幹什麼的,實際的你不定義,直接使用地址的某位是一樣的

微控制器中的地址單元是什麼意思?

3樓:千鋒教育

微控制器中的ram8個bit為一個單元

,就是說每8位二進位制數為一個儲存單元,ram共有256個這樣的儲存單元,前128個單元是一般的儲存單元,後128個單元為特殊功能暫存器,其實特殊功能暫存器只有21個,其它的空白沒有定義,打個這樣的一個比方,你應該知道中醫用的那個藥櫃,就是給抓藥的時候抽出一個框一個框那樣的,就好像是那個,那樣一個抽屜就是一個單元,裡面的一個小格子就是儲存單元的一位,那那個抽屜外面寫的小格子裡面都有什麼藥,以便找,那就是這個單元的地址,書上叫做位元組地址。

4樓:南窗倚

1::地址?就是地址呀,比方說你給我寫信,得有地址呀!!地址就是地址。沒有什麼可說的。

2::這些地址是怎麼知道 ??做微控制器的時候就做好了。就像你生就生在了那裡一樣,寫程式的時候是在標頭檔案當中定義的。

3::p1.0??地址當然就是0x90了。下面這是我從標頭檔案當中給你複製過來的內容:

sfr p1 = 0x90;

/*p1 (0x90) bit registers*/

sbit p1_0 = 0x90;

sbit p1_1 = 0x91;

看,它就給你詳細的說明了你的問題。

比方說你要將p1口全部置1,用c語言的話,你就可以這麼寫:

p1=0xff;

其中p1就是地址,0xff就是內容。像是你給我寫信一樣:「山西」就是我的地址,「你也是學微控制器的???」就是內容。就是這麼簡單。希望能對你有所幫助。謝謝。

5樓:

你用的是51的板子?地址是一回事,這

個地址的值又是另外一回事。

比如0x90表示p1口,但是0x90這個地址單元的值可以控制這個口的每一個埠,具體來說應該是每一位控制一個口。

p1口應該是從p1.0~p1.7吧,也就是八個,在微控制器中把八個埠作為一組,當作一個位元組來管理。

然後這個位元組的值來控制這八個口,比如值0x10控制p1.0開啟,其它口閉合,以此類推。

6樓:仲夏夜

把它們換成二進位制**,比如0x80就是 1000 0000,對應的是p1.7口的地址,以此類推就可以知道地址單元了。

為什麼微控制器程式中要定義地址,有什麼作用?不定義會出現問題嗎?這個地址是哪的地址?

7樓:抵賴馬

這個是led的欄位**表

這兩句把一些資料資料限制在儲存器裡固定的位置上(通常是記憶體尾段),令其在每次編譯後保持不變。這樣便於用數值做地址直接呼叫,同時也有利於減少「記憶體碎片」

其他的地址定義主要還是為了提高程式的可讀性。

8樓:西門不敗

一般特殊功能暫存器或者其他的特殊作用的需要定義一下,如果是微控制器普通記憶體就無需定義了

9樓:匿名使用者

#define led_bit 0x8fff 把這個

地址定義為了一個常量 , 你使用這個led_bit 的時候就不用再關心地址的問題了。而且以後要修改只需要修改空上常量定義就可以了,不用在**中到處找。

微控制器中的直接地址與間接地址怎樣理解?

10樓:匿名使用者

直接地址,就

是給出一個地址,然後到這個地址取值。

間接地址,就是先給出一個地址,然後到這個地址中取出一個數值,這個數值是真正的地址。再到這個地址中取值。

類似於,有一排箱子(記憶體),裡面中間有一個箱子放著需要的東西(數值)。

直接地址就是,直接知道了存東西的箱子號,於是可以馬上拿到東西。

間接地址就是,知道了一個箱子號,開啟后里面是一個紙條,寫著另外一個箱子號。再根據這個號碼去開啟箱子,才是真正要的東西。

從效率上看,明顯直接地址更高。

11樓:匿名使用者

直接地址就是實體地址。

間接地址類似於指標,存放的是地址的地址。

12樓:匿名使用者

直接地址裡面放置的是ram的地址號,而間接地址裡面放置的是定址號,相當於邏輯號

微控制器的引腳與reg52.h檔案內地址對應關係,請教!

13樓:匿名使用者

正是因為有了reg52.h標頭檔案對各並行口的地址定義,就等於定義了各引腳的符號,使用者寫程式時,只要用那些定義過的符號就行了,而不必去記憶那些難記的地址。

這就是這什麼在程式的前面有一行

#include

就是把這個標頭檔案加進來,再寫程式時就用熟悉的引腳符號了,就不用地址了。但實際是編譯軟體把這些引腳符號變換成地址後再進行編譯的,但這些,使用者寫程式時,都 不用去考慮的。

如何理解 一個變數的地址 中的「地址」?地址形式是什麼樣的

14樓:小林子

記憶體地址這個概念

打個比方:整個記憶體就相當於一個擁有很多房間的大樓,每個房間都有房間號,比如從 101、102、103 一直到 nnn,我們可以說這些房間號就是房間的地址。相對應的記憶體中的每個單元也都有自己的編號,比如從0x00、0x01、0x02 一直到 0xnn,我們同樣可以說這些編號就是記憶體單元的地址。

房間裡可以住人,對應的記憶體單元裡就可以「住進」變數了:假如一位名字叫 a 的人住在 101 房間,我們可以說 a 的住址就是 101,或者 101 就是 a 的住址;對應的,假如一個名為 x 的變數住在編號為 0x00 的這個記憶體單元中,那麼我們可以說變數 x 的記憶體地址就是 0x00,或者 0x00就是變數 x 的地址。

基本的記憶體單元是位元組,英文單詞為 byte,我們所使用的 stc89c52 微控制器共有 512 位元組的 ram,就是我們所謂的記憶體,但它分為內部 256 位元組和外部 256 位元組,我們僅以內部的 256 位元組為例,很明顯其地址的編號從 0 開始就是 0x00~0xff。我們用 c 語言定義的各種變數就存在 0x00~0xff 的地址範圍內,而不同型別的變數會佔用不同數量的記憶體單元,即位元組,可以結合前面講過的 c 語言變數型別深入理解

15樓:幻の上帝

c語言本身沒有「地址」的概念。地址是語言實現中涉及到的內容。如果學過計算機組成原理或者組合語言就會知道儲存器中構造出一個連續的整數集合作為地址空間(通常不是實體地址空間, 生命行者2010 錯誤),而地址是其中的一個整數。

一個地址標識一個儲存器單元(可以儲存一個位元組),通過不同的地址就可以訪問不同的儲存器單元。

c語言中,變數是儲存數值的一種物件。c語言的編譯器把變數繫結到地址空間中,只要知道變數的(首)地址就可以標識這個變數。變數的物件語義要求變數的值能在程式執行期在儲存器中的確定位置能夠被找到,因此一個變數在確定的生存期中具有且只有一個地址。

而變數的值在實現上則是指儲存這個變數的一個或多個具有連續地址的儲存器單元中儲存的值(至於那個儲存器單元儲存哪個部分,涉及到位元組序問題,和語言本身無關,初學者無需關心)。(seven_qj錯誤,c語言的變數可以儲存在cpu的暫存器(和實體記憶體、虛擬記憶體被對映在同一個地址空間)中(定義暫存器變數時通過register儲存類限定符修飾),而不一定是記憶體中。)

ps1.在32位平臺上,地址空間的大小是2^32位元組,可以用一個32位整數表示。

2.c語言中的指標(變數)就是提供了指標運算規則、型別檢查的一種特殊的整數變數。

3.c語言中單目運算子&作用於一個物件時,返回指向這個物件的指標。

4.舉例:

int a = 1;/*定義了一個變數a。*/

int *ptr=&a;/*定義了一個指向int變數的指標ptr,它的值被初始化為表示式&a的值,也就是a的地址*/

/*如果ptr的值是0x12345678,那麼就表示a的地址是0x12345678。通過p可以間接訪問a所在的儲存器單元,從而對a進行間接操作。*/

/*話說0xffffffff也太扯淡了點- -...*/

16樓:匿名使用者

變數的地址就是變數的編號,和每個大樓的房間號一樣,房間號是地址,裡面存放的是內容,也就是變數的值了,不知道這麼解釋你能理解不?建議你看下彙編,再學c的地址就簡單了

17樓:

地址就是變數在記憶體中存放的位置。例如32位機上記憶體形式可以為:0xffffffff。

例如:int a=1;

int *ptr=&a;

假設變數a的地址為0xffffffff,那麼p的值就是ffffffff。

18樓:生命行者

變數指的是資料

地址指的是此資料的物理位置

例:變數a的地址是「某柱面某扇區某磁軌」

微控制器地址中,什麼是絕對地址?什麼是符號地址?

19樓:匿名使用者

1 符號地址就是預先定義的,用替換符號代替地址的地址。是編譯器在生成機器碼時會自動計算替代成絕對地址的。

2 絕對地址就是記憶體中的地址。

微控制器中各引腳的功能是什麼?

20樓:單康仁

對於at89c51的微控制器40引腳

網上找的!希望對你有用

vcc/gnd:供電電源。

p0口:可以被定義為資料/地址的低八位,能夠用於外部程式/資料儲存器。在fiash程式設計時,p0 口作為原碼輸入口,當fiash進行校驗時,p0輸出原碼,此時p0外部必須被拉高。

p1口:標準輸入輸出i/o,p1口管腳寫入1後,被內部上拉為高,可用作輸入。在flash程式設計和校驗時,p1口作為第八位地址接收。

p2口:既可用於標準輸入輸出i/o,也可用於外部程式儲存器或資料儲存器訪問時的高八位地址。p2口在flash程式設計和校驗時接收高八位地址訊號和控制訊號。

p3口:既可以作標準輸入輸出i/o,也可作為at89c51的一些特殊功能口,

管腳 備選功能

p3.0 rxd(序列輸入口)

p3.1 txd(序列輸出口)

p3.2 /int0(外部中斷0)

p3.3 /int1(外部中斷1)

p3.4 t0(記時器0外部輸入)

p3.5 t1(記時器1外部輸入)

p3.6 /wr(外部資料儲存器寫選通)

p3.7 /rd(外部資料儲存器讀選通)

rst:復位輸入。當振盪器復位器件時,要保持rst腳兩個機器週期的高電平時間。

ale/prog:當訪問外部儲存器時,地址鎖存允許的輸出電平用於鎖存地址的地位位元組。

在flash程式設計期間,此引腳用於輸入程式設計脈衝。在平時,ale端以不變的頻率週期輸出

正脈衝訊號,此頻率為振盪器頻率的1/6。

/psen:外部程式儲存器的選通訊號。在由外部程式儲存器取指期間,每個機器週期兩次/psen有效。

但在訪問外部資料儲存器時,這兩次有效的/psen訊號將不出現。

/ea / vpp:當/ea保持低電平時,則在此期間外部程式儲存器(0000h-ffffh),不管是否有內部程式

儲存器。注意加密方式1時,/ea將內部鎖定為reset;當/ea端保持高電平時,此間內部程

序儲存器。在flash程式設計期間,此引腳也用於施加12v程式設計電源(vpp)。

xtal1:反向振盪放大器的輸入及內部時鐘工作電路的輸入。

xtal2:來自反向振盪器的輸出。

微控制器的多機通訊是,如何設定從機的地址

一般是由程式設計者自己來確定地址,或者通過硬體來 設定,硬體地址設定通專過電路板上的撥碼開關來屬 選擇,例如下面這個圖,有兩個撥碼開關,兩位就00 01 10 11四個地址,依次類推,攝像監控雲臺控制裡就是通過這種辦法來設定的從機地址 一般是485通訊 我用過i2c,spi的多機通訊,從機地址都是軟...

微控制器某指令存放的地址代表什麼,微控制器中下一條指令地址是什麼意思

是的 就是指這個單元的位置嘛 你學過微機原理撒 廠家出廠時都是規整好了的 與你的微控制器資料匯流排是相聯絡的 記憶體單元是8位 16位 這些都是廠家設定好多 這應該是儲存器中的偏移地址,具體的實體地址也就是真正存放資料的地址應該是由段基址和邏輯地址 偏移地址 計算得到。實體地址 段基址 10h 偏移...

CY在微控制器裡面是什麼意思,微控制器中CY是什麼意思,舉個例子說說

51微控制器cy代表運算結果的進位或借位標誌,cy在微控制器裡面是什麼意思 cy是進位標誌,比如二進位制數10101100,左移一次cy 1,第二次cy 0,因為左向右數第二個數為0無進位。採用這種方法可位讀取 它是psw狀態暫存器裡面的高位進位標誌位。你寫的這個應該是iic匯流排協議裡面的。sda...