微控制器程式設計運用“與”運算,判斷某8位二進位制數是奇數還是偶數個

2021-08-11 06:06:21 字數 3168 閱讀 3117

1樓:生活如歌

51微控制器可以不用與運算,只接判斷,用p(奇偶校驗位),如果非得用與運算只能這樣:

mov a,#0ffh

anl a,#data;某數)

jnb p,rel

2樓:_小顧

mcs-51微控制器,奇偶校驗位p在程式狀態字psw(特殊功能暫存器)裡,psw.0就是p。

p奇偶校驗位。它用來表示alu運算結果中二進位制數位“1”個數的奇偶性。若為奇數,則p=1;否則為0。運算結果有奇數個1,p=1;運算結果有偶數個1,p=0.

3樓:匿名使用者

//假設r3中存放待判數值,r4存放臨時結果。如果暫存器不足,就用記憶體代替。

mov r0,1

mov r1,0 //1個數計數器

mov r2,0 //迴圈次數,共迴圈8次

label_loop:

cmp r2,8 //迴圈次數比較

be loop_end //如果已經迴圈8次則跳轉到loop_end

and r4,r3,r0 //r3,r0按位與運算,結果存入r4

cmp r4,0 //依次取出相應的位與0比較

be loop_next //若相等則跳轉到loop_next,否則計數器加1再跳轉

inc r1

b loop_next

loop_next:

inc r2

shl r0 //r0左移一位,以便取出下一位

b label_loop

loop_end:

and r1,r1,1 //r1中存放了"1"的個數

cmp r1,1

...//到這裡結束了,r1如果等於1那麼有奇數個“1”,否則偶數個“1”

由於共有8位數,最多0b1000個"1",只有r1最低位為1時才是奇數個“1”

4樓:斬丨我了個去

char par

int i,odd;

for(i=0;i<8;i++)

微控制器中,用c語言怎麼實現一個8位二進位制數的高四位與低四位的交換,例如0xfe,怎麼變成0xef

5樓:還是呼喚

好像沒有直接的語句實現:應該可以通過左移和右移來實現把把!

如:a=0xfe;

a=(a>>4) | (a<<4);

6樓:匿名使用者

& 按位與

| 按位或

^ 按位異或

~ 取反

<< 左移

>> 右移

7樓:崔運生

b=a<<4;

a>=4;

a|=b;

要求彙編:用“與”運算判斷某8位二進位制數是奇數還是偶數個1。 (微控制器作業……)

8樓:楊必宇

二進位制數只是正數的話,那百麼只看末尾的數字就行了,如果是0,那麼就是偶數,如果是1,那麼就是奇數。

因為,除過末尾數字,其他數字都是當前位乘以2^n後的結果,那麼不管是偶數還是奇數,只要乘了2,都會是偶數,偶數加度偶數還是偶數。因此,只要判問斷末尾數字的奇偶就行了,當然,如果二進位制數是負數的話,那麼就得轉化成原碼再看。

擴充套件資料

常用的有二進位制、八問進位制、十進位制、十六進位制。任何資料在計算機記憶體中都是以二進位制的形式存放的。二進位制數是以2為計算單元,滿內2進1位的數;八進位制數是以8為計算單元,滿8進1位的數。

對於任何一個數字,都可以用不同的容進位制來表示,比如,十進位制數12,用二進位制表示為1100,用八進位制表示為14,用十六進位制表示為0xc。

9樓:勤奮的哈七八答

假設r3中存放待判數值,r4存放臨時結果。如果暫存器不足,就用記憶體代替。 mov r0,1,mov r1,0 //1個數計數器,mov r2,0 //迴圈次數,共迴圈8次。

label_loop,cmp r2,8 //迴圈次數比較,be loop_end //如果已經迴圈8次則跳轉到loop_end。

and r4,r3,r0 //r3,r0按位與運算,結果存入r4,cmp r4,0 //依次取出相應的位與0比較,be loop_next //若相等則跳轉到loop_next,否則計數器加1再跳轉inc r1,b loop_next//到這裡結束了,r1如果等於1那麼有奇數個“1”,否則偶數個“1”。

由於共有8位數,最多0b1000個"1",只有r1最低位為1時才是奇數個“1”,微控制器中似乎沒有三個運算元的指令。

10樓:千葉郎君

arm的彙編還可以,微控制器的沒學過。

以下是偽**,翻譯成微控制器彙編即可。

//假設r3中存放待判數值,r4存放臨時結果。如果暫存器不足,就用記憶體代替。

mov r0,1

mov r1,0 //1個數計數器

mov r2,0 //迴圈次數,共迴圈8次

label_loop:

cmp r2,8 //迴圈次數比較

be loop_end //如果已經迴圈8次則跳轉到loop_end

and r4,r3,r0 //r3,r0按位與運算,結果存入r4

cmp r4,0 //依次取出相應的位與0比較

be loop_next //若相等則跳轉到loop_next,否則計數器加1再跳轉

inc r1

b loop_next

loop_next:

inc r2

shl r0 //r0左移一位,以便取出下一位

b label_loop

loop_end:

and r1,r1,1 //r1中存放了"1"的個數

cmp r1,1

...//到這裡結束了,r1如果等於1那麼有奇數個“1”,否則偶數個“1”

由於共有8位數,最多0b1000個"1",只有r1最低位為1時才是奇數個“1”

大概微控制器中似乎沒有三個運算元的指令, 像and r4,r3,r0,自己再單獨實現以下吧

微控制器程式設計習題,求教幾道微控制器程式設計題

我可以給你參考一下。硬體連線 p0口通過10k的排阻,連線到vcc 5v,這樣使po口上拉。vcc 5v端連線8個發光二極體串聯一個1k的電阻到p0口各個8個i o口上,即當i o口為低電平,燈變亮。這樣設計可以使電源的功耗比較低。軟體程式設計 在keil中編寫,除錯通過 include 燈的變化內...

微控制器與c語言,微控制器與c語言

這樣.假設三個按鍵分別連在微控制器p1.0 p1.1 p1.2三個io口上,按下去為低電平,不按為高電平。include 你是什麼微控制器?自己把標頭檔案包含好哦。define keymask 0x07 對應二進位制0000 0111,作用是取出p1連結有按鍵的最低三位 int key 記錄按鍵 i...

51微控制器程式設計題微控制器P1 0 1 7口接發光二極體(愛心圖樣)試編寫流水燈的彙編程式使發光二極體逐個亮

啟動入口 org 0000h 復位啟動 ljmp start org 000bh t0中斷 ljmp t0int org 0100h ljmp start 主控程式 start mov sp,80h 初始堆疊值mov tmod,01h 定時器0工作於方式1,50毫秒 12.000mhz mov th...