OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6529|回复: 10

紧急!我买了sim900a模块,别人验证过的程序为什么无法实现短信发送?

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-5-23
在线时间
0 小时
发表于 2014-5-23 16:47:46 | 显示全部楼层 |阅读模式
5金钱
单片机控制gsm模块发送短信
我现在不知道是程序的问题还是硬件连接的问题。。。
希望有好心人帮忙,谢谢了!



#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit Send_SMS_PDU_key=P3^5;     //发PDU格式短信按键
sbit LED0=P1^0;
sbit LED1=P1^1;
sbit LED2=P1^2;
sbit LED3=P1^3;



#define MAXCHAR 81
uchar  aa[MAXCHAR];
code uchar ATE0[]="ATE0\r\n";
code uchar CREG_CMD[]="AT+CREG?\r\n";
code uchar SMS_send[]="AT+CMGS=27\r\n";
code uchar ATCN[]="AT+CNMI=2,1\r\n";
code uchar CMGF[]="AT+CMGF=0\r\n";
code uchar CMGR[12]="AT+CMGR=1\r\n";
code uchar CMGD[12]="AT+CMGD=1\r\n";

/*-----------------------------------------------------------------------
1.如果你的晶振是11.0592M
只需要修改下面的号码就可以了,给成你手上拿着的手机的号码


修改方法   在下面这段字符中找到 5129021411F5 
 
 其实5129021411F5 --> 15922041115
18622044083 8126924480F3


 看明白了吗  电话是两位两位颠倒 将您手上的手机号码替换即可
-----------------------------------------------------------------------*/
//uchar  code Sms2_Pdu[]="0891683108200505F011000D91685160227369F10008000C975E6CD551654FB58F665185";
  uchar  code Sms2_Pdu[]="0891683108200505F011000D91688110088386F50008000C975E6CD551654FB58F665185";
/*-----------------------------------------------------------------------
1.如果你的晶振不是11.0592M

则修改 Ini_UART 函数 波特率 9600


其他都不用动

-----------------------------------------------------------------------*/

uchar a,j=0,flag=0;

void delay(uint ms)// 延时子程序
{
    uchar i;
    while(ms--)
    {
        for(i=0;i<120;i++);
    }
}


/***********************************************************
函数名称:Print_Char
函数功能:发送单个字符
          入口参数:ch      出口参数:无
***********************************************************/
Print_Char(uchar ch)//发送单个字符
{
    SBUF=ch; //送入缓冲区
    while(TI!=1); //等待发送完毕
    TI=0; //软件清零
}

/***********************************************************
函数名称:Print_Str
函数功能:发送字符串
          入口参数:*str    出口参数:无
***********************************************************/
Print_Str(uchar *str)//发送字符串
{

    while(*str!='\0')
    {
        Print_Char(*str);
        delay(2);
        str++;
    }

}

/***********************************************************
函数名称:Ini_UART
函数功能:串口初始化、定时器初始化
          入口参数:无     出口参数:无
***********************************************************/
Ini_UART(void)//串口初始化、定时器初始化
{
    SCON = 0x50 ;  //SCON: serail mode 1, 8-bit UART, enable ucvr
    //UART为模式1,8位数据,允许接收
    TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
    //定时器1为模式2,8位自动重装
    PCON |= 0x80 ; //SMOD=1;
    TH1 = 0xFD ;   //Baud:19200 fosc="11".0592MHz fa
    TL1=0xFD;
    IE |= 0x90 ;     //Enable Serial Interrupt  
    TR1 = 1 ;       // timer 1 run
    TI=1;
    ES=1;
}

void clearBuff(void)
{
    for(j=0;j<MAXCHAR;j++)
    {
        aa[j]=0x00;
    }
    j=0;
}

void led(int i)
{
    P0 |= i;
    delay(20);
    P0 &= ~i;
    delay(20);


    P0 |= i;
 
    delay(20);
    P0 &= ~i;  
}



void AT(void)
{

    while(1)
    {
        Print_Str(ATE0);
        delay(50);

        Print_Str(ATCN);
        delay(50);

        Print_Str(CMGF);
        delay(100);

        clearBuff();
        Print_Str(CREG_CMD);
        delay(50);


        if(((aa[9]=='0')&&(aa[11]=='1'))||((aa[9]=='0')&&(aa[11]=='5')))
        {
            clearBuff();
            led(0x02);
            break;
        }
        else
        {
            clearBuff();

            led(0x01);
            delay(50);
        }
    }
}


void main()
{

    Ini_UART();    //初始化串口
    AT();   //初始化模块
    delay(10);

    Print_Str(SMS_send);  //发送中文短信
    delay(500);
    led(0x04);

    Print_Str(Sms2_Pdu);  //发短信内容
    delay(500);
    led(0x08);

    Print_Char(0x1A);      //发送结束符号
delay(500);

Print_Str("ATD15952050508;\r\n"); //打电话

    while(1);
}

void ser() interrupt 4
{



    if(RI==1)
    {  aa[j]=SBUF;//命令存到命令数组

        RI=0; //软件清除接收中断
        j++;
    }


}

最佳答案

查看完整内容[请看2#楼]

回复【2楼】正点原子: --------------------------------- 已经让我们学校的大神看过了,是发送AT指令的延时太短~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-5-23
在线时间
0 小时
 楼主| 发表于 2014-5-23 16:47:47 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
已经让我们学校的大神看过了,是发送AT指令的延时太短~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-23 23:01:52 | 显示全部楼层
说明你还得查代码...
先用串口助手,看看数据是否正常吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

18

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2013-8-13
在线时间
0 小时
发表于 2014-5-24 22:37:16 | 显示全部楼层
你看看串口的波特率。原子哥的波特率是115200其他的有一些是9600
要么不做,要么做到最好。。
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-4-28
在线时间
0 小时
发表于 2015-4-28 19:59:11 | 显示全部楼层
楼主  能共享下代码吗?我也正在搞这个,基于51的控制SIM900A  GSM的例程找不到啊~~~~帮帮忙啦~~~
大家共勉~
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-4-28
在线时间
0 小时
发表于 2015-4-28 20:02:23 | 显示全部楼层
还有就是  那个号码转换的 那是转成什么码了??怎么根据转后的码都找不到原码了
大家共勉~
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-4-28
在线时间
0 小时
发表于 2015-4-28 20:03:20 | 显示全部楼层
你用的是SIM900A这个的GSM模块吗?
大家共勉~
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-4-28
在线时间
0 小时
发表于 2015-4-28 20:04:13 | 显示全部楼层
帮帮忙呀~~~~~拜托了~
大家共勉~
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-5-24
在线时间
0 小时
发表于 2015-5-25 16:32:52 | 显示全部楼层
回复【8楼】XWQ_123:
---------------------------------
兄弟,整好了没?
回复

使用道具 举报

5

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2015-8-10
在线时间
49 小时
发表于 2015-9-22 23:05:27 | 显示全部楼层
回复【4楼】小深深:
---------------------------------
我的波特率是115200,我就是在原子哥这买的sim900A模块
回复

使用道具 举报

5

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2015-8-10
在线时间
49 小时
发表于 2015-9-22 23:06:00 | 显示全部楼层
回复【4楼】小深深:
---------------------------------
sorry,发错了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 14:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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