位运算是指按二进制位进行的运算。在单片机中位运算通常用于I/O端口的输入输出控制和逻辑判断。
C语言提供的位运算符有:
运算符 |
含义 |
功能 |
& |
按位与 |
如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。 |
| |
按位或 |
两个相应的二进制位中只要有一个为1,该位的结果值为1。 |
∧ |
按位异或 |
若参加运算的两个二进制位同号则结果为0(假)异号则结果为1(真) |
~ |
取反 |
~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。 |
<< |
左移 |
左移运算符是用来将一个数的各二进制位全部左移N位,右补0。 |
>> |
右移 |
表示将a的各二进制位右移N位,移到右端的低位被舍弃,对无符号数,高位补0。 |
与逻辑:
将PA口的第0位清0(即最低位输出低0v电平),其余位保持不变: PORTA口应同‘11111110’进行与运算
二进制:11111110 的十六进制为:0xFE,C语言代码:PORTA=PORTA&0xFE;一般采用c语言的“&=‘运算符,通常写成
PORTA&=0xFE; 执行此语句后,PORTA口的第0位将输出低电平。
或逻辑:
将PA口的第7位置1(即最高位输出高电平)其余为保持不变,PORTA应与‘10000000’进行或运算
即c语言:PORTA=PORTA|0x80 ;采用或赋值运算符,通常写成 PROTA|=0x80 ; 二进制‘10000000’的十六进制是0x80;
非逻辑:
c语言:PORTA~=0x0F;//将0x0F=‘00001111‘取反后 '11110000‘=0xF0 赋值给PORTA,通常和其他逻辑运算符一起使用
异或逻辑:
将PA口的第7位翻转,PORTA^=0x80,即执行此语句一次,PORTA口的第7位状态变化一次,由0变1,或由1变0,可以周期性的控制一个灯的亮灭。
移位操作:
判断PA口的第7位是否为0,c语言 if (PINA&(1<<7)==0) 1<<7 结果为0x80,也可写为 if (PINA&0x80)==0)
关键字:单片机 avr c语言
引用地址:
单片机avr c语言位运算 与或非 异或逻辑 运算介绍 详解
推荐阅读最新更新时间:2024-03-16 13:53
SoC微控制器的总线设计
32位嵌入式设计越来越要求对网络上高带宽数据流进行实时控制,特别是在系统级芯片(SoC)层面,以确定性和无争议的方式传输数据和控制信息变得非常重要。各种操作直接处于系统开发者既定的控制之下也很重要,而这在基于总线的SoC设计中并不总是能够实现。 设计者和芯片供应商常常借鉴板级及系统级架构技术,以便在最短的设计时间内以最低的开发成本进行SoC设计。由于手机和PDA等设备对确定性的实时响应需求很少,所以传统解决方案在此类应用中表现还不错。 但在许多新的联网嵌入式设计中,传统总线架构不能满足共享总线对高带宽及高密度数据流的需求,在下列应用中尤其如此,如工业用人机界面(HMI)网络显示、POS终端设备,具有不同数据带宽需求的彩色打印机、
[嵌入式]
深入分析MCU堆栈的作用,以及该如何设置堆栈大小
前段时间分享文章《STM32的启动流程到底是怎样的?》之后,很多朋友问了关于堆栈的问题。今天就写点相关内容,让大家进一步了解堆栈的知识。 1写在前面 我们都知道堆栈位于RAM中,现在MCU的RAM相对较大(几十上百K),所以分配的堆栈也是足够大,很多人都不怎么关注这个堆栈的大小。 但是,以前MCU的RAM比较小,甚至1K都不到,所以,以前的工程师就比较关心堆栈的大小。 对于小项目而言,可能我们不用关心堆栈大小。 但是,如果项目大了,你就要注意了,你堆栈大小设置不合理,很有可能导致Fault。 想要知道堆栈有多大才合适,你就需要明白堆栈的作用,下面让大家进一步了解堆栈。 2关于堆栈的基础知识 我们先看一下
[单片机]
51单片机的串行口扩展方法设计
1 引言 在研究采场瓦斯积聚模拟试验台的过程中,笔者设计了主从式多机采控系统结构。主从式多机控制系统是实时控制系统中较为普遍的结构形式,它具有可靠性高,结构灵活等优点。当选用单串口51单片机构成这种主从式多机系统时,51单片机一方面可能要和主机Computer通信,一方面又要和下位机通信,这时就需要扩展串行通道。本文具体介绍了两种串行通道的扩展方法。 2 串行口的扩展方法 常用的标准51单片机内部仅含有一个可编程的全双工串行通信接口,具有UART的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。当以此类型单片机构成分布式多级应用系统时,器件本身的串口资源就不够用了。笔者在实际开
[单片机]
基于MSP430单片机的原油含水率测定仪
原油含水率测定仪出现于20世纪90年代末,它是有温控仪、定时器等开关仪表组成的一种集测量与控制于一体的蒸馏法测定原油含水率的产品,适用于石油、石化等行业中原油含水率的测量。本仪器采用MSP430单片机,是集温度控制、时间控制、蒸馏功率控制和制冷循环水控制等功能为一体的自动化、智能化仪器。 系统设计方案 1温度传感器的选择 一般情况下,在温度测量中所采用的传感器有:热电偶和热电阻两大类。本系统需测控3处的温度,由于热电偶需温度补偿,而热电阻不需要,从硬件成本和软件复杂程度考虑确定采用热电阻PT100。 2 MSP430单片机 MSP430系列单片机为低功耗16位的精简指令构架,在线可编程,将大量的外
[单片机]
MSP430单片机编程思想总结(一)
1.主函数main()中;只调用初始化函数和执行后台程序; 2.中断服务子程序函数中不要去写“实质性”的代码。只调用事件检测函数,提高程序的可读性 3.WDT 可以作为节拍定时器 在单片机编程中具有重要意义;定时扫描轮询方法可以解决大量CPU阻塞问题 4.事件函数对于理解程序意图非常重要;集中放置“事件检测/处理”而不是跟着满世界“乱蹦的”中断去找事件函数,是十分高效的。 5.全局变量的使用要非常谨慎,全局变量往往是联系各关键函数的纽带,因此集中放置全局变量也是增加程序可读性的常用做法。 6.除了读写寄存器(包括改写IO输出),数学和逻辑运算外,CPU干其他的事例如长延时,死循环类型的查询属于阻塞CPU的行为,应该坚决避免 7.当
[单片机]
PIC 8位单片机的分类和特点
由美国Microchip公司推出的PIC单片机系列产品,首先采用了RISC结构的嵌入式微控制器,其高速度、低电压、低功耗、大电流LCD驱动能力和低价位OTP技术等都体现出单片机产业的新趋势。现在PIC系列单片机在世界单片机市场的份额排名中已逐年升位,尤其在8位单片机市场,据称已从1990年的第20位上升到目前的第二位。PIC单片机从覆盖市场出发,已有三种(又称三层次)系列多种型号的产品问世,所以在全球都可以看到PIC单片机从电脑的外设、家电控制、电讯通信、智能仪器、汽车电子到金融电子各个领域的广泛应用。现今的PIC单片机已经是世界上最有影响力的嵌入式微控制器之一。 一、PIC 8位单片机的分类 PIC 8位单片机产品共有三
[单片机]
STM8单片机PWM应用(IAR)
PD3复用功能是TIM2_CC2,正好可以用来测试PWM功能。本例程通过电位器调整PWM脉宽来调整接在PD3的LED1亮度。 #include iostm8s207sb.h void CLK_init(void) { CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M } void GPIO_init(void) { PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出 PD_CR1 = 0x08; // 设置PD3为推挽输出 } void TIM2_init(void) { TIM2_CCMR2
[单片机]
基于单片机和CPLD的高精度大型望远镜伺服控制器设计
设计基于高速单片机C8051F120和CPLD的高精度大型望远镜的伺服控制器,由单片机实现闭环控制算法、上位机通信和LCD显示控制,CPLD实现增量式编码器计数、电机驱动波形发生以及I/O接口。该控制器可独立进行电机控制,也可配合上位机进行控制,具有实时性和抗干扰能力强、成本低、调试方便等特点。 引言 微电子技术和计算机的发展推动着伺服控制技术的进步,控制系统的硬件系统越来越高速化、小型化、模块化,功能也日趋强大完善;而且,伺服控制技术是朝着更开放、更加模块化的控制结构的方向发展的,要求控制器算法实现简单、控制接口灵活,针对不同的伺服控制对象时硬件系统不变,软件系统也可以完成参数的自动调整。 在高精度大型望远镜伺服控制应用
[单片机]