微控制器程式設計C51中的乙個小問題

2025-01-08 19:05:20 字數 2150 閱讀 4736

1樓:西瓜女

acc<<1因該是迴圈左移,包括:迴圈中不含標誌位c的左移或右移和迴圈中包含c的左移或右移操作。

不包含:那就是0001,0011即0x13包含:那首先要知道進位標誌c是幾:

如果是1:0001,0011即0x13

如果是0:0001,0010即0x12

取最高位問題:

乙個8bit的二進位數與上1000,0000(你想任何數&0就是0,&1是原來那個數本身)所以就是取原來那個數的最高位了。

2樓:

解:發現一樓解答有誤,特此更正。

一、比如說有乙個數acc=0x89,轉化成二進位數就是1000 1001,請問acc<<1的運算結果是多少?在c語言裡沒有含標誌位移位的語句,acc<<1的結果只能是0x12,不可能是0x13(右邊自動補零)。

用以下辦法可以實現帶標誌位移位:

cy=acc&1;

cy=acc&0x80;

這兩個語句編譯後會產生帶進位右移和左移指令。

若要實現迴圈移位,可用以下辦法:

1.先增加標頭檔案,執行以下函式:

迴圈左移:_crol_(unsigned char val,unsigned char n)

迴圈右移:_cror_(unsigned char val,unsigned char n),返回無符號字元型值。

1|((a&0x80)?1:0);迴圈左移多位做個迴圈。

a=a>>1|((a&0x01)?1:0);迴圈右移多位做個迴圈。

二。din=(bit)(address&0x80); 為什麼說這是取最高位?

一樓所述正確。

address&0x80的意思是將address與0x80相「與」,顯然最高位由address的最高位決定,而其它位均為0.

bit)的意思是進行強制型別轉換,變成位變數。

3樓:網友

c語言裡沒有迴圈移位,>>是左移一位,左移後後邊補零。

左移之後為:0001 0010,即0x12。

din=(bit)(address&0x80):你把0x80寫成二進位不就是1000 0000嗎,你再把乙個數和1000 0000按位取與運算,只有最高位是與1取與運算,保持不變,其它位與0相與不就全變為0了?所以最後得到的數除了最高位不變,其它位全為0,在強制型別轉換為最高位那一位了。

4樓:王子

acc<<1就是左移一位,最低位補<<1結果是0001 0010

address&0x80意思是兩個數按位取與:就是address&1000 0000。每一位分別取與後只有address的最高位會被留下來。

5樓:網友

移位都是二進位的方式移位,然後以十六進位顯示,acc左移後的結果是0x12;

下面的問題取最高位是因為,0x80寫成二進位是10000000,和前面的數相位與,然後,把後面的都與成0了,只有最高位,如果是1就最後是1,如果是0,最後就是0;

明白了嗎。

c51微控制器傳送字串程式怎麼寫

6樓:惠企百科

1、開啟c51程式書寫軟體,新建工程,在彈出的對話方塊工程名並儲存到要儲存的地方。

2、儲存之後會彈出如下的視窗,點選atmel的加號,選擇at89s52並確定。

<>4、此時點選左邊的資料夾,雙擊,會出現下一級的資料夾,繼續雙擊,彈出對話方塊中找到剛儲存的c程式。雙擊它或者點選對話方塊下面的add,關閉彈出的對話方塊,此時建立工程就完畢了。

<>6、 這樣就進行後面的書寫程式,編譯吧。然後進入下一步,燒寫程式,點選開啟「開啟程式檔案」。到儲存程式的地方,選中字尾為hax的檔案並雙擊。

c51微控制器傳送字串程式怎麼寫

7樓:

#include//包含標頭檔案,#include""

函式宣告。void sendstr(unsigned char *s);

串列埠初始化。

void inituart (void)

void main (void)

傳送乙個位元組。

void sendbyte(unsigned char dat)

傳送乙個字串。

void sendstr(unsigned char *s)}

微控制器的小問題,微控制器的一個小問題

1 第二個void是說明沒有形參,可以不寫就像void ds reset 1 這樣,但各個c編譯器編譯效率和方式不一樣,有的編譯器會自作主張把 括號裡面加上寫看似沒有用的引數,但可能會對程式的正常執行造成影響。這點是在凱尼格的 c陷阱與缺陷 裡明確提出的一個c語言的漏洞,解決這個漏洞的方法就是不用形...

c51微控制器中斷程式中的interrupt1,2,3是由什麼決定的

interrupt x是指用的第幾個中斷。1 2 3是由中斷向量表決定的。也就是由微控制器的中斷入口地址的順序決定的。這個是硬體決定的軟體不能改變。例如外部中斷0就是interrupt 0 定時器0 是interrupt 1 外部中斷1是interrupt 2 定時器2是interrupt 3 串列...

微控制器按鍵數碼管顯示問題,微控制器C51實現按鍵一次數碼管加1程式問題。高手進。

default那句的break刪掉試試。51微控制器中如何按下按鍵時數碼管正常顯示而不閃爍,並且實現長按連續 不要檢測按鍵是否抬起即可,但為了防止連續加得太快,所以程式裡還是要加延時,這樣造成 數碼管顯示閃爍,且這個延時和閃爍是一個矛盾if key 0 display num 當然也好可以將延時函式...