s13952537453 发表于 2012-3-25 19:33:16

新人求助:关于51双串口实现收发的问题。。。

单片机用的是STC12C5A32S2,其中RXD1与TXD1与GPRS模块相连,实现往GPRS发送AT指令的功能,而RXD2与TXD2与GPS模块相连,实现接收GPS数据的功能。

我是新手,摸着石头过河的那种。。。

开始的时候如果只与GPRS模块相连,利用上位机还能收到数据,单独的用GPS模块。。。

利用串口工具也能收到数据,但是两个模块相连,程序还是原来的那个思路,就是实现不了GPS数据发送到上位机数据,各位大神,小弟跪求指条明路。。。

main程序如下:
void main(void)
{       
    uchar a;
    uchar *p=a;
    uchar b1="AT%IPSEND=\"";
    uchar *q1=b1;
    uchar b2="\"";
    uchar *q2=b2;
       
    P4M1 = 0x00;                                                                //P40-P43设置为推挽输出
        P4M0 = 0x0f;
        P4 = 0x00;
        Delay_ms(100);
        IGT = 0;
        Delay_ms(5000);
        IGT = 1;
        Timer0_init();                                                                //定时器0初始化
    Serial_Init();                                                  //第一个串口初始化
        Second_Serial_Port_Initial();
        Wait_CREG();
    Second_AT_ERROR("AT+CGDCONT=1,\"IP\",\"CMNET\"",2);
    Second_AT_ERROR("AT%ETCPIP=\"\",\"\"",2);
    Second_AT_ERROR("AT%IPOPEN=\"TCP\",\"180.109.83.195\",1234",4);
    Second_AT_ERROR("AT%IOMODE=0,1,1",2);
   

   while(1){
   // if(flag==1){
      strcpy(p,gps);
      strcat(q1,p);
      strcat(q1,q2);
      Second_AT_ERROR(q1,1);
      strcpy(q1,"AT%IPSEND=\"");
      Delay_ms(1000);
          Yellow_LED=1;
          if(i<3)
{
   EA=0;
}       
       // }
}
void Timer0(void) interrupt 1
{
        TR0 = 0;                                                                        //停止定时器0
        Count_time++;
        if(Count_time >= 60000)                                       
                {                                       
                        Count_time = 0;
                }
        if(Timer0_Start == 1)
                Times++;
        if(Times > (20*shijian))
        {
                Timer0_Start = 0;
                Times = 0;
        }
        TH0 = 0x4C;                                                                        //设置溢出一次为50ms
        TL0 = 0x00;
        TR0 = 1;                                                                        //开启定时器0
}

/*********************************串口1中断处理函数******************************/

void Serial_Int(void) interrupt 4
{       
        ES = 0;                                                                               //关串口中断,防止中断嵌套
        if(TI)                                                                               //如果是发送中断,则不做任何处理
        {
                TI = 0;                                                                //清除发送中断标志位
        }
        if(RI)                                                                               //如果是接送中断,则进行处理
        {       
                RI = 0;                                                                 //清除接收中断标志位
                Buf_First_Serial = SBUF;        //将接收到的字符串存到缓存中
                First_Int++;                                        //缓存指针向后移动
                if(First_Int > Buf1_Max)                               //如果缓存满,将缓存指针指向缓存的首地址
                {
                        First_Int = 0;
                }
        }
        ES = 1;                                                                               //开启串口中断
}

void Second_Serial_Int(void) interrupt 8 {
Yellow_LED=0;       
//k=S2CON;
// k=k&0x01;
//if(k==1){
S2CON=S2CON&0xfe;//RI=0;
   //gps='k';
// for(i=0;i<=30;i++){
gps=S2BUF;
i++;       
//}
// IE2 = 0x00;
//if(gps=='$'){
//          i=0;
       // flag=1;
       // Green_LED = 0;
          //IE2=0;
//}
//}
//elsei=0;
}


关键就是串口1与串口2的中断怎么控制?数据存在gps[]里,我感觉就是串口2的问题,串口1应该木有问题,各位大神,求指教呢。。。

s13952537453 发表于 2012-3-25 21:07:55

有人知道吗?帮着顶顶啊。。。。。

s13952537453 发表于 2012-3-25 22:28:44

哎             ,焦急等待中,翘首以盼。。。
                           

s13952537453 发表于 2012-3-26 14:23:39

木有人会吗? 会的帮帮我啊都快绝望了
页: [1]
查看完整版本: 新人求助:关于51双串口实现收发的问题。。。