導航:首頁 > 操作系統 > 單片機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語言位操作相關的資料

熱點內容
華為榮耀10伺服器地址 瀏覽:996
javastring相等判斷 瀏覽:409
程序員考研究生學校 瀏覽:933
java卡頓 瀏覽:500
編程軟體怎麼運行zip文件 瀏覽:505
單片機怎麼做組態 瀏覽:899
android參考文獻外文 瀏覽:684
銅電極電流效率的演算法 瀏覽:142
簡訊內存已滿怎麼處理安卓 瀏覽:312
ogg命令 瀏覽:784
南昌程序員最新消息 瀏覽:151
藍牙編程入門書籍 瀏覽:763
單片機秒錶實驗 瀏覽:411
小米3文件夾設置 瀏覽:565
手動添加dns伺服器加什麼數字 瀏覽:562
單片機中三位數碼管原件 瀏覽:140
pdf可以刪除其中一頁 瀏覽:216
清dns緩存的命令 瀏覽:103
免費pdf在線轉換 瀏覽:770
堆貨演算法 瀏覽:881