历史上的今天
今天是:2025年05月18日(星期日)
2018年05月18日 | AVR c语言的位操作
2018-05-18 来源:eefocus
位操作
一个共同的任务是编程微控制器 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
史海拾趣
|
Spartan-6 and Virtex-6 FPGA Embedded Kit FAQ 1. Where can I purchase an Embedded kit? 2. How much do the Spartan-6 and Virtex-6 FPGA Embedded Kits cost? 3. When will I get my kit? 4. What are included in the Embedded Kits? 5. What expansion ports are avail ...… 查看全部问答> |
|
开发平台是vs2005下vc++下的智能设备开发 三星s2440下的wince平台 屏幕显示分辨率为800*600 在中文版本下应用程序可以全屏显示,但是到了英文平台,只能显示出程序的一部分内容,感觉像是应用程序的分辨率变小了 如果换成vs2005下C#下的智能设备 ...… 查看全部问答> |
|
系统wince5.0,2440硬件平台,修改了/kernel/hal/arm/fw.s文件后,在pb5.0上编译后整个系统都跑不起来,同样目录下的c文件修改后编译就没有问题,不知是什么原因,后来在PB4.2下编译好fw.s文件,直接把编译好的fw.obj copy到5.0里链接, ...… 查看全部问答> |
|
是BPB还是FAT或FDT的损坏? 除了硬件损坏,文件系统突然断电会有什么样的写入错误造成存贮设备不可用吗? 一般的文件系统如果是先写数据,再记录FAT和FDT会提高保护的可能性吗。… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:38 编辑 请大家帮忙,在C64x的EMIF在SDRAM接口中,如何通过BE[7:0]实现8bit、16bit、32bit、64bit的寻址方式? … 查看全部问答> |




