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

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

3天内不再提示

用Bitwise逻辑运算符进行设计

微云疏影 来源:Digi-Key 作者:Digi-Key 2022-04-12 15:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

下文将介绍 AND (&) Bitwise 逻辑并阐明博文《直接端口的操作案例》中介绍的概念。在该示例中,通过多个按钮和电位计控制器来操作由步进电机驱动的摄像头滑块。所选的微控制器在许多端口上都分布了有限的 I/O,这是通过将 I/O 汇编成单一数字值来实现的。

概览

在软件中评估开关输入时,常常从有用的 if/then 语句开始。这对于独立输入可能很有用,但对于多个交互式输入来说则不然。用 if/then 语句涵盖所有的按钮组合,可能会产生数百行代码和每周期中大量的执行任务。实施 Bitwise 逻辑可以最大限度地减少代码,提高周期速度。

项目参数

摄像头滑块项目涉及五个瞬时接触 SPST 开关,这些开关用于在滑块驱动电机的工作过程中选择方向和速度。将输入转换为 SPEED/ENABLE/DIRECTION 输出。开关按压操作与多开关按压识别功能同时在软件中锁定。

pYYBAGJVJA2AVhXbAACH6rtTBqU965.jpg

AND Bitwise 运算符

摄像头滑块的主要位运算符是 AND。该运算器使用 C 语言编程中的安培 (&) 符号,使用图 1 中的真值表。

poYBAGJVJA2ASw1mAAA0nZ7R75k254.jpg

图 1:AND Biwise 运算符的真值表及示例。(图片来源:Don Johanneck)

I/O 组合

为了确立一个能代表所有开关的单值,把位移至所需的位置,进行相加并使用 AND 运算符进行比较(见图 2)。另一个代表极限传感器当前状态的值与开关按压值进行比较,以便在达到极限时取消输出。

pYYBAGJVJA2AXA5zAAB06ZELRI0517.jpg

图 2:摄像头滑块开关的配置,位的编译以及 AND 运算符的使用。(图片来源:Don Johanneck)

在这种情况下,如果按下任何一个按钮或按钮组合,则 buttonValues 不等于零,并在软件中通过 limitValue 和查找表进行操作,以确定输出,这与前面提到的直接端口操作博文中描述的方法完全相同。

编程

该程序使用由经过处理的输入值索引而成的输出值表。程序员可以通过改变表数值来确定按任何组合的按钮所产生的动作,这样就不需要改变程序结构,否则结构更改可能是令人望而生畏的。在该示例中,图 3 中的表值代表了单个、多个和对立的按钮动作,不需要单独 IF 语句(图 4)。

poYBAGJVJA6ANN_iAABW9Z5ZB98917.jpg

图 3:由输入值索引而成的唯一输出值表。

pYYBAGJVJA6AT_IEAABSe6eZ2PI384.jpg

图 4:主代码;读取数值和确定输出。

电机控制是通过一个用来确定步进频率的定时器中断服务例程以及一种“跳跃”方法实现的,这种方法通过仅在 stepGo 变量等于或大于 stepFreq 变量时设置电机控制板上的 STEP 引脚来简化速度控制(图 5)。较低的电位器值使该例程跳过了更多的 STEP。

poYBAGJVJA6AafwPAAA2EFniX70951.jpg

图 5:电机控制的中断服务例程。

结论:

