導航:首頁 > 操作系統 > 單片機c語言位操作

單片機c語言位操作

發布時間:2023-07-08 17:23:22

單片機 移位操作 右移 C語言

先說第一個問題:
比如用查表法將結果保存到變數i中,查表變數為x,則i=table[x],記住c語言裡面數組是從0開始的,比如說上面的0x01就是table[0],0x02是table[1],以此類推。
再說第二個問題:
比如說從p1.0口發送出去,則可以寫為
sbitout=p1^0;//定義out為p1.0口,這樣今後好寫程序
chari;
for(i=0;i<8;i++)
{
out=data&0x80;//因為高位在前,將它寫成二進制就明白了
data<<=1;
}
上面的程序就能搞定了;
應該是所有的單片機都有cy位(不知道浮點dsp有沒有);
c語言中左移和右移之後低位或高位自動補零,cy位也保持為零(視編譯器而定,這個得看編譯器手冊),有些編譯器提供了循環移位的函數;
還有什麼不明白的補充問題就是

㈡ 單片機C語言中位的運用,

你這樣會有問題的,如果你想只操作1bit,可以這樣:
P1=
P1^(1<<h);h++;當然要反復循環還要加些循環控制

㈢ 在單片機的C語言程序設計中,如何使用SFR和可定址位

你好!
在c語言中無法對SFR(特殊寄存器),比如程序狀態寄存器(PSW)等寄存器進行操作,也就不能判斷它們的標志位了。比如判斷Z標志位,C標志位等操作。對於要操作這類寄存器。我們唯一的辦法只能用匯編語言。或者在C語言中嵌入匯編語言來解決。所以我們寫單片機程序千萬不能放棄匯編語言。某些底層的硬體操作只能靠匯編語言來完成。
希望對你有所幫助,望採納。

㈣ 請問:單片機c語言中如何實現將變數A中某1位賦值給B中某1位的操作

假鋒茄並如將A第三位賦給B第二納銷位

對於C51架構單片機,可使用位定址:
bdata A, B;
sbit a3 = A^3; //位變數指向A第三位
sbit b2 = B^2;
b2 = a3;

對於其他任何類型單片銀跡機,可使用位操作宏(同樣適用於C51):
#define get_bit(var, n) (var & (1<<n))
#define set_bit(var, n) (var |= (1<<n))
#define clr_bit(var, n) (var &= ~(1<<n))

使用方法
if(get_bit(A, 3))set_bit(B, 2);
else clr_bit(B, 2);

這是速度最快的方法。移位操作在編譯的時候已經被優化了。

㈤ 單片機機 中怎樣和哪幾種位元組位操作的方式,最好給點C語言代碼並解釋

1、ANSIC中,一般採用「讀-修改-寫」的方法實現單個位的位操作,通過與0「與」操作,將某一位清0。如使i變數的b0位為0,實現方法為i=i&0xfe。通過與1「或」操作,將某一位置1。如使i變數的b0位為1,實現方法為i=i|0x01。通過與1「異或」操作,將某一位取反。如使i變數的b0位取反,實現方法為i=i^0x01。

2 、通過位域的方法實現位操作
標准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語言)

data
=
nBitmapDot[i]
>>
1;
//
nBitmap[i]右移一個二進制位,與
data
=
nBitmapDot[i]
/
2;
同效。
data
=
nBitmapDot[i]
<<
1;
//
nBitmap[i]左移一個二進制位,與
data
=
nBitmapDot[i]
*
2;
同效。
要說明的是移位操作(<<

>>)效率更高。

㈦ 單片機 移位操作 右移 C語言

aa=_crol_(aa,1); //左移一位
aa=_cror_(aa,1); //右移一位

可以打開:intrins.h,查看。

閱讀全文

與單片機c語言位操作相關的資料

熱點內容
python中numpy模塊安裝 瀏覽:356
安卓虛擬機linux 瀏覽:567
安卓怎麼分享五g網路 瀏覽:671
什麼型號的板子能上伺服器內存 瀏覽:397
androidapk圖標設置 瀏覽:42
最早提出分數運演算法的著作 瀏覽:922
安卓郵箱怎麼保存照片 瀏覽:269
hdfspythonapi 瀏覽:851
qt如何搭建web伺服器 瀏覽:58
程序員紅包演算法 瀏覽:792
亞馬遜安全的更換雲伺服器 瀏覽:728
伺服器線程數怎麼設置 瀏覽:605
考研詞彙紅寶書2019pdf 瀏覽:981
如何利用安卓手機wifi修改密碼 瀏覽:373
辭海分冊pdf 瀏覽:935
安卓系統頁面怎麼調 瀏覽:775
壓縮文件的用法 瀏覽:34
如何用瀏覽器訪問伺服器地址 瀏覽:207
soft編譯器 瀏覽:113
三軸車床的編程指令 瀏覽:71