#include "STC12C5A.h"
#include "intrins.h"
#include "string.h"
#define uchar unsigned char
#define uint unsigned int
#define S2RI 0x01 //串口2接收中断请求标志位
#define S2TI 0x02 //串口2发送中断请求标志位
uchar xdata Data1_BUF[32],Data2_BUF[32];
uchar flag1,flag2,temp1,temp2;
uint m=0,n=0;
void delay(void)
{ uint j,g;
for(j=0;j<500;j++)
for(g=0;g<500;g++);
}
void Uart_Init (void)
{
SCON=0x50; //串口1工作方式1,
TMOD=0x20; //定时器1为工作方式2
TH1=0xFD; //产生9600bps
TL1=0xFD;
TR1=1;
S2CON=0x50; //工作方式一,允许接收
BRT=0xFD;
AUXR1=0x10;
AUXR=0x10;
IE2=0x01;
flag1=flag2=0;
ES=1;
EA=1;
}
void UART1_SendOneByte(uchar c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void UART2_SendOneByte(uchar c)
{ S2BUF = c;
while(!(S2CON&S2TI));
S2CON&=~S2TI;
}
void UART1_SendString(char *p)
{ while(* p)
UART1_SendOneByte(*p++);
}
void UART2_SendString(char *p)
{
while(* p)
UART2_SendOneByte(*p++);
}
void UART_1Interrupt(void) interrupt 4
{ if(RI==1)
{ RI=0;
if(SBUF!='\0')
{ Data1_BUF[m++]=SBUF;}
else
{ flag1=1;
Data1_BUF[m]='\0';
m=0;
}
}
}
}
void UART_2Interrupt(void) interrupt 8
{
if(!(S2CON&S2RI))
{ S2CON&=~S2RI;
if(S2BUF!='\0')
{ Data2_BUF[n++]=S2BUF;}
else
{ flag2=1;
Data2_BUF[n]='\0';
n=0;
}
}
}
void main(void)
{ Uart_Init();
while(1);
{ if(flag1==1)
{ flag1=0;
UART2_SendString(Data1_BUF);
}
if(flag2==1)
{ flag2=0;
UART1_SendString(Data2_BUF);
}
}
}