关于这个_BV(i)指令的统一解释是:
#define _BV(bit) (1 << (bit))
_BV()是把1左移N位的函数。
_BV(7)相当于(1<<7)
本身和置位还是清零没有关系。不过这个函数,实际上却真的大多数应用于位的置位或清零。
比如:
PORTA|=_BV(PA7)
PORTB&=~_BV(PB6)
PORTC^=_BV(PC5)
分别相当于:
PORTA = PORTA | (1<
PORTB = PORTB & (~(1<//"&"是位与运算符
PORTC = PORTC ^ (1<//"^"是位异或运算符
下面举几个例子分析:
1、假如PORTB=0xFF
PORTB = ~_BV(5); //执行BV(5),-BV=01000000,执行~运算符以后,PORTB=10111111
2、假如PORTD=0x00
PORTD^=_BV(PD7); //执行BV(PD7)后,-BV=10000000,则PORTD^_BV=00000000^10000000=10000000