先要能作到单个串口,独立收发,再用串口2中断接收,收到后从串口1发送到电脑
我的应用是这样的:外部有一个串口到我的主芯片的S2串口,S2接收后,经过协议转换后从我的芯片的另一串口S1发送到电脑。
苦于双串口搞不好,一直没能得到高人的指点啊,请大家用过的出出意见,谢过了。。。。。。
下面是设定的代码:
//==============主程式中对其初始化=====================
main()
{
unsigned char k = 0;
IE = 0x81; //允许总中断中断,使能 INT0 外部中断
TCON = 0x01; //触发方式为脉冲负边沿触发
IRIN=1; //I/O口初始化
TESTLED=1; //以上是T0设定用于解码红外数据
// AUXR=0X11;
/////////S1;;;;;
SCON=0x50; //设定串口工作方式1
PCON=0x80; //波特率倍增
TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率 0010 0000
TL1= 0XFD;
TH1= 0XFD; // fd: FOSC:22.1184M ==>38400
TR1=1;
EA=1;
ES = 1; //允许串口中断
//S2;;;;; ****************以下是串口2初始化****************************
//void serial_port2_initial()
S2CON = 0x50; //0101,0000 8位可变波特率,方式一,允许s2接收
BRT = 0xFD; //独立波特率发生器给数据 Fd;19200
AUXR = 0X10; //0001 0000 ,brtr=1是启动独立波特率发生器 //********xx
//ES2 = 1; //启动串口2中断
IE2 = 0x01; //允许串口2中断,ES2=1
EA = 1; //开总中断
//=====================================================================
//**********************receive *******************
void s2_receive(void) interrupt 8 //S2 的接收中断中调用S1的发送程式,S2中收了就发,temp_recev
{
unsigned char k = 0;
k = S2CON;
k = k & 0x01;
if (k==1) //if (s2ri == 1)
{
//RI = 0;
S2CON = S2CON & 0XFE;
temp_recevs2 = S2BUF;
// TESTLED = 0;
touch_cont =1; //中断标志位
// send_uart1(temp_recevs2);
}
else
{
//TI = 0;
S2CON = S2CON & 0xFD;
touch_cont =0;
}
}
//================send from uart1 ===========
send_uart1(unsigned char temp_recevs2)
{
ES = 0;
TI = 0;
SBUF =temp_recevs2;
while (TI == 0);
TI = 0;
ES = 1;
}
|