⑴ 51單片機R0-R7怎樣壓棧
首先你得知道R0~R7並不對應絕對地址,而PUSH只能對絕對地址壓棧的。
對於自己編寫的匯編程序,你得清楚當前PSW.RS位域選中的是哪一組RegBank,並將相應地址的寄存器壓棧。例如如果選中了第2組寄存器(10b),那麼應當壓棧的是10h~17h單元。
如果是編譯器寫的偽代碼,可以直接書寫成 PUSH Rn 形式,編譯器自動根據當前的RS位域來換算成對應的絕對地址。
網路嫌我字數不夠
⑵ 單片機位地址和段地址怎麼看
單片機位地址是採用位定址方式的指令來看,段地址用控制面板查詢。
單片機位地址的用的操作數是8位二進制數中的某一位。指令中給出的是位地址,是片內RAM某個單元中的某一位的地址。段地址查詢方式是:要打開電腦,找到電腦下方的網路,點弊爛擊網路,接著找到「打開和網舉睜絡共享中心」,再點擊「打開和網路共享中心,租答漏找到本地連接,打開找到詳細地址就可以看到。
⑶ 單片機的位域是什麼意思如何使用
標准C提供了一種基於結構體的數據結構--位域(BitField),位域就是把一個
存儲單元
中的
二進制
劃分為幾個不同的區域。並說明每個區域的
位數。每一個域有一個
域名
,允許在
程序
中按域名進行操作,位域的定義格式如下:
struct
位域結構名{
位域列表
};
位域列表格式為:類型說明符
位域名:位域長度如:
struct
k{
unsigned
int
a:1
unsigned
int
:2
unsigned
int
b:3
unsigned
int
:0
//空域
}k1;
說明:
1)各位依次從低位到高位排列,排滿一個存儲單元,按地址接著排下一單元;
2)位域可以無域名,但不能被引用,如
第二域
,這時其只用來填充或調整位置;
3)第四行稱空域,目的是將目前存儲單元的剩餘部分分為一個域,且填充0。
位域的引用很簡單,如:
k1.a=1;
//置k1的b0位為1
k1.b=7;
//將k1的b3-5位置111
通過位域定義位
變數
,是實現單
個位
位操作的重要途徑和方法,採用位域定義位變數,產生的
代碼
緊湊、高效。這種位域應用於
單片機
開發比較普遍。
⑷ 在單片機C語言中如何對變數的某一位進行操作或賦值。
在C語言中,一般有兩種方法來操作位,一種是使用C語言提供的位運算操作符,一種是使用位域。
1、使用位域
在C語言中定義位域的一般格式如下:
struct位域結構名
{位域列表};
struct:在C語言中定義位域所使用的關鍵字是struct。
位域結構名:是一個C語言中的標識符,有字母、數字、下劃線組成,而且第一個字元必須是字母或者下劃線。
位域列表:組其中位域列表的形式為: 類型說明符 位域名:位域長度
下面的示例代碼,通過位域來計算IEEE754浮點數編碼中單精度數的最大值 、最小值和最小弱規范數。
#include<stdio.h>
typedefstructFP_SINGLE
{
unsigned__int32fraction:23;
unsigned__int32exp:8;
unsigned__int32sign:1;
}fp_single;
intmain()
{
floatx;
fp_single*fp_s=(fp_single*)&x;
fp_s->sign=0;
fp_s->exp=0xfe;
fp_s->fraction=0x7fffff;
printf("float最大數:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0x1;
fp_s->fraction=0x0;
printf("float最小數:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0;
fp_s->fraction=0x1;
printf("float最小弱規范數:%le ",(double)x);
return0;
}
2、使用位運算符
C語言中的位運算符有一個基本的常識,即只能操作整數,不能操作浮點數,因為浮點數是使用IEEE754編碼的,使用位操作數沒有任何意義。
C語言提供的位運算符列表:
&按位與如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0
|按位或兩個相應的二進制位中只要有一個為1,該位的結果值為1
^按位異或若參加運算的兩個二進制位值相同則為0,否則為1
~取反~是一元運算符,用來對一個二進制數按位取反,即將0變1,將1變0
<<左移用來將一個數的各二進制位全部左移N位,右補0
>>右移將一個數的各二進制位右移N位,移到右端的低位被舍棄,對於無符號數,高位補0
⑸ 51單片機寄存器這個表格是什麼意思
第一列,Bit,也就是位/位域。例如Bit[3:2]就是代表這個8位寄存器中的第3位和第2位。
第二列,Name,也就是位/位域的名稱。
第三列,Reset,也就是復位後的默認值。
第四列,R/W,也就是該位/位域的讀寫屬性。RO = Read Only只讀,WO = Write Only只寫,R/W = Read/Write可讀可寫。此外也有一些特殊的玩意兒例如W1C(寫1清零)之類。
第五列,Description,功能描述。