mybigapple 发表于 2014-11-15 22:29:32

单片机控制GSM模块接电话接通就断,问题在哪?

本帖最后由 mybigapple 于 2014-11-15 22:46 编辑

用51单片机(89S51或89S52)控制GSM模块SIM900A接听电话,如下程序接通响铃2次后自动接通,但接通就断线,
这时观察模块上的指示灯显示在重新联网,请大师帮助看看软件方面的问题在哪?

说一下硬件:电源部分是5V,是300MA的手机充电器,GSM模块供电安着要求经过1N4007二极管降压供给,同时模块
电源端并联1000UF/50v电解电容,提供联网时的瞬间大电流。自己感觉电源功率小了,后续准备找一个大一点电源试一下。

#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1LED=P1^0;//指示灯0
uchar code AT[]={"AT"};
uchar code ATA[]={"ATA"};
//************************串口初始化***********************//
init_chuankou()//串口初始化
{
   SCON=0X50;
   TMOD=0X20;
   TH1=0XFD;
   TL1=0XFD;//波特率为9600
   TR1=1;//开启定时器1
   ES=1;//串口中断开

}
//***********************延时*****************************//
delay_Xms(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=113;j>0;j--);
}
//***********************串口中断************************//
serial_init() interrupt 4
{if(RI==1)//是否发生接受中断
{
   RI=0;//清除RI标志,准备下次接受
}
else TI=0;
}
//**************************发送单个字符****************//
Print_Char(uchar ch)
{
SBUF = ch;
while(TI == 0); //等待发送完毕
TI = 0;
}
//**************************发送字符串****************//
Print_Str(uchar * str,uint len)
{
       while(len--)
{
Print_Char(*str++);
}
}
//**************************发"AT"的函数***************//
void GSM_AT()
{
Print_Str(AT,2);
Print_Char('\r'); //以回车作为结束符号
ES=1;
delay_Xms(1000); //延时
}
//***********************接电话程序*******************//
void phone_Answer()
{
   Print_Str(ATA,3);
   Print_Char('\r');
   ES=1;
   delay_Xms(2000);
}
//*****************主程序******************************//

void main()
{
D1LED=0;//指示灯
init_chuankou(); //串口初始化
while(1)
{
GSM_AT();//发 At
delay_Xms(500);
delay_Xms(500);
D1LED=1; //打开led
delay_Xms(1000);
delay_Xms(5000);
phone_Answer();
D1LED=0;
}
}

spacekey 发表于 2014-11-15 22:31:19

电源供电不足

rainyuoko 发表于 2014-11-15 23:01:09

电流太小了,换个2a电源试试

afeionline 发表于 2014-11-15 23:13:32

自古二楼出真相

tarzar 发表于 2014-11-15 23:16:20

个人感觉肯定是电源问题,通话时的电流会比较平常高很多,特别是信号差的情况下。

就在今天 发表于 2014-11-16 00:52:44

肯定是电源不好,峰值达到2A的

亲爱的混蛋 发表于 2014-11-16 01:06:48

按描述,电源问题。这种模块供电电流都比较大

cumt_123456 发表于 2014-11-16 09:31:34

应该是电源不行,楼上各位都说了。{:lol:}

daicp 发表于 2014-11-16 09:33:52

换个3A的电源吧

mybigapple 发表于 2014-11-16 19:56:20

谢谢大家的帮助。刚用500MA的电源试了下,不再断线了。奇了怪了,一开始这300MA的电源还接通几次也没掉线,后来几次试验就是不行。
好了,断线问题解决了。
软件问题:现在不想用延时来自动应答,想改用判断来电的RING字符次数自动应答,不知大师可否提供几行代码参考,谢谢。

mybigapple 发表于 2014-11-18 21:35:22

本帖最后由 mybigapple 于 2014-11-18 21:37 编辑

用发ATS0命令也得到了同样的效果,而且可以精确得获得需要的响铃次数,但用判断来电RING字符方式仍没有方法。{:cry:} {:cry:}
页: [1]
查看完整版本: 单片机控制GSM模块接电话接通就断,问题在哪?