使暫存器中某一位置1,保持其他位不變

2021-10-03 20:04:18 字數 973 閱讀 6424

1、使暫存器中某一位置1,保持其他位不變

把某一位清零的辦法就是先只有這一位是1,再取反,只有這一位是零,其他位都是1,再與上這個暫存器,那麼就是使其他位不變,只有這一位&0,變成0,然後再或1。

例如:

#define  tim_ccmr1_oc2pe                     ((uint16_t)0x0008)

#define tim_ocpreload ((uint16_t)0x0008)

tmpccmr1 = timx->ccmr1;

tmpccmr1 &= (uint16_t)~((uint16_t)tim_ccmr1_oc1pe); //其實可以直接或上0x0008

tmpccmr1 |= tim_ocpreload;

timx->ccmr1 = tmpccmr1;

tmpccmr1 &= (uint16_t)~((uint16_t)tim_ccmr1_oc1pe);中,先把第四位的1取反,其他位取反後都是1,1與上任何數都是它本身,第四位的零與上任何數都是0了,也就把這位寫零了。

2、使暫存器中某一位先取反再清零,保持其他位不變

這個利用的就是乙個位異或上1就是對其取反,異或上零就是保持不變。

#define  tim_ccmr1_oc2pe                     ((uint16_t)0x0008)

#define tim_ocpreload ((uint16_t)0xfff7)

tmpccmr1 = timx->ccmr1;

tmpccmr1 ^= (uint16_t)((uint16_t)tim_ccmr1_oc1pe); //先把第四位取反

tmpccmr1 &= tim_ocpreload; //第四位清零

timx->ccmr1 = tmpccmr1;

jquery滾動條固定在某一位置

檢視歷史訊息的時候,需要將滾動條維持在正在檢視的訊息位置。本方法是通過新增屬性data msg獲取當前的位置,offset top獲取滾動距離,demo如下 html div class box div class messagebox p 原資料1 p p 原資料2 p p 原資料3 p p da...

C語言位操作中指定的某一位數置0 置1 取反

一 指定的某一位數置1 巨集 define setbit x,y x 1 二 指定的某一位數置0 巨集 define clrbit x,y x 1 三 指定的某一位數取反 巨集 define reversebit x,y x 1 三 獲取的某一位的值 巨集 define getbit x,y x y...

mysql在表的某一位置增加一列的命令

如果想在乙個已經建好的表中新增一列,可以用諸如 alter table t1 add column addr varchar 20 not null 這條語句會向已有的表t1中加入一列addr,這一列在表的最後一列位置。如果我們希望新增在指定的一列,可以用 alter table t1 add co...