暫存器位設定
阿新 • • 發佈:2018-12-10
作為嵌入式工程師,一定要掌握暫存器的控制,想要了解基本的暫存器控制,最簡單的方法就是使用微控制器練手,51,stm0,stm8,MSP430等,與ARM7/9/11或A系列不同的是,不帶系統的MCU說白了就是對各種暫存器進行配置,而無需理會記憶體對映、系統處理方式等複雜控制。
假設存在兩個8位暫存器GPIOCON1和GPIOCON2,分別需要對暫存器1的第7位置0,對暫存器2的第7位置1。
操作如下:
define BIT7 = 0X80;
GPIOCON1 &= ~BIT7;//第7位置0
GPIOCON2 |= BIT7;//第7位置1
一般出廠DEMO都會對引腳及位進行巨集定義,方便操作,這裡同樣進行定義,16進位制0X80轉換為二進位制位0b10000000,將置1語句展開:
GPIOCON1 = GPIOCON1 & (~(BIT7));
GPIOCON1 = GPIOCON1 & (~(10000000));
GPIOCON1 = GPIOCON1 & (01111111);
根據基本運演算法則0&任意數為0,1&上任意數為任意數本身,這樣也就對暫存器的第7位完成了置0。
當然也可以使用以下方法進行暴力置0:
GPIOCON1 = 0X00;
這種方法雖然也實現了暫存器1的第7位置0,但是同時也將0~6置0,破壞了原有屬性,所以在控制位時,應當遵循先讀取暫存器原有值,進行單個位控制,其餘位保持原有狀態不變。
置1與置0的道理一樣,將置1語句展開:
GPIOCON2 |= BIT7;
GPIOCON2 = GPIOCON2 | BIT7;
GPIOCON2 = GPIOCON2 | (10000000);
根據基本運演算法則1或操作任意數為1,0或操作上任意數為任意數本身,也就完成了置1操作。