0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言操作寄存器的常见手法

GReq_mcu168 来源:硬件攻城狮 作者:硬件攻城狮 2022-03-12 09:06 次阅读

使用C语言寄存器赋值时,常常需要用到C语言的位操作方法。把寄存器某位清零假设a代表寄存器,且其中本来已有值。如果要把其中某一位清零且其它位不变,代码如下。

//定义一个变量 a = 1001 1111 b (二进制数)unsigned char a = 0x9f;//对 bit2 清零a &= ~(1<<2);//括号中的 1 左移两位,(1<<2) 得二进制数:0000 0100 b//按位取反,~(1<<2) 得 1111 1011 b//假如 a 中原来的值为二进制数:a = 1001 1111 b//所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 1011 b),//经过运算后,a 的值 a=1001 1011 b// a 的 bit2 位被被零,而其它位不变。把寄存器某几个连续位清零    由于寄存器中有时会有连续几个寄存器位用于控制某个功能,现假设我们需要把寄存器的某几个连续位清零,且其它位不变,代码如下。

//若把 a 中的二进制位分成 2 个一组//即 bit0、bit1 为第 0 组,bit2、bit3 为第 1 组,// bit4、bit5 为第 2 组,bit6、bit7 为第 3 组//要对第 1 组的 bit2、bit3 清零a &= ~(3<<2*1);//括号中的 3 左移两位,(3<<2*1) 得二进制数:0000 1100 b//按位取反,~(3<<2*1) 得 1111 0011 b//假如 a 中原来的值为二进制数:a = 1001 1111 b//所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 0011 b),//经过运算后,a 的值 a=1001 0011 b// a 的第 1 组的 bit2、bit3 被清零,而其它位不变。//上述 (~(3<<2*1)) 中的 (1) 即为组编号; 如清零第 3 组 bit6、bit7 此处应为 3//括号中的 (2) 为每组的位数,每组有 2 个二进制位; 若分成 4 个一组,此处即为 4//括号中的 (3) 是组内所有位都为 1 时的值; 若分成 4 个一组,此处即为二进制数“1111 b”//例如对第 2 组 bit4、bit5 清零a &= ~(3<<2*2);对寄存器某几位赋值    寄存器位经过清零操作后就可以方便地对某几位写入所需要的数值了,具体代码如下。

//a = 1000 0011 b//此时对清零后的第2组bit4、bit5设置成二进制数“01b”a|=(1<<2*2);//a = 1001 0011 b,成功设置了第 2 组的值,其它组不变寄存器某位取反    要对寄存器的某个位进行取反操作,即 1 变 0 ,0 变 1,这可以直接用如下操作。

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

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

    关注

    31

    文章

    5336

    浏览量

    120256
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136713

原文标题:C语言操作寄存器的常见手法

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成电路中非常重要的一种存储单元,通常由触发组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两
    的头像 发表于 07-21 16:59 4014次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么<b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>点亮LED灯?

    C语言操作寄存器中的应用

    C语言操作寄存器中的应用本文参考另一篇博客写成附链接,个人感觉内容过多不便于吸收,就写了这篇博客。整体思想:设置一个位就是设置该位为1,清除就是设置该位为0
    发表于 01-24 06:04

    C语言寄存器操作相关资料分享

    C语言寄存器操作
    发表于 02-25 07:58

    寄存器传输语言详解

    数字系统中最常用到的微操作可分为四类: 1、寄存器传送微操作 它可把二元信息从一个寄存器传送到另一个寄存器,在
    发表于 08-16 09:32 6225次阅读
    <b class='flag-5'>寄存器</b>传输<b class='flag-5'>语言</b>详解

    寄存器操作方法_对寄存器操作的通用方法总结

    本文主要详解寄存器操作方法以及对寄存器操作的通用方法总结,具体的跟随小编来了解一下。
    的头像 发表于 05-22 15:53 2.3w次阅读

    寄存器变量

    C语言中使用关键字register来声明局部变量为寄存器变量。寄存器变量的值会被存放在CPU的寄存器中,每当需要使用它们时,CPU就可以直接
    发表于 06-03 10:13 2367次阅读

    Atmel SAMC21的I2C驱动寄存器操作寄存器代码免费下载

    本文档的主要内容详细介绍的是Atmel SAMC21的I2C驱动寄存器操作寄存器代码免费下载。
    发表于 06-20 08:00 19次下载

    C语言访问MCU寄存器

    C语言访问MCU寄存器问题由来://下面这行代码的意思是直接操作0X020C4068这个寄存器/
    发表于 10-25 13:21 3次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>访问MCU<b class='flag-5'>寄存器</b>

    C语言操作在(单片机)寄存器中的应用

    C语言操作寄存器中的应用本文参考另一篇博客写成附链接,个人感觉内容过多不便于吸收,就写了这篇博客。整体思想:设置一个位就是设置该位为1,清除就是设置该位为0
    发表于 11-29 10:06 8次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>位<b class='flag-5'>操作</b>在(单片机)<b class='flag-5'>寄存器</b>中的应用

    32单片机 C语言 寄存器(四)

    32单片机C语言相关知识以及寄存器地址名称映射分析
    发表于 11-29 10:06 12次下载
    32单片机 <b class='flag-5'>C</b><b class='flag-5'>语言</b> <b class='flag-5'>寄存器</b>(四)

    C语言寄存器操作

    C语言寄存器操作
    发表于 01-13 12:56 6次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>:<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32单片机编程时一般都用ST给的库函数编程,库函数编程的底层就是对单片机寄存器操作,库函数就是一系列寄存器
    发表于 01-13 15:43 19次下载
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    C语言操作寄存器操作代码

    由于寄存器中有时会有连续几个寄存器位用于控制某个功能,现假设我们需要把寄存器的某几个连续位清零,且其它位不变,代码如下。
    发表于 12-30 14:19 2629次阅读

    RAL寄存器模型操作图鉴

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 05-17 09:01 929次阅读
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>图鉴

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 07-12 09:37 1076次阅读
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南