AT89S51单片机控制GSM模块(M22)发送短信程序!~!~!~!

xiaoyi46 2007-04-07 02:04:57
自己改的AT89S51单片机控制GSM模块(M22)发送短信程序,在Keil上编译没错,但还未试过烧入片内运行。。
大家看看,这个程序可行否? 还有什么错误的地方?
希望搞过GSM的朋友多提点意见,让程序完善起来!
(偶弄GSM也一段时间啦,希望有兴趣的朋友加我QQ:30651279多多交流)

/***********************************************************
文件名称:main.c
作 者:xiaoyi46 QQ:30651279
说 明:控制发送SMS信息的C51程序[GSM模块(M22)通过串口与单片机相连]
***********************************************************/

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char

//**********函数定义**********//
void main(void); //主函数
void Ini_UART(void); //串口初始化
void Delay(void); //延时
void CMGF(void); //设置发送数据为TXET格式
void CMGS(void); //设置目的手机号码
void SEND(void); //发送字符串


/***********************************************************
函数名称:main
函数功能:主函数 入口参数:无 出口参数:无
***********************************************************/
void main(void)
{
Ini_UART(); //串口初始化

CMGF(); //设置发送数据为TXET格式
Delay();

CMGS(); //设置目的手机号码
Delay();

SEND();
Delay();
}


/***********************************************************
函数名称:Ini_UART
函数功能:串口初始化设置 入口参数:无 出口参数:无
***********************************************************/
void Ini_UART(void)
{
SCON = 0x50; //UART方式1:8位UART; REN=1:允许接收
PCON = 0x00; //SMOD=0:波特率不加倍

TMOD = 0x20; //T1方式2,用于UART波特率

TH1 = 0xFD;
TL1 = 0xFD; //UART波特率设置:9600
TR1 = 1;
}


/***********************************************************
函数名称:Delay1ms
函数功能:延时 入口参数:无 出口参数:无
***********************************************************/
void Delay(void)
{
uint i,j;

for (i=0; i<10; i++)
{
for(j=0; j<1000; j++);
}
}


/***********************************************************
函数名称:CMGF
函数功能:设置发送数据为TXET格式 入口参数:无 出口参数:无
***********************************************************/
void CMGF(void)
{
uchar i = 0;
uchar code mode[]="AT+CMGF=1\r"; // \r即 <CR> 回车

while( mode[i] != '\0');
{
SBUF = mode[i];
while(TI == 0);
TI = 0;
i++;
}
}


/***********************************************************
函数名称:CMGS
函数功能:设置目的SIM卡号码 入口参数:无 出口参数:无
***********************************************************/
void CMGS(void)
{
uchar i = 0;
uchar code phone[]="AT+CMGS=\"13821947411\"\r"; // \"即“

while( phone[i] != '\0');
{
SBUF = phone[i];
while(TI == 0);
TI = 0;
i++;
}
}


/***********************************************************
函数名称:SEND
函数功能:将GPS数据送入SBUF 入口参数:无 出口参数:无
***********************************************************/
void SEND(void)
{
uchar i = 0;
uchar code sms[] = "Hello\x01a";//sms为欲发送的字符串数组,\x01a即Ctrl+Z

while( sms[i] != '\0');
{
SBUF = sms[i];
while(TI == 0);
TI = 0;
i++;
}
}
...全文
4265 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
lan120576664 2011-11-17
  • 打赏
  • 举报
回复
做非TEXT格式的,学习了
某某 2011-11-15
  • 打赏
  • 举报
回复
学习了!支持下。
zhong52111 2011-04-28
  • 打赏
  • 举报
回复
static void SendSMS2Gsm(unsigned char* pMobileCode, unsigned char* pData, unsigned char Len)
{
unsigned char Index = 0;
memcpy(MyData+Index, "AT+CMGS=", 8);
Index += 8;
memcpy(MyData+Index, pMobileCode, 11);
Index += 11;
memcpy(MyData+Index, "\r", 2);
Index += 2;
Uart1SendAscIIStr(MyData, Index);

SendCmdStr(pData, Len);

Uart1SendByte(0x1A);
}
我我做过来的。我没的接受OK来判断。指示简单的延时来的。发送短信之前对模块设置。

