回覆列表
  • 1 # GPS跟蹤器LED大燈

    問這樣的問題,肯定硬體基礎不太好。微控制器硬體,情況太多了。有些暫存器是隻能寫不能讀的,有些是隻能讀不能寫的。還有些保留位不能被改變的。。。更有讀和寫的含義是不同的。比如有些硬體功能是靠寫暫存器啟動的。。。按技術文件來操作暫存器就可以了。非要搞清楚,大公司產品技術文件中會有交代的。

  • 2 # 玩轉嵌入式

    51微控制器是8位的,暫存器有8位,每一位都代表不同的含義;STM32微控制器是32位的,暫存器也是32位的,每一位也有不同的含義。在配置暫存器時,同一個暫存器會用到多次,如果直接賦值而不用“與”、“或”會發生什麼情況呢?下面分析一下。

    為什麼要用邏輯“與”、邏輯“或”賦值

    在操作暫存器時,可能需要對同一個暫存器要配置多次,如果每次都要直接賦值的話,最後的賦值會把前面的賦值覆蓋掉,這樣程式就無法實現應有的功能了。所以,為了不改變前面的設定,通常會用邏輯“與”、邏輯“或”來賦值。如下圖所示:

    如何用邏輯“或”給暫存器賦值

    邏輯或的特性是,有1輸入即輸出1;全0輸入時才輸出0。所以,可以看出,如果要不改變某一位的值的話,可以用0與其做或運算。如下圖所示。

    所以,在設定暫存器時,如果要將某一位置1,而將其他位保持不變的話,可以將該位和1作或運算,比如下面的語句:

    GPIOA->CRH|=0X00000003;//低兩位置1

    上面的語句就是將低兩位設定為了11,而其他位保持不變。

    如何用邏輯“與”給暫存器賦值

    邏輯與的特性是,有0輸入即輸出0;全1輸入時才輸出1。可以看出,如果要不改變某一位的值的話,可以用1與其做與運算。如下圖所示:

    所以,在設定暫存器時,如果要將某一位清零,而將其他位保持不變的話,可以將該位和0作與運算,比如下面的語句:

    GPIOA->CRH&=0XFFFFFFF0;//低四位清零

    上面的語句就是將低四位設定為了00,而其他位保持不變。

    由上可知,合理的運用邏輯與、邏輯或運算可以其到只改變某幾位,而不影響其他位的目的,並且可以大大提高到編寫程式碼的效率。

  • 中秋節和大豐收的關聯?
  • 你最想對國產汽車說些什麼?為什麼?