【嵌入式-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>哦~)

相关推荐
Funing72 小时前
BUCK降压电路如何同时兼顾效率和纹波?——12V 转 3.3V 供电的工程解法
嵌入式硬件·电路·开关电源·buck降压
秋深枫叶红2 小时前
嵌入式第五十一篇——IMX6ULL中断和EPIT定时器
单片机·嵌入式硬件
麦托团子2 小时前
51单片机学习笔记13-AT24C02(I2C)
51单片机
【赫兹威客】浩哥2 小时前
【赫兹威客】Arduino安装教程
stm32·单片机·嵌入式硬件
flashier2 小时前
ESP32学习笔记_WiFi(3)——HTTP
网络·笔记·单片机·网络协议·学习·http·esp32
兆龙电子单片机设计2 小时前
【STM32项目开源】STM32单片机智能宠物管家
stm32·单片机·物联网·开源·毕业设计·宠物
阿呀呀呀2 小时前
ESP32复位电路分析
单片机·嵌入式硬件
华清远见IT开放实验室3 小时前
【课程升级】STM32U5体系化课程深度升级!全103集,覆盖裸机开发+TouchGFX图形界面+智能手表项目,从入门到实战!
stm32·单片机·嵌入式硬件·智能手表
一路往蓝-Anbo3 小时前
第 2 篇:单例模式 (Singleton) 与 懒汉式硬件初始化
开发语言·数据结构·stm32·单片机·嵌入式硬件·链表·单例模式
嵌入你的世界3 小时前
cmBacktrace 实现原理解析:从 HardFault 现场到源码回溯
stm32·单片机·嵌入式硬件·cmbacktrace