色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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”操作






審核編輯:劉清

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

    關注

    6041

    文章

    44616

    瀏覽量

    637442
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120921
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137400

原文標題:單片機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 ?2286次閱讀

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

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

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

    介紹32單片機PIC32的C語言編程技術,引導讀者循序漸進地掌握基于PIC32單片機的嵌入式控
    發表于 08-23 16:50 ?5181次閱讀
    主站蜘蛛池模板: 国产精品久久久久婷婷五月色| 国产成人精品免费视频大全办公室| 四虎永久在线精品国产免费| 丝瓜视频在线免费| 我把寡妇日出水好爽| 亚洲国产精品嫩草影院| 欧美视频 亚洲视频| 日产精品高潮呻吟AV久久| 亚洲精品人成电影网| babesvideos性欧美| 国产成人女人在线视频观看| 日本高清免费看| 中国二级毛片| 把极品白丝老师啪到腿软| 韩国三级久久精品| 欧美激情一区二区三区视频| 40分钟超爽大片黄| 国产精品嫩草影院| 忘忧草日本在线WWW日本| 国产精品高清视频在线| 午夜伦理一yy4480影院| av老司机色爱区综合| 国产这里有精品| 日韩欧美群交P内射捆绑| 成人网18免费韩国| 久久综合老色鬼网站| 肉欲横流(NP高H)| 岳扒开让我添| 国产三级在线观看视频| 日本人娇小hd| 最新无码国产在线视频2020| 国产蜜臀AV在线一区视频| 亚洲成在人线视频| 久久九九日本韩国精品| 无码国产色欲XXXX视频| 精品国产免费观看久久久| 十七岁日本免费完整版BD| 国产午夜精品视频在线播放| 日韩少妇爆乳无码专区| 国内精品久久影视免费| 性欧美金发洋妞xxxxbbbb|