位操作与直接赋值的易错点

//串口引脚切换
//参数说明   port :串口号   ConfigPin :引脚指定
void UartChangePin(u8 port,u8 ConfigPin)
{
  if(0==port)
  {
		/* 
				//  P_SW1 = 0x00;                               //RXD  /P3.0, TXD  /P3.1
				//  P_SW1 = 0x40;                               //RXD_2/P3.6, TXD_2/P3.7
				//  P_SW1 = 0x80;                               //RXD_3/P1.6, TXD_3/P1.7
				//  P_SW1 = 0xc0;                               //RXD_4/P4.3, TXD_4/P4.4
		*/
		switch(ConfigPin)
		{
			case 1:
				//P_SW1 = 0x00;  //RXD  /P3.0, TXD  /P3.1  错误写法	    只能对位操作,不影响其他位
				P_SW1 &=   ~(1<6);
				P_SW1 &=   ~(1<7);
				break;
			case 2:			   
			   //	P_SW1 = 0x40;  //RXD_2/P3.6, TXD_2/P3.7
			   	P_SW1 |=    (1<6);
				P_SW1 &=   ~(1<7);
				break;
			case 3:			   
			    //P_SW1 = 0x80;  //RXD_3/P1.6, TXD_3/P1.7
				P_SW1 &=   ~(1<6);
				P_SW1 |=    (1<7);
				break;
			case 4:			  
			  //P_SW1 = 0xc0;  //RXD_4/P4.3, TXD_4/P4.4
			    P_SW1 |=    (1<6);
				P_SW1 |=    (1<7);
				break;
		}
  }
  else if(1==port)
  {
  /*    
        P_SW2 = 0x00;                               //RXD2/P1.0, TXD2/P1.1
        P_SW2 = 0x01;                               //RXD2_2/P4.0, TXD2_2/P4.2
  */
     switch(ConfigPin)
	   {
		  case 1:
		//	P_SW2 = 0x00;                                 //RXD2/P1.0,   TXD2/P1.1
			P_SW2 &=   ~(1<0);
			break;
		  case 2:			                              //RXD2/P1.0, TXD2/P1.1
		//	P_SW2 = 0x01;                                 //RXD2_2/P4.0, TXD2_2/P4.2
			P_SW2 |=    (1<0);
			break;
	   }
  }
}

这里STC单片机用的位操作可以防止对其他功能的误操作。 如串口引脚和SPI引脚的映射关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值