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






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44553

    浏览量

    634753
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120257
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136713

原文标题:单片机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 2266次阅读

    32单片机C语言编程:基于PIC32图书电子版

    《32单片机C语言编程:基于PIC32》介绍32单片机
    发表于 08-23 16:43 0次下载

    32单片机C语言编程:基于PIC32

    介绍32单片机PIC32的C语言编程威廉希尔官方网站 ,引导读者循序渐进地掌握基于PIC32单片机的嵌入式控
    发表于 08-23 16:50 5148次阅读