AT89S51单片机控制GSM模块(M22)发送短信程序!~!~!~!
自己改的AT89S51单片机控制GSM模块(M22)发送短信程序,在Keil上编译没错,但还未试过烧入片内运行。。
大家看看,这个程序可行否? 还有什么错误的地方?
希望搞过GSM的朋友多提点意见,让程序完善起来!
(偶弄GSM也一段时间啦,希望有兴趣的朋友加我QQ:30651279多多交流)
/***********************************************************
文件名称:main.c
作 者:xiaoyi46
说 明:控制发送SMS信息的C51程序[GSM模块(M22)通过串口与单片机相连]
***********************************************************/
#include
#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即 回车
while( mode != '\0');
{
SBUF = mode;
while(TI == 0);
TI = 0;
i++;
}
}
/***********************************************************
函数名称:CMGS
函数功能:设置目的SIM卡号码 入口参数:无 出口参数:无
***********************************************************/
void CMGS(void)
{
uchar i = 0;
uchar code phone[]="AT+CMGS=\"13821947411\"\r"; // \"即“
while( phone != '\0');
{
SBUF = phone;
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 != '\0');
{
SBUF = sms;
while(TI == 0);
TI = 0;
i++;
}
}
最好还是坐一下gsm模块的回应信号的确认,不然很有可能模块起不来的哦!
应该需要对模块的应答分析,否则模块工作的状态都不知道。
基本的功能还没有
有没有可以用的啊给个我万分感激,我的邮箱xianghaiougr@163.com
CMGS这个函数中的phone[]="AT+CMGS=\"13821947411\"\r"; 一句的号码不能用引号,我用GSM模块在电脑上已经验证过了还有应该在接受中断中判断一下回应
在学校时候我们一个师兄就做了这个,还得了挑战杯的大奖
呵呵!这个东东以前毕业设计也做过,工作后还玩了一年多(做无线路由器),不过现在转销售了(华邦单片机).
-
华邦新推出W79E227/217/225双串口单片机
高速、高可靠、宽电压、低功耗、超强抗干扰、资源丰富、无法解密
选型指南:http://hi.baidu.com/rtech
华邦单片机及闪存(一级代理),性价比高!
-