0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言操作寄存器的常見(jiàn)手法

GReq_mcu168 ? 來(lái)源:硬件攻城獅 ? 作者:硬件攻城獅 ? 2022-03-12 09:06 ? 次閱讀

使用C語(yǔ)言對(duì)寄存器賦值時(shí),常常需要用到C語(yǔ)言的位操作方法。把寄存器某位清零假設(shè)a代表寄存器,且其中本來(lái)已有值。如果要把其中某一位清零且其它位不變,代碼如下。

//定義一個(gè)變量 a = 1001 1111 b (二進(jìn)制數(shù))unsigned char a = 0x9f;//對(duì) bit2 清零a &= ~(1<<2);//括號(hào)中的 1 左移兩位,(1<<2) 得二進(jìn)制數(shù):0000 0100 b//按位取反,~(1<<2) 得 1111 1011 b//假如 a 中原來(lái)的值為二進(jìn)制數(shù):a = 1001 1111 b//所得的數(shù)與 a 作”位與&”運(yùn)算,a = (1001 1111 b)&(1111 1011 b),//經(jīng)過(guò)運(yùn)算后,a 的值 a=1001 1011 b// a 的 bit2 位被被零,而其它位不變。把寄存器某幾個(gè)連續(xù)位清零????由于寄存器中有時(shí)會(huì)有連續(xù)幾個(gè)寄存器位用于控制某個(gè)功能,現(xiàn)假設(shè)我們需要把寄存器的某幾個(gè)連續(xù)位清零,且其它位不變,代碼如下。

//若把 a 中的二進(jìn)制位分成 2 個(gè)一組//即 bit0、bit1 為第 0 組,bit2、bit3 為第 1 組,// bit4、bit5 為第 2 組,bit6、bit7 為第 3 組//要對(duì)第 1 組的 bit2、bit3 清零a &= ~(3<<2*1);//括號(hào)中的 3 左移兩位,(3<<2*1) 得二進(jìn)制數(shù):0000 1100 b//按位取反,~(3<<2*1) 得 1111 0011 b//假如 a 中原來(lái)的值為二進(jìn)制數(shù):a = 1001 1111 b//所得的數(shù)與 a 作”位與&”運(yùn)算,a = (1001 1111 b)&(1111 0011 b),//經(jīng)過(guò)運(yùn)算后,a 的值 a=1001 0011 b// a 的第 1 組的 bit2、bit3 被清零,而其它位不變。//上述 (~(3<<2*1)) 中的 (1) 即為組編號(hào); 如清零第 3 組 bit6、bit7 此處應(yīng)為 3//括號(hào)中的 (2) 為每組的位數(shù),每組有 2 個(gè)二進(jìn)制位; 若分成 4 個(gè)一組,此處即為 4//括號(hào)中的 (3) 是組內(nèi)所有位都為 1 時(shí)的值; 若分成 4 個(gè)一組,此處即為二進(jìn)制數(shù)“1111 b”//例如對(duì)第 2 組 bit4、bit5 清零a &= ~(3<<2*2);對(duì)寄存器某幾位賦值????寄存器位經(jīng)過(guò)清零操作后就可以方便地對(duì)某幾位寫(xiě)入所需要的數(shù)值了,具體代碼如下。

//a = 1000 0011 b//此時(shí)對(duì)清零后的第2組bit4、bit5設(shè)置成二進(jìn)制數(shù)“01b”a|=(1<<2*2);//a = 1001 0011 b,成功設(shè)置了第 2 組的值,其它組不變寄存器某位取反????要對(duì)寄存器的某個(gè)位進(jìn)行取反操作,即 1 變 0 ,0 變 1,這可以直接用如下操作。

//a = 1001 0011 b//把 bit6 取反,其它位不變 a ^=(1<<6);//a = 1101 0011 b

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5250

    瀏覽量

    119193
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134020

