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

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

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

單片機(jī)C語言位操作的編程實現(xiàn):置位和清零

玩轉(zhuǎn)嵌入式 ? 來源:玩轉(zhuǎn)嵌入式 ? 2023-11-28 09:35 ? 次閱讀

前面介紹了C語言編程的6種位操作,分別是按位與“&”、按位“或|”、按位取反“~”、異或“^”、左移“<<”以及右移“>>”。這6種位操作在操作單片機(jī)寄存器時非常方便,尤其是對寄存器的某一位清零或者置位,而不影響其他位。

43af83c6-8d7c-11ee-939d-92fbcf53809c.png

單片機(jī)端口方向配置寄存器

以8位單片機(jī)為例,如果要將第1位設(shè)置為輸出,而其他7位保持不變,根據(jù)寄存器說明只需要將第1位配置為1即可。這里就要用到“置1”的C語言語句。直接操作寄存器時,可以直接通過置1和清0來將某一個bit設(shè)置為1或者0,如下圖所示。

43cda2fc-8d7c-11ee-939d-92fbcf53809c.png

置1和清0位操作

1."置1"C語言語句

//Var |= ( A<

其中Var是變量,B是從第幾位開始,而A則是要修改的位數(shù),操作結(jié)果是置1。讀法為:將Var從第B位開始的連續(xù)A位置1,其他保持不變。

2.“置1”C語言語句推導(dǎo)

假設(shè)將Var中從第1位開始的3位置1,那么C語句的寫法應(yīng)該為:Var |= (0x7<<1);那么推導(dǎo)過程如下:

Var = Var | ( 0x07<<1 );//等效寫法
0x07:        0000 0111
0x07<<1: 0000 1110//可以看到第1、2、3位變?yōu)榱?;
//Var做按位或運算時,只要有1則結(jié)果為1

由上面的推導(dǎo)可以看到,(0x07<<1)從第1位開始的連續(xù)3位已經(jīng)變?yōu)榱?,再跟變量Var做或運算時,這三位就完成了置1操作,而其他位不受影響。

3."清0"C語言語句

//Var &= ~ ( A<

其中Var是變量,B是從第幾位開始,而A則是要修改的位數(shù),操作結(jié)果是清0。讀法為:將Var從第B位開始的連續(xù)A位清0,其他保持不變。

按位或的真值表參考如下:

輸入A 0 0 1 1
輸入B 0 1 0 1
輸出 0 1 1 1

4.“清0”C語言語句推導(dǎo)

假設(shè)將Var中從第1位開始的3位清0,那么C語句的寫法應(yīng)該為:Var &=~ (0x7<<1);那么推導(dǎo)過程如下:

Var = Var &(~( 0x07<<1 ));//等效寫法
0x07:              0000 0111
0x07<<1:        0000 1110//可以看到第1、2、3位變?yōu)榱?;
~( 0x07<<1 ): 1111 0001//按位取反,可以看到第1、2、3位變?yōu)榱?;
//Var做按位與運算時,只要有0則結(jié)果為0

由上面的推導(dǎo)可以看到,~(0x07<<1)從第1位開始的連續(xù)3位已經(jīng)變?yōu)榱?,再跟變量Var做與運算時,這三位就完成了清零操作,而其他位不受影響。

按位與的真值表參考如下:

輸入A 0 0 1 1
輸入B 0 1 0 1
輸出 0 0 0 1

5.“清0”和“置1”總結(jié)

按位操作的這種用法在初次接觸時非常的難理解,需要反復(fù)練習(xí)才能熟悉,下面將置1和清0做了總結(jié),以方便大家記憶。

按位操作的“置1”規(guī)律如下圖所示:

43fbaec2-8d7c-11ee-939d-92fbcf53809c.png

↑ 按位操作的“置1”規(guī)律

按位操作的“清0”規(guī)律如下圖所示:

440ee370-8d7c-11ee-939d-92fbcf53809c.png

↑ 按位操作的“清0”操作






審核編輯:劉清

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

    關(guān)注

    6037

    文章

    44569

    瀏覽量

    636143
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5357

    瀏覽量

    120581
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7606

    瀏覽量

    137052

