没有位操作的ARM单片机(STM32 LPC1114等)如何反转IO口

IO口电平反转,常用来驱动LED时,使得LED闪烁。

51单片机中,是这么写:

sbit led = P1 ^5;
led = ~led;

那么,一般的ARM单片机没有位操作,如何反转IO口电平呢?

方法1:

unsigned char i;
if(i==0)
{
  IO口数据寄存器 = 对应位置1;
  i=1;
}
else if(i==1)
{
  IO口数据寄存器 = 对应位置0;
  i=0;
}

方法2:

IO口数据寄存器 ^= 对应位;

方法2巧妙利用c语言逻辑“异或”实现了与51一样的单语句就实现了IO口的电平反转,看来还是那句话,一切高手都是掌握了扎实的基础!

举例1:STM32的PB5连接LED,使得PB0电平反转

GPIOB->ODR^=(1<<5);

举例2:LPC1114的P3.2引脚连接LED,使得P3.2电平反转

LPC_GPIO3->DATA^=(1<<2);