avr 单片机中的指令_BV(i)

2019-04-15 12:39发布

关于这个_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