打印

再求独立双串口相互通讯问题!

[复制链接]
1474|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ming666|  楼主 | 2009-8-14 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先要能作到单个串口,独立收发,再用串口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;
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

93

帖子

0

粉丝