嵌入式與韌體

以C語言只將暫存器reg的位元3設為0、其他位元不變,下列何種寫法正確?

  1. Areg &= ~(1 << 3);
  2. Breg |= ~(1 << 3);
  3. Creg &= (1 << 3);
查看答案與解析

正確答案:A. reg &= ~(1 << 3);

「~(1 << 3)」是只有位元3為0、其餘全為1的值。將它與AND(&)運算,位元3必定變成0,其他位元因為是與1做AND,會維持原值。設定位元的OR、清除位元的AND NOT、反轉位元的XOR(^)、檢查位元的AND,這四種是韌體操作暫存器時的基本形式。

  • A. 正確。與只有位元3為0的遮罩做AND運算。
  • B. 以OR運算的話,位元3以外會全部變成1。
  • C. 這樣位元3以外會全部變成0。
練習這個領域 前往領域頁面

嵌入式與韌體的其他題目

  1. 想讓連接LED的輸出腳位的位元,每執行一次就在亮與滅之間切換。下列何種C語言寫法正確?
  2. 檢查輸入用暫存器in的位元5是否為1,下列何種C語言條件正確?
  3. 上面的程式碼正在改寫暫存器reg中多位元的設定欄位。它做了什麼?
  4. 主程式正以「reg |= mask;」(讀取、修改、寫回)操作暫存器的位元時,中斷處理常式改寫了同一暫存器的另一個位元,可能發生的問題與對策的組合,下列何者正確?
  5. 在微控制器的輸入腳位只接了開關,沒有加上上拉或下拉電阻。開關斷開時可能發生下列何種情況?

這個領域的比較