那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機C語言位操作的編程實現:置位和清零

玩轉嵌入式 ? 來源:玩轉嵌入式 ? 2023-11-28 09:35 ? 次閱讀

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

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

單片機端口方向配置寄存器

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

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

置1和清0位操作

1."置1"C語言語句

//Var |= ( A<

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

2.“置1”C語言語句推導

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

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

由上面的推導可以看到,(0x07<<1)從第1位開始的連續3位已經變為了1,再跟變量Var做或運算時,這三位就完成了置1操作,而其他位不受影響。

3."清0"C語言語句

//Var &= ~ ( A<

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

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

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

4.“清0”C語言語句推導

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

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

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

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

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

5.“清0”和“置1”總結

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

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

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

↑ 按位操作的“置1”規律

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

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

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






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44621

    瀏覽量

    638623
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121196
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137736

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

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

收藏 人收藏

    評論

    相關推薦

    清零

    在51程序中為什么要進行軟件清零
    發表于 11-17 17:50

    8單片機C語言編程為什么可以實現16數據的加減

    8單片機C語言編程為什么可以實現16數據的加減
    發表于 05-25 11:06

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

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

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

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

    AVR單片機的的清零是如何來實現的?

    AVR單片機的的清零是如何來實現的?AVR單片機與51
    發表于 07-08 07:08

    AVR單片機的端口操作方法

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

    C語言操作在STM32f1單片機編程的具體應用 精選資料推薦

    C語言操作在STM32f1單片機編程的具體應用前言:熟練掌握
    發表于 07-14 07:31

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

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

    如何實現AVR單片機清零

    如何實現AVR單片機清零
    發表于 11-01 07:53

    AVR單片機的端口操作方法解析

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

    講解操作單片機開發中的一些實用技巧

    導讀C 語言單片機開發中的必備基礎知識。我們這里就列舉部分STM32學習中會遇見的C 語言基礎知識點1.
    發表于 01-24 08:18

    總結一下單片機清零的邏輯操作方法

    總結一下單片機操作清零的方法
    發表于 02-25 06:24

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

    引言   在現有的教課書及相關文章中,都難得提到在單片機C語言編程中對于自定義“”的狀態進行保存的理念。   當
    發表于 07-06 11:44 ?2292次閱讀

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

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

    32單片機C語言編程:基于PIC32

    介紹32單片機PIC32的C語言編程技術,引導讀者循序漸進地掌握基于PIC32單片機的嵌入式控
    發表于 08-23 16:50 ?5187次閱讀
    大发888 的用户名| 柳江县| 送彩金百家乐官网平台| 百家乐三遍| 利好线上娱乐| 百家乐官网7人桌布| 大发888song58| 百家乐官网娱乐平台会员注册| 百家乐庄最高连开几把| 百家乐官网清零| 威尼斯人娱乐城代理合作| 百家乐官网偷码| K7百家乐的玩法技巧和规则| 百家乐官网中P代表| 百家乐电子路单谁| 百家乐官网筹码多少钱| 百家乐存200送200| 永利百家乐官网娱乐平台| 老虎机价格| 百家乐官网出千桌| 大众娱乐城| 百家乐最新投注方法| 加州百家乐官网娱乐城| 犹太人百家乐的玩法技巧和规则 | 百家乐官网技巧看路| 威尼斯人娱乐场门票| 网上百家乐官网的玩法技巧和规则 | 百家乐官网丽| 皇博线上娱乐| 百家乐门户网站| 百家乐官网浴盆博彩通排名| 三国百家乐娱乐城| 神娱乐百家乐官网的玩法技巧和规则 | 一搏娱乐| 百家乐台布哪里有卖| 真人百家乐官网赢钱| 大发888下载亚洲城| 百家乐路单下注| 好运来百家乐官网现金网| 大发888备用网| 百家乐平台注册送彩金|