当前位置: 首页 > article >正文

【嵌入式-51单片机】常见位运算和数据类型以及sbit使用

51单片机中
数据类型如下:
在这里插入图片描述

位运算符如下:
在这里插入图片描述
按位左移<<:低位补零,高位移出
按位右移>>:高位补零,低位移出
按位与&:对应位上的值必须同时为1才为1,可以用来对指定位置的寄存器重置处理。比如P2寄存器为1010 1011(0xAB),此时如果0xAB & 0xFE,此时相当于对第0位作置0处理,结果为0xAA。
按位或|:对应位上的值有一个为1那么值就为1。可以用来对指定位置的寄存器置为高电平处理。比如P2寄存器为1010 1010(0xAA),此时如果0xAA | 0x01,此时相当于对第0位作置1处理,结果为0xAB。
按位异或^:对应位上的值必须相反则为1,否则为0。这个可能具有保持值不变的功能,不太常用把, 比如P2寄存器为1010 1010(0xAA),此时0xAA ^ 0xFF 得到的值为0101 0101,相当于按位取反啦。
按位取反~:对应位上的值按位取反。。。比如1111 1110(0xFE)按位取反就是0000 0001(0x01),在做流水灯测试时发现居然还能这么用。。。。0xFE = ~(0x01 << 0),然后可以将这种对流水灯的流转转换为对每一位的左右移。很精彩!

在51单片机中,有一个神奇的关键字,叫sbit,这个关键字能直接取到寄存器的某一位。比如寄存器名为P1,8位,如果想直接将其中的第三位当作变量使用,可以直接使用P1_3,这个P1_3就代表了P1寄存器第三位的bit值,正如名字所描述的一样,它应该只能取0和1。比如P1_3=0;将P1第三位置为低电平。如果使用按位与,需要写成P1 = P1 & 0xFB;这样显得有点麻烦。哈哈哈,我算这个1111 1011转为0xFB还要花几秒呢。所以尽量sbit来简化吧~(另外使用PX_X这种寄存器位需要导入#include <REGX52.H>哦~)


http://www.kler.cn/a/154384.html

相关文章:

  • 算法日记 26-27day 贪心算法
  • 【Chapter 3】Machine Learning Classification Case_Prediction of diabetes-XGBoost
  • Redis实战案例(黑马点评)
  • 整数唯一分解定理
  • 不用来回切换,一个界面管理多个微信
  • java中volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗?
  • 5个被忽视的Linux实用命令
  • 《第一行代码:Android》第三版4.2常用控件的使用方法(2)
  • 求整数序列中出现次数最多的数
  • 深入理解同源限制:网络安全的守护者(下)
  • Linux 磁盘分区处理
  • JPEG 协议中英文对照
  • 分布式ID生成框架Leaf升级踩坑
  • vue 前端实现login页登陆 验证码
  • Vue3-pnpm包管理器创建项目
  • Python库Selenium自动化使用详细教程
  • 洛谷 P6704 [COCI2010-2011#7] GITARA
  • 错误处理(9)
  • ASP.NET版本WOL服务的使用
  • 算法通关村第三关—数组基本操作(青铜)
  • 05:2440----代码重定义
  • VMware下载安装教程
  • Python 3 使用 read()、readline()、readlines() 函数 读取文件
  • Gateway网关--java
  • ahk热字串:字符串输入后,按空格后,打开网址 or 不按空格直接打开网址
  • 多项式拟合求解