原文標(biāo)題:C語(yǔ)言操作寄存器的常見(jiàn)手法

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言操作寄存器中的應(yīng)用

    C語(yǔ)言操作寄存器中的應(yīng)用本文參考另一篇博客寫(xiě)成附鏈接,個(gè)人感覺(jué)內(nèi)容過(guò)多不便于吸收,就寫(xiě)了這篇博客。整體思想:設(shè)置一個(gè)位就是設(shè)置該位為1,清除就是設(shè)置該位為0
    發(fā)表于 01-24 06:04

    C語(yǔ)言寄存器操作相關(guān)資料分享

    C語(yǔ)言寄存器操作
    發(fā)表于 02-25 07:58

    寄存器傳輸語(yǔ)言詳解

    數(shù)字系統(tǒng)中最常用到的微操作可分為四類: 1、寄存器傳送微操作 它可把二元信息從一個(gè)寄存器傳送到另一個(gè)寄存器,在
    發(fā)表于 08-16 09:32 ?6002次閱讀
    <b class='flag-5'>寄存器</b>傳輸<b class='flag-5'>語(yǔ)言</b>詳解

    寄存器操作方法_對(duì)寄存器操作的通用方法總結(jié)

    本文主要詳解寄存器操作方法以及對(duì)寄存器操作的通用方法總結(jié),具體的跟隨小編來(lái)了解一下。
    的頭像 發(fā)表于 05-22 15:53 ?2.2w次閱讀

    寄存器變量

    C語(yǔ)言中使用關(guān)鍵字register來(lái)聲明局部變量為寄存器變量。寄存器變量的值會(huì)被存放在CPU的寄存器中,每當(dāng)需要使用它們時(shí),CPU就可以直接
    發(fā)表于 06-03 10:13 ?2257次閱讀

    Atmel SAMC21的I2C驅(qū)動(dòng)寄存器操作寄存器代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Atmel SAMC21的I2C驅(qū)動(dòng)寄存器操作寄存器代碼免費(fèi)下載。
    發(fā)表于 06-20 08:00 ?19次下載

    C語(yǔ)言訪問(wèn)MCU寄存器

    C語(yǔ)言訪問(wèn)MCU寄存器問(wèn)題由來(lái)://下面這行代碼的意思是直接操作0X020C4068這個(gè)寄存器/
    發(fā)表于 10-25 13:21 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>訪問(wèn)MCU<b class='flag-5'>寄存器</b>

    C語(yǔ)言訪問(wèn)MCU寄存器的三種方式

    C語(yǔ)言訪問(wèn)MCU寄存器的三種方式 MCU中的特殊功能寄存器SFR,實(shí)際上就是SRAM地址已經(jīng)確定的SRAM單元,在C
    發(fā)表于 10-28 17:21 ?11次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>訪問(wèn)MCU<b class='flag-5'>寄存器</b>的三種方式

    C語(yǔ)言操作在(單片機(jī))寄存器中的應(yīng)用

    C語(yǔ)言操作寄存器中的應(yīng)用本文參考另一篇博客寫(xiě)成附鏈接,個(gè)人感覺(jué)內(nèi)容過(guò)多不便于吸收,就寫(xiě)了這篇博客。整體思想:設(shè)置一個(gè)位就是設(shè)置該位為1,清除就是設(shè)置該位為0
    發(fā)表于 11-29 10:06 ?8次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>位<b class='flag-5'>操作</b>在(單片機(jī))<b class='flag-5'>寄存器</b>中的應(yīng)用

    32單片機(jī) C語(yǔ)言 寄存器(四)

    32單片機(jī)C語(yǔ)言相關(guān)知識(shí)以及寄存器地址名稱映射分析
    發(fā)表于 11-29 10:06 ?12次下載
    32單片機(jī) <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b> <b class='flag-5'>寄存器</b>(四)

    C語(yǔ)言寄存器操作

    C語(yǔ)言寄存器操作
    發(fā)表于 01-13 12:56 ?6次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32單片機(jī)編程時(shí)一般都用ST給的庫(kù)函數(shù)編程,庫(kù)函數(shù)編程的底層就是對(duì)單片機(jī)寄存器操作,庫(kù)函數(shù)就是一系列寄存器
    發(fā)表于 01-13 15:43 ?19次下載
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    C語(yǔ)言操作寄存器操作代碼

    由于寄存器中有時(shí)會(huì)有連續(xù)幾個(gè)寄存器位用于控制某個(gè)功能,現(xiàn)假設(shè)我們需要把寄存器的某幾個(gè)連續(xù)位清零,且其它位不變,代碼如下。
    發(fā)表于 12-30 14:19 ?2431次閱讀

    RAL寄存器模型操作圖鑒

    寄存器模型操作,指的是通過(guò)寄存器模型對(duì)RTL中寄存器進(jìn)行讀寫(xiě)訪問(wèn),或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 05-17 09:01 ?808次閱讀
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>圖鑒

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通過(guò)寄存器模型對(duì)RTL中寄存器進(jìn)行讀寫(xiě)訪問(wèn),或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 07-12 09:37 ?923次閱讀
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南