STM8 寄存器点亮LED

STM8 寄存器点亮LED

库函数:方便,但效率低,调用文件多
寄存器:高效,芯片资源最大化运用,但繁琐

//使用寄存器方式控制最小系统板上 PB5 引脚 LED 灯闪烁
#include "IOSTM8S103F3.h"
/*
int main( void )
{
  unsigned int i;
  //PB5:0010 0000
  PB_DDR |= 0X20; //OUT
  PB_CR1 |= 0X20; //PUSH-PULL 
  PB_CR2 |= 0X00; //LOW-SPEED
  
  while (1)
  {
  PB_ODR ^= 0X20; //SET 0  ^=:两同为0,不同为1
  for (i = 0 ; i < 60000 ; i++);
  }
  
  return 0;
}
*/
int main( void )
{
  unsigned int i;
  //PB5:0010 0000
 
 PB_DDR_DDR5 = 1 ;
 PB_CR1_C15  = 1 ;        
 PB_CR2_C25  = 0 ;

  
  while (1)
  {
  PB_ODR_ODR5 = 1; //SET 1 
  for (i = 0 ; i < 60000 ; i++);
  PB_ODR_ODR5 = 0; //SET 0 
  for (i = 0 ; i < 60000 ; i++);
  }
  
  return 0;
}

复习:

|=两0为0,否则为1。

int a = 5; // 0000 0101
int b = 3; // 0000 0011
a |= b;    // 0000 0111

两个二进制对应位为0时该位为0,否则为1。 拿5的二进制 0000 0101 和 3的二进制 0000 0011 进行|运算,后三位的的对应位都不是同时等于0,所以最终结果为 0000 0111 也就是7的二进制。

&=两1为1,否则为0。

int a = 5; // 0000 0101
int b = 3; // 0000 0011
a &= b;    // 0000 0001

两个二进制对应位都为1时,结果为1,否则结果为都0。拿5的二进制 0000 0101 和 3的二进制 0000 0011 进行&运算,只有最后一位都为1,则最终结果为 0000 0001 也就是1的二进制。

^=:两同为0,不同为1。

int a = 5; // 0000 0101
int b = 3; // 0000 0011
a ^= b; // 0000 0110

两个二进制对应位相同时,结果为0,否则结果为1。拿5的二进制 0000 0101 和 3的二进制 0000 0011 进行^运算,1-5位对应位都是0所以1-5位都为0,第8位都为1所以第8位也为0,其他的对应位都不相等所以为1,则最终结果为 0000 0110 也就是6的二进制。

你可能感兴趣的:(单片机)