查询法实现单片机通讯

单片机发送的时候查询发送标志位,注意开启中断的情况

参考C代码:




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
				break;
			case 2:			   
				P_SW1 = 0x40;  //RXD_2/P3.6, TXD_2/P3.7
				break;
			case 3:			   
			  P_SW1 = 0x80;  //RXD_3/P1.6, TXD_3/P1.7
				break;
			case 4:			  
				P_SW1 = 0xc0;  //RXD_4/P4.3, TXD_4/P4.4
				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
			break;
		  case 2:			                              //RXD2/P1.0, TXD2/P1.1
			P_SW2 = 0x01;                                 //RXD2_2/P4.0, TXD2_2/P4.2
			break;
	   }
  }
}




void UartInit(u8 port,u16 bud)
{
 	switch(port)
	{
		case 0:
			SCON = 0x50;	//8λÊý¾Ý¿É±ä²¨ÌØÂÊ
			TMOD = 0x00;
			AUXR = 0x40;	//¶¨Ê±Æ÷1ʱÖÓΪFosc,¼´1T

			if(bud==1152)
			{
				TL1 = BRT_1152;
				TH1 = BRT_1152 >> 8;
			}
			else if (bud==9600)
			{
			 	TL1 = BRT_9600;
				TH1 = BRT_9600 >> 8;
			}
			else if(bud==4800)
			{
			  TL1 = BRT_4800;
				TH1 = BRT_4800 >> 8;
			}

			busy0 = 0;
		//	ES    = 1;					    //ʹÄÜ´®¿Ú1ÖжÏ
		  ES=0;
			TR1   = 1;			        //Æô¶¯¶¨Ê±Æ÷1
			break;

		case 1:		
		  IE2  &= ~(1<<2);	//½ûÖ¹ÖжÏ
		
		  S2CON = 0x50;		   //8λÊý¾Ý¿É±ä²¨ÌØÂÊ
			AUXR &= ~(1<<4);	   //Timer stop
			AUXR &= ~(1<<3);	   //Timer2 set As Timer
			AUXR |=  (1<<2);	   //Timer2 set as 1T mode
			if(bud==1152)
			{
				T2L = BRT_1152;
				T2H = BRT_1152 >> 8;
			}
			else if(bud==9600)
			{
			  T2L = BRT_9600;
			  T2H = BRT_9600 >> 8;
			}
			else if(bud==4800)
			{
			  T2L = BRT_4800;
			  T2H = BRT_4800 >> 8;			  
			}
			
			busy1 = 0;
			//IE2 |= 0x01;		//ʹÄÜ´®¿Ú2ÖжÏ
			IE2 &= ~0x01; 
			AUXR |=  (1<<4);	//Æô¶¯¶¨Ê±Æ÷2
			break;
	} 
}




void UartSendByte  (u8 port,u8  buff)
{
 	switch(port)
	{
	   case 0:
		         SBUF  = buff;
	             while (TI==0);
                 TI=0;
	             break;
	   case 1:
                 S2BUF  = buff;
				 while ( (S2CON & 0x02 ) == 0 );
				 S2CON &= ~0x02;                         
	             break;
	}
}

void UartSendBytes (u8 port,u8* buff,u8 len)
{
    u8 i=0;
	  for(i=0;i<len;i++)
	  {
		  UartSendByte( port, buff[i] );
	  }
}

void UartSendStr  (u8 port,u8 *String)
{
	   while(*String)
	   {
		  UartSendByte(port, *String++);
	   }	
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值