搜索
bottom↓
回复: 2

利用gprs接收数据

[复制链接]

出0入0汤圆

发表于 2010-9-15 22:29:17 | 显示全部楼层 |阅读模式
本人想利用单片机控制gsm模块通过串口中断接收发送端发过来的数据,下面是自己写的串口中断接收程序
void uart(void) interrupt 4
{
    unsigned char tmp;
        unsigned int i,j;
    if(RI==1)
  {
     tmp=SBUF;
       if(tmp=='+')           //“+”开头?
             {
                   mode=1;
                  }
           else if(mode==1)
                        {
                //命令种类判断
              cmd[byte_count]=tmp;            //接收字符放入类型缓存
                if(byte_count>=4)
                                {                //如果类型数据接收完毕,判断类型
                    if(cmd[0]=='C')           //头是“+CMTI:”?有新短信到来的标志
                                        {
                        if(cmd[1]=='M')
                                                {
                            if(cmd[2]=='T')
                                                        {
                                if(cmd[3]=='I')
                                                                {
                                    if(cmd[4]==':')
                                                                        {
                                        mode=3;
                                        byte_count=0;
                                               
                                    }
                                }
                              
                            }
                                                  else if(cmd[2]=='G')           //头是“+CMGR:”读短信
                                                        {
                                if(cmd[3]=='R')
                                                                {
                                    if(cmd[4]==':')
                                                                        {
                                        mode=2;
                                        byte_count=0;
                                                                                i=0;
                                                                                j=0;
                                        
                                    }
                                }
                              
                            }
                       
                        }
                    }
                }                 
            }          
            else if(mode==2)                 //接收数据处理
                        {  
                             
                                   if(byte_count>37&&byte_count<76)           //38字节开始才是数据,丢弃前面的数据
                                    {
                                         if(tmp==0x30) tmp='0';
                                         else if(tmp==0x31) tmp='1';
                                         else if(tmp==0x32) tmp='2';
                                         else if(tmp==0x33) tmp='3';
                                         else if(tmp==0x34) tmp='4';
                                         else if(tmp==0x35) tmp='5';
                                         else if(tmp==0x36) tmp='6';
                                         else if(tmp==0x37) tmp='7';
                                         else if(tmp==0x38) tmp='8';
                                         else if(tmp==0x39) tmp='9';
                                         else if(tmp==0x2E) tmp='.';                 
                                          if(i<9)                                //纬度数据接收
                                            {
                                                 WD=tmp;
                                                 i++;
                                                  
                                                }
                                         else if(j<10)                 //经度数据接收
                                           {
                                             JD[j]=tmp;
                                                 j++;
                                           }
                                          
                                        }

                
         }
                else if(mode==3)        //是“+CMTI”开头吗?是,提取接收的短信号
                  {
                     if(byte_count==6)
                            msnum=tmp;
                  }                              
      byte_count++;        //接收数位加1
    }                            
RI=0;
}         

但是经开发板调试,没用接收到数据,自己是菜鸟,希望熟悉AT指令牛人指点指点。

出0入0汤圆

发表于 2010-9-29 17:11:15 | 显示全部楼层
用串口调试助手监视一下数据就知道了

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-11 03:18

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

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