51微控制器中,硬體中CPU中運算器有累加器(ACC),但位址在卻微控制器的RAM21個特殊功能暫存器區中?

時間 2021-06-05 09:29:13

1樓:zc706

位址對映。

在數字晶元中,所謂的「位址」實際上是對內部資源的編碼。在傳統的51微控制器(如AT89C51)中內部定址範圍是0~FFH,共256個位址,但實際上RAM只有節,除了RAM之外CPU還可以訪問各種特殊功能暫存器,這些暫存器分布在片上的其他位置,如ACC在運算單元模組,TCON、TMOD等在定時器/計數器模組,IE、IP在中斷系統中,這些暫存器既不是RAM,也與RAM沒有任何關係。為了方便訪問,微控制器的設計者們也給這些暫存器關聯了位址,這樣程式設計人員就可以像訪問RAM一樣訪問外設。

比如說,TCON關聯的位址是88H,那麼指令MOV 88H #00H就是直接訪問在定時器/計數器模組中的TCON暫存器。而累加器ACC關聯的位址是E0H,那麼指令MOV E0H #FFH就是直接訪問累加器,這和指令MOV A #FFH的效果是一樣的(但兩個指令的二進位制編碼不一樣)。而像有些位址如A3H這些沒有關聯暫存器,也不再RAM的範圍內,就不能訪問,因為微控制器上不存在這樣的物理位置。

後來人們想在51的基礎上把內部RAM擴充套件到節(如AT89C52),使得RAM位址範圍是0~FFH,這就與之前的位址衝突了,比如你寫MOV 88H #00H,微控制器怎麼知道你是要訪問RAM中的88H單元還是TCON暫存器呢?於是人們就規定80H~FFH的RAM只能間接定址,特殊功能暫存器只可直接定址。於是乎,MOV 88H #00H就是訪問TCON,而MOV R1 #80H MOV @R1 #00H就是訪問RAM單元。

51微控制器中如果乙個數 暫存器B中的值怎麼表述?

Jienpeng lin pragma SRC typedef signedchar int8 t typedef signed short int int16 t typedef signedint int32 t typedef unsignedchar uint8 t typedef unsi...

51微控制器中P0口是高阻態,沒有上拉電阻,請問一下,什麼是高阻態?

高電平就是兩個頭輸出乙個Vcc的電壓,相當於乙個電源。低電平就是兩個頭之間沒電壓,相當於一根導線,因此要接上拉電阻。高阻態就是兩個頭之間有乙個電阻無窮大的電阻,沒有輸出電壓,往裡輸電流電阻無窮大也沒有電流。兩個頭是指引腳和地。當然我說的是理想狀態下,現實可以等同考慮 瘋狂的蔬菜 上圖中可以很明顯地看...

微控制器 外部中斷程式 為什麼不用寫在主程式中?為什麼中斷函式不在主函式也可以執行?

haoyu 中斷發生時,CPU會暫停當前的執行,判斷中斷源,找到響應的位址,中斷函式通常是一條跳轉指令,跳到實際中斷的位置,執行完中斷函式之後,CPU返回到當前中斷前的位置,繼續執行中斷前的指令。下面摘自STC89C52對與中斷的描述 中斷向量 003H的位址,通常是一條LJMP指令,跳轉到實際的中...