使用诸如 AND (&) 这样的位运算符可以简化代码,并大大减少解析数字输入所需的 IF 语句的数量。输出表的建立简单而灵活。使用更多的输出位可以快速扩展输出表,提供更多的输出选择。每一个增加的输出位都需要在主代码中增加一个(或几个)处理程序。一旦输出表建立,该表就会在每个周期内只使用一次,而由主代码完成繁重的工作。中断服务例程在后台稳定地运行,更新电机控制器的 STEP 引脚,但在主代码切换电机控制器的使能 (ENN) 引脚之前,不会发生运动。

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

    关注

    114

    文章

    17638

    浏览量

    190256
  • 定时器
    +关注

    关注

    23

    文章

    3360

    浏览量

    121743
  • 逻辑运算
    +关注

    关注

    0

    文章

    58

    浏览量

    10203
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言宏拼接运算符典型使用

    在C语言中,##运算符(称为[size=16.002px]标记拼接运算符)用于宏定义中将两个标记(token)拼接成一个新的标记。它在预处理阶段处理,常用于动态生成变量名、函数名或类型名,以提高代码
    发表于 11-20 08:27

    长晶科技逻辑芯片产品矩阵介绍

    逻辑IC是用于实现基本逻辑运算和复合逻辑运算的集成电路, 广泛应用于各种电子设备和系统中,成为现代电子设备智能化、高效化的关键所在。
    的头像 发表于 11-04 17:47 1055次阅读
    长晶科技<b class='flag-5'>逻辑</b>芯片产品矩阵介绍

    第4章 C语言基础以及流水灯的实现(4.3 4.4)

    4.3 C语言基本运算符 小学数学学过加、减、乘、除等运算符号以及四则混合运算,而这些运算符号在C语言中也有,但是有些表达方法不一样,并且还有额外的
    的头像 发表于 10-29 15:30 181次阅读

    协议分析仪支持哪些高级触发选项?

    :使用AND、OR、NOT等逻辑运算符组合多个触发条件。 示例:捕获同时满足以下条件的流量: TCP端口 == 443(HTTPS) HTTP方法 == POST 数据包长度 > 512字节 优势:实现复杂场景
    发表于 07-23 14:21

    《ESP32S3 Arduino开发指南》第三章 C/C++语言基础

    &gt;=大于或等于 逻辑运算符&amp;&amp;逻辑“与”运算 ||逻辑“或”运算 !
    发表于 06-10 09:20

    基于LockAI视觉识别模块:C++图像的基本运算

    的 OpenCV API。按照以下步骤,您可以轻松地进行图像的基本运算: 获取和设置像素值:使用 cv::Mat::at 方法访问和修改像素。 逻辑运算:使用 cv::bitwise_
    发表于 05-06 16:56

    基于LockAI视觉识别模块:C++图像的基本运算

    在图像处理中,理解图像的基本操作是掌握计算机视觉技术的关键。本文章将介绍基于LockAI视觉识别模块下OpenCV中图像的基本运算方法,包括像素操作、逻辑运算和差值运算,并通过一个综合示例展示其实际应用。
    的头像 发表于 05-06 16:20 529次阅读
    基于LockAI视觉识别模块:C++图像的基本<b class='flag-5'>运算</b>

    数字电路—5、逻辑运算

    发表于 03-25 10:17

    必看!15个C语言常见陷阱及避坑指南

      C语言虽强大,但隐藏的“坑”也不少!稍不留神就会导致程序崩溃、数据异常。本文整理15个高频陷阱,助你写出更稳健的代码!   陷阱1:运算符优先级混淆  问题:运算符优先级不同可能导致计算顺序错误
    的头像 发表于 03-16 12:10 1379次阅读

    全套C语言培训资料—PPT课件

    全套C语言培训资料,共427页,13个章节:C语言概述、程序的灵魂—算法、数据类型 & 运算符与表达式、顺序程序设计、选择结构程序设计、循环控制、数组、函数、预处理命令、指针、结构体
    发表于 03-12 14:50

    CMOS逻辑IC是如何构成的

    电子设备正常运转离不开“逻辑”的精密驱动。例如,当我们在手机上滑动屏幕时,背后就有无数个CMOS逻辑电路在默默工作,它们通过复杂的逻辑运算,将我们的触摸信号转化为手机能够理解的指令,从而实现各种功能。
    的头像 发表于 03-10 10:33 937次阅读
    CMOS<b class='flag-5'>逻辑</b>IC是如何构成的

    VirtualLab Fusion应用:灵活的区域定义

    详细介绍了区域配置的过程。 区域定义 简单区域 多边形区域 采样区域 复合区域 更复杂的形状,如甜甜圈或棋盘区域,可以使用复合区域类型生成,它根据逻辑运算符组合多个单独的区域。 使用不同逻辑运算符组成的区域 用作优化区域 用作评估区域 用于光导元件 分割
    发表于 02-24 09:47

    面向高频逻辑运算的锂离子电容二极管

    离子电子耦合逻辑运算被认为是实现深度类脑计算的可行途径之一,然而高频离子电子耦合器件的缺失大大限制了这一领域的快速发展。
    的头像 发表于 01-20 14:43 861次阅读
    面向高频<b class='flag-5'>逻辑运算</b>的锂离子电容二极管

    复合的逻辑运算

    符合逻辑运算
    的头像 发表于 01-16 09:10 557次阅读
    复合的<b class='flag-5'>逻辑运算</b>

    VirtualLab Fusion:区域定义

    更复杂的形状,如甜甜圈或棋盘区域,该类型使用逻辑运算符组合多个单独的区域。 **使用不同逻辑运算符组合区域** 我们演示了不同的运算符对(解析定义的)椭圆和代表LightTrans标志的采样区域的组合
    发表于 01-06 08:56