搜索
bottom↓
回复: 7

关于GTM900B的问题,单片机无法收到GTM900B的回应

[复制链接]

出0入0汤圆

发表于 2009-8-9 13:07:36 | 显示全部楼层 |阅读模式
函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//             串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{   
unsigned char m;                      //初始化串行口和波特率发生器
SCON =0x50;           //选择串口工作方式1,打开接收允许
TMOD =0x20;           //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfd;            //实现波特率9600(系统时钟11.0592MHZ)
PCON = 0x80;
TR1 =1;               //启动定时器T1
ET1 =0;
ES=1;                 //允许串行口中断
PS=1;                 //设计串行口中断优先级
EA =1; //单片机中断允许
}
//------------------------------------------------------------
void com_send_char(unsigned char ch)
{
   SBUF=ch;
   while(!TI);
    TI=0;
}
void com_send_string(unsigned char *str,unsigned str_len)
{
   
unsigned int k= 0 ;  
do  
{  
com_send_char(*(str + k));  
k++;  
} while (k < str_len);   
  
  }
//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: com_interrup()串口接收中断、不中断处理函数
// 函数功能: 接收2位数据到数据缓冲区
//--------------------------------------------------------------------------------------------------
void  received()
{unsigned char n;
    while(RI)
     { RI=0;
  n=(*RECEIVR_buffer);
  n=SBUF;
      RECEIVR_buffer++;
}
}  

//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: 清除缓冲区
// 函数功能:清除接收到的i位数据
//---------------------------------------------------------------
void clr(unsigned char *m,unsigned int i)  
  {
  unsigned int k;
   for(k=0;k<=i;k++)
{
m=0xff;
m++;
}
   }
   void main(void)
{
unsigned char *p;
UART_init();        //初始化串口
//首先发送一次数据作为测试   
L1: com_send_string("AT\r\n",strlen("AT\r\n"));   
//com_send_string("AT\r\n",strlen(RECEIVR_buffer));  只发一个字母     
     delay(10000);
received();
     p=strstr(RECEIVR_buffer,"OK")  ;
if (p=NULL)
{ goto L1;  
}
else  
{
     clr(RECEIVR_buffer,8);
}
      //设置短信方式为TEXT模式
L2: com_send_string("AT+CMGF=1\r\n",strlen("AT+CMGF=1\r\n"));   
  delay(10000);
  received();
    p=strstr(RECEIVR_buffer,"OK")  ;
if (p=NULL)
{goto L2; }
else  
{
clr(RECEIVR_buffer,8) ;
}
   
     //设置短信接收方
L3:com_send_string("AT+CMGS=",strlen("AT+CMGS="))  ;  
com_send_char(0X22);
com_send_string("13814426338",strlen("13814426338")) ;
com_send_char(0X22);    //发冒号给串口
com_send_string("\r\n",strlen("\r\n"));
  delay(1000);
  received();
    p=strstr(RECEIVR_buffer,">")  ;
if (p=NULL)
{goto L3; }
else  
{
  clr(RECEIVR_buffer,8) ;
}
   //设置短信内容
L4: com_send_string("hello",strlen("hello")) ;
   com_send_char(0X1A);
   delay(1000);
   received();
     p=strstr(RECEIVR_buffer,"OK")  ;
if (p!=NULL)
{ goto L4; }
else  
{
  clr(RECEIVR_buffer,8) ;
}
   
   while(1)
  {;}
   
}
请高手看看给指点
单片机无法收到GTM900B的回应

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-8-9 13:42:19 | 显示全部楼层
调试程序还是一步一步来吧!
1.先让单片机和PC上的串口调试。确定单片机串口发送数据和接收数据程序已经调试成功。
2.再和GSM模块连接。确定GSM模块能正常开机。(不妨给模块拨个电话,听听模块开机成功没)
3.确定发送AT,能收到OK。

出0入0汤圆

发表于 2009-8-9 16:31:01 | 显示全部楼层
楼主,你这是直接发送的字符串啊??我用串口调试,前面发送AT,可是我串口助手收到的怎么是"A",而不是“AT”呢??
你确定模块收到你的指令了吗?而且能够执行你的指令?比如可以打电话?
还有,我的一个猜测哈,模块返回的不一定就是这俩字符“OK”吧?是不是还可能还有回车呢??

出0入0汤圆

发表于 2009-8-9 17:22:25 | 显示全部楼层
但是这样com_send_string("A T\r\n",strlen("A T\r\n"));AT中间加一个空格就可以收到完整的“AT”了,为啥呢??
楼主有什么进展没有啊?

出0入0汤圆

 楼主| 发表于 2009-9-1 14:17:01 | 显示全部楼层
先回复1楼:我是按照顺序来的,和PC通讯无误后才往模块的,谢谢

2楼:我觉得程序ok,没查出问题
这几天耽搁了

出0入0汤圆

 楼主| 发表于 2011-5-4 22:00:10 | 显示全部楼层
用单片机控制GTM900b做短信处理的 ,单片机采用内部RC 8M振荡
两者的收发端都是通过MAX232芯片处理的,单片机是MEGA16,现在问题是各自与电脑通信都OK
现在监听到单片机发送“AT”,模块一直回复“ERROR‘
以为是波特率问题。可是改动波特率仍然不对

出0入0汤圆

发表于 2011-5-5 10:19:12 | 显示全部楼层
都快两年了,大哥还没有调试出来啊。。。

if(p=NULL) 是不是这个地方出错了?
感觉应该是if(p==NULL),不知道是不是你的笔误。

出0入0汤圆

 楼主| 发表于 2011-5-5 11:09:50 | 显示全部楼层
回复【6楼】jnhoodlum 虎子
-----------------------------------------------------------------------

之前转去做别的了,上次的很早调试OK了,
最近换又出来了问题
以为有不同的地方,所以提出来
发现很怪异的现象:发AT回复ERROR,但其他命令OK,仍然可以短信和拨打电话
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-3 04:02

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

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