搜索
bottom↓
回复: 3

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

[复制链接]

出0入0汤圆

发表于 2012-3-25 19:33:16 | 显示全部楼层 |阅读模式
单片机用的是STC12C5A32S2,其中RXD1与TXD1与GPRS模块相连,实现往GPRS发送AT指令的功能,而RXD2与TXD2与GPS模块相连,实现接收GPS数据的功能。

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

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

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

main程序如下:
void main(void)
{       
    uchar a[100];
    uchar *p=a;
    uchar b1[20]="AT%IPSEND=\"";
    uchar *q1=b1;
    uchar b2[3]="\"";
    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[First_Int] = 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[0]='k';
// for(i=0;i<=30;i++){
  gps[i]=S2BUF;
  i++;         
  //}
// IE2 = 0x00;
  //if(gps[0]=='$'){
  //          i=0;
         // flag=1;
         // Green_LED = 0;
          //IE2=0;
//}
  //}
  //else  i=0;
}


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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-3-25 21:07:55 | 显示全部楼层
有人知道吗?帮着顶顶啊。。。。。

出0入0汤圆

 楼主| 发表于 2012-3-25 22:28:44 | 显示全部楼层
哎             ,焦急等待中,翘首以盼。。。
                           

出0入0汤圆

 楼主| 发表于 2012-3-26 14:23:39 | 显示全部楼层
木有人会吗? 会的帮帮我啊  都快绝望了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-29 04:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表