原文標(biāo)題:單片機(jī)C語言,位操作的編程實現(xiàn):置位和清零,GPIOx_CRL |= (0x01<<1)

文章出處:【微信號:玩轉(zhuǎn)嵌入式,微信公眾號:玩轉(zhuǎn)嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    清零

    在51程序中為什么要進(jìn)行軟件清零?
    發(fā)表于 11-17 17:50

    8單片機(jī)C語言編程為什么可以實現(xiàn)16數(shù)據(jù)的加減

    8單片機(jī)C語言編程為什么可以實現(xiàn)16數(shù)據(jù)的加減
    發(fā)表于 05-25 11:06

    請問dsp28035怎么通過匯編語言對GPIO口清零

    GpioDataRegs.GPASET.bit.GPIO11=1;對GPIO11口清零,請問對于28035這款芯片,怎么用匯編語言實現(xiàn)上述清零
    發(fā)表于 08-22 10:51

    單片機(jī)C語言編程三部(8、16、32

    本資料分別為8單片機(jī)C語言編程:基于PIC1616單片機(jī)
    發(fā)表于 02-13 18:23

    AVR單片機(jī)的的清零是如何來實現(xiàn)的?

    AVR單片機(jī)的的清零是如何來實現(xiàn)的?AVR單片機(jī)與51
    發(fā)表于 07-08 07:08

    AVR單片機(jī)的端口操作方法

    一、常規(guī)方法AVR單片機(jī)的各類教材或編程應(yīng)用參考資料,對介紹的端口操作方法不外乎宏定義及整體和某個常量相或、相與來實現(xiàn)某一單個位狀態(tài)的改變
    發(fā)表于 07-13 08:11

    C語言操作在STM32f1單片機(jī)編程的具體應(yīng)用 精選資料推薦

    C語言操作在STM32f1單片機(jī)編程的具體應(yīng)用前言:熟練掌握
    發(fā)表于 07-14 07:31

    matlab 清零,單片機(jī)如何清零寄存器某一操作方法解析 精選資料推薦

    描述單片機(jī)如何清零寄存器就是把該位置1,清零就是把該位置0硬件自動清零就是當(dāng)某種條件成立,硬
    發(fā)表于 07-15 08:47

    如何實現(xiàn)AVR單片機(jī)清零?

    如何實現(xiàn)AVR單片機(jī)清零
    發(fā)表于 11-01 07:53

    AVR單片機(jī)的端口操作方法解析

    AVR單片機(jī)的端口操作方法解析來源:未知?作者:工程師周亮?2018年11月22日 16:07?3708次閱讀正在上傳…重新上傳取消?0一、常規(guī)方法AVR單片機(jī)的各類教材或
    發(fā)表于 11-23 08:35

    講解操作單片機(jī)開發(fā)中的一些實用技巧

    導(dǎo)讀C 語言單片機(jī)開發(fā)中的必備基礎(chǔ)知識。我們這里就列舉部分STM32學(xué)習(xí)中會遇見的C 語言基礎(chǔ)知識點1.
    發(fā)表于 01-24 08:18

    總結(jié)一下單片機(jī)清零的邏輯操作方法

    總結(jié)一下單片機(jī)操作清零的方法
    發(fā)表于 02-25 06:24

    單片機(jī)C語言編程中“”的保存方案

    引言   在現(xiàn)有的教課書及相關(guān)文章中,都難得提到在單片機(jī)C語言編程中對于自定義“”的狀態(tài)進(jìn)行保存的理念。   當(dāng)
    發(fā)表于 07-06 11:44 ?2275次閱讀

    32單片機(jī)C語言編程:基于PIC32圖書電子版

    《32單片機(jī)C語言編程:基于PIC32》介紹32單片機(jī)
    發(fā)表于 08-23 16:43 ?0次下載

    32單片機(jī)C語言編程:基于PIC32

    介紹32單片機(jī)PIC32的C語言編程技術(shù),引導(dǎo)讀者循序漸進(jìn)地掌握基于PIC32單片機(jī)的嵌入式控
    發(fā)表于 08-23 16:50 ?5170次閱讀