单片机发送的时候查询发送标志位,注意开启中断的情况
参考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++);
}
}