OpenEdv-开源电子网

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

单片机控制GSM模块问题。跪求大神帮助。

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-5-24
在线时间
0 小时
发表于 2015-5-24 21:31:31 | 显示全部楼层 |阅读模式
5金钱
用51单片机控制收发短信,以及用GSM模块查询基站信息AT+CREG?查询指令即过要能够把返回的数值发送出去。STC89C52+SIM900A

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-24 22:37:28 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2014-4-14
在线时间
104 小时
发表于 2015-5-25 09:08:33 | 显示全部楼层
自己写呗,51串口发字符串,大学单片机基本课程+数据手册罢了,书不看,数据手册不看,代码不写,上来就找人要代码,我就呵呵了
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-5-24
在线时间
0 小时
 楼主| 发表于 2015-5-25 11:57:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
#include "reg52.h"
#include <string.h>
#include <stdio.h>

#include "intrins.h"

#define BufMax  10
#define uchar unsigned char
#define uint  unsigned int

uchar RecDat[10];
uchar TxData[10];
uchar uart_i=0;

void UartInit()
{
SCON=0x50;//SCON:模式1,8-bitUART,使能接收
TMOD=0x20;//TMOD:timer1,mode2,
TH1=0xFD;//TH1:reload value for 9600baud @11.0592MHz
TL1=0XFD;

TR1=1;//TR1:timer1run
EA=1;//打开总中断
ES=1;//打开串口中断
}

/*------------------------------------------------
                    发送一个字节
------------------------------------------------*/
void UartSendByte(uchar dat)
{
ES=0;
SBUF=dat;
while(!TI);   //  while(TI==0)
TI=0;
ES=1;
}
/*------------------------------------------------
                    发送一个字符串
------------------------------------------------*/
void UartSendStr(uchar *s)
{
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
UartSendByte(*s);
s++;

}

void delay_us(uint t) //延时,us,ds18b20使用
{
while(t--);
}

void delay_ms(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}


//延时函数大概是1s钟,
void delay_sec(uint sec)
{
uint i , j= 0;

for(i=0; i<sec; i++)
{
for(j=0; j><65535; j++)
{
}
}
}

void ClrBuf()
{
//    uchar i;
for(uart_i=0;uart_i<BufMax;uart_i++)
    RecDat[uart_i]=0;
uart_i=0;
}

void display(uchar *p)
{

uchar TxData_i=0;
while(*p)
{
TxData[TxData_i]=*p;
TxData_i++;
p++;
}
ClrBuf();
}



uchar num[] = "ATD13500314655;\r\n";


void SendMessage(uchar *sms_text)
{
uchar i = 0;

UartSendStr("AT+CSCS=\"GSM\"\r\n");
delay_sec(3);//延时3秒
UartSendStr("AT+CMGF=1\r\n");
delay_sec(3);//延时3秒
UartSendStr("AT+CMGS=\"13350384234\"\r\n");//此处修改为对方的电话号
delay_sec(5);//延时3秒
UartSendStr(sms_text);//修改短信内容
UartSendByte(0x1a);
delay_sec(3);//延时3秒
}

void jznchaxun()
{  
UartSendStr("ATE1\r\n");
delay_sec(10);

UartSendStr("AT+CREG?\r\n");
delay_sec(20);//延时20秒
}


void hone()
{
uchar i = 0;

delay_sec(5); //等待4-5秒钟
UartSendStr("ATD13350384234;\r\n");
delay_sec(6);//延时20秒

delay_sec(1);//延时5秒
}


void readnew()
{
if(strstr(RecDat,"+CMTI")!=NULL)
{
ClrBuf();
UartSendStr("AT+CMGF=1\r\n") ;
delay_sec(1);
ClrBuf();
UartSendStr("AT+CMGR=1\r\n");
delay_sec(1);
if(strstr(RecDat,"k11")!=NULL)
P3|=0xf0;
}
}
void main()
{
UartInit();
jznchaxun();
SendMessage(RecDat);
//readnew();
Phone();
while(1);
}



void Serial() interrupt 4  //串口中断处理
{
ES=0;  //关中断
if(TI==1)  //发送
{
TI=0;
}
else  //接收,处理
{
RI=0;
RecDat[uart_i]=SBUF;
if(uart_i><BufMax)
    uart_i++;
else
    uart_i=0;
}
ES=1;
}


其中发送lac值和cid值 总是发送的空值 ,要不就是错误>
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-5-24
在线时间
0 小时
 楼主| 发表于 2015-5-25 12:02:40 | 显示全部楼层
回复【3楼】翼间:
---------------------------------
兄弟是自己一直没调试好,所以 没放代码出来,请见谅。
回复

使用道具 举报

1

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2014-4-14
在线时间
104 小时
发表于 2015-5-25 17:18:19 | 显示全部楼层
回复【5楼】ptpfree:
---------------------------------
也就是AT指令已通?
回复

使用道具 举报

1

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2014-4-14
在线时间
104 小时
发表于 2015-5-25 17:22:38 | 显示全部楼层
AT已通的话,由于51没法断点调试,我给你的建议就是在SIM900和单片机之间并一个TTL的串口转232连到电脑上去,第一看单片机发到SIM900的数据是不是你想发的,第二看SIM900回的数据是什么,第三,方便随时取代单片机给SIM900发指令。
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-5-24
在线时间
0 小时
 楼主| 发表于 2015-5-25 22:20:27 | 显示全部楼层
用电脑串口调试的时候返回 的是
AT+CREG?

+CREG:1,1,“8310”,”2BC9“

OK
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-5-24
在线时间
0 小时
 楼主| 发表于 2015-5-25 22:21:09 | 显示全部楼层
回复【7楼】翼间:
---------------------------------
用电脑串口调试的时候返回 的是 
AT+CREG? 

+CREG:1,1,“8310”,”2BC9“ 

OK
但用单片机发送出来的就是>4234
回复

使用道具 举报

1

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2014-4-14
在线时间
104 小时
发表于 2015-5-27 10:59:17 | 显示全部楼层
回复【9楼】ptpfree:
---------------------------------
那看单片机发出来的和串口发出来的东西确定一样么?用十六进制看,某些ASCII字符在文本模式下看不见。
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-5-24
在线时间
0 小时
 楼主| 发表于 2015-5-27 13:50:53 | 显示全部楼层
回复【10楼】翼间:
---------------------------------
谢了哈,我再试试。
回复

使用道具 举报

6

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
454
金钱
454
注册时间
2015-11-29
在线时间
50 小时
发表于 2016-4-9 21:10:44 | 显示全部楼层
能读取到短信 内容吗 我也有在搞 收不到短信内容
每个人都是一个传奇每个传奇的背后都有一段精彩的故事
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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