AVR c语言的位操作重点是反转操作PORTB^=(1<<2);//取反PORTB的第2位。取反~和异或^反转要警惕

AVR c语言的位操作

liquanhai 2009-09-17 02:48:00  3602  收藏 1
分类专栏: 单片机C语言 文章标签: 语言 c 编译器 汇编 任务 编程
版权

单片机C语言
专栏收录该内容
4 篇文章0 订阅
订阅专栏
位操作
一个共同的任务是编程微控制器 MCU打开或关闭IO 寄存器的一些位bit 很幸运标准C 有较好的和适用的位操作功能而没有借助于汇编指令或其它非标准C 结构C 定义了一些按位进行的运算是很有用的
a | b – 按位或 这个表达式指示中a 被表达式中的b 按位进行或运算这惯用于打开某些位尤其常用|=的形式

例如PORTA |= 0x80; // 打开位7 (最高位)
a & b – 按位与 这个运算在检查某些位是否置1 时有用例如
If ((PORTA & 0x81) == 0) // 检查位7 和位0
注意圆括号需要括在&运算符的周围因为它和= = 相比运算优先级较低这是C 程序中很多错误的原因之一
a ^ b – 按位异或 这个运算对一个位取反有用例如在下面的例子中位7 是被翻转的
PORTA ^= 0x80; // 翻转位7
~a – 按位取反. 在表达式中这个运算执行一个取反当用按位与运算关闭某些位时与这个运算组合使用尤其有用如
PORTA &= ~0x80; // 关闭位7
这个编译器对这些运算能产生最理想的机器指令例如sbic 指令可以用在根据位的状态进行条件分枝的按位与运算中

在c语言里对位的操作如一般如下:
PORTB|=(1<<2);//置PORTB的第2位=1
PORTB&=~(1<<2);//置PORTB的第2位=0
PORTB^=(1<<2);//取反PORTB的第2位
While(PORTB&(1<<2));//判断1
While(!(PORTB&(1<<2)));//判断为0
————————————————
版权声明:本文为CSDN博主「liquanhai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liquanhai/article/details/4561005

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值