1. 程式人生 > >暫存器位設定

暫存器位設定

作為嵌入式工程師,一定要掌握暫存器的控制,想要了解基本的暫存器控制,最簡單的方法就是使用微控制器練手,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操作。