Uart1SendAscIIStr("AT\r", 4);

Uart1SendAscIIStr("AT+CMGF=1\r", 11);

Uart1SendAscIIStr("AT+CNMI=2,2,0,0,0\r", 19);

Uart1SendAscIIStr("AT+CMGD=1,4\r", 13);
0深水蓝0 2011-04-27
  • 打赏
  • 举报
回复
最好在发送指令后等待串口传回来的“OK”关键字,因为每一条指令成功执行之后,TC35会在串口返回一串字符,而都是以“OK”结尾。

另外发送短信的命令发送出去之后,建议延时3到5秒在发送下一条命令,我试过在网络不好的情况下,一条短信真可能要5秒钟才发送出去,而发送过程中是不会相应其他命令的。

这也是为什么我建议每发一条指令到TC35后都等待串口返回“OK”关键字。
xiaoyi46 2011-04-26
  • 打赏
  • 举报
回复
各位读者你们好!我是该文章的主人 小章,这是我大学毕业设计时写的。如果该文章对您有帮助,敬请COPY参考。不过请别再加我QQ了,我现在工作已不涉及GSM有4、5年,没有+不便提供更多的交流和资料。谢谢!
xiaoyi46 2011-04-26
  • 打赏
  • 举报
回复
各位读者你们好!我是该文章的主人 小章,这是我大学毕业设计时写的。如果该文章对您有帮助,敬请COPY参考。不过请别再加我QQ了,我现在工作已不涉及GSM有4、5年,没有+不便提供更多的交流和资料。谢谢!
freetime-wxj 2010-11-25
  • 打赏
  • 举报
回复
硬件连接的教程有没???
cxdnxp 2010-11-24
  • 打赏
  • 举报
回复
借鉴借鉴。
sunny847257 2010-11-22
  • 打赏
  • 举报
回复
》》》》》》》》
chen_hua120 2010-11-22
  • 打赏
  • 举报
回复
谁有51单片机控制GSM模块收发短信的设计方法和源代码?求救。。。。。各位高手请您伸出援助之手,不胜感激。为GSM失眠很久的无助女孩!!邮箱:860829hua@sina.comQQ:1164676334
谢谢!!
weidao1210 2010-11-22
  • 打赏
  • 举报
回复
学习中,!
cy330206 2010-07-13
  • 打赏
  • 举报
回复
楼主可以看看具体的产品资料啊
lisuo962237 2010-07-12
  • 打赏
  • 举报
回复
我做过wavecom模块的通信程序,可提供原代码和线路图,可以把程序下到模块中,无需电路外接单片机 qq:549096954
StudyKaKa 2010-02-21
  • 打赏
  • 举报
回复
楼主那样做好无意义,不过还是鼓励一下,顶上去。
lyh3381181 2010-02-19
  • 打赏
  • 举报
回复
我也在做类似的项目,不过如果不是收发中文短信,只是用来控制,可以用TEXT模式比较简单。
lan120576664 2010-01-16
  • 打赏
  • 举报
回复
学习学习
lin0119 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 zhanzongru 的回复:]
这个程序要是能正确运行,发出短信,我情愿赔钱!
[/Quote]
呵呵...
小赌移情 2010-01-16
  • 打赏
  • 举报
回复
这个程序要是能正确运行,发出短信,我情愿赔钱!
h07021040410 2010-01-15
  • 打赏
  • 举报
回复
短信息中心号码,没有设置啊
vetree 2009-03-05
  • 打赏
  • 举报
回复
有没有收短信的啊。m22收短信的时候。 工作的过程是怎样的?怎样同过串口把信息传入单片机?急用,求教!
加载更多回复(25)

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