做一个项目,需要使用单片机控制GSM模块收发短信
来源:互联网 发布:加入淘宝商城条件 编辑:程序博客网 时间:2024/05/20 14:18
#include "serial.h"
#include "bianliang.h"
#include <REG51.h>
#include <string.h>
#include "1602.H"
#define rev_FAUSE 0
#define rev_OK 1
#define SELInt_on() ES=1
#define SELInt_off() ES=0
uchar temp[3];
unsigned long ss;
extern bit P0_0;
extern bit P0_1;
extern bit P0_2;
extern bit P0_3;
extern bit P0_4;
extern bit P0_5;
extern bit P0_6;
extern bit P0_7;
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
sbit P0_4=P0^4;
sbit P0_5=P0^5;
sbit P0_6=P0^6;
sbit P0_7=P0^7;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
void delay1(int n)
{
uchar i;
while(n--)
for(i=0;i<100;i++);
}
void Excrescent(void)
{
if(Rev_Buf[0]==0x00)
xx=1;
else
xx=0;
}
void gsm_Over(void)
{
Ser_TxDchar(0x0d);
Ser_TxDchar(0x0a);
}
void Cls_Rebuf(void)
{
unsigned char i;
for(i=0;i<Rev_BufSIZE+1;i++)
{
Rev_Buf[i]=0;
}
Rev_count=0;
}
Test_Mc39i(void)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,2);//发送AT
gsm_Over();//回车换行
SELInt_on();
while(Rev_count<9);
Rev_count=0;
Excrescent();
for(i=5+xx;i<7+xx;i++)
{
temp[i-5-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
MES_Mode(unsigned char mode)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CMGF,5);
Ser_TxDchar(mode+0x30);
gsm_Over();
SELInt_on();
while(Rev_count<15);
Rev_count=0;
Excrescent();
for(i=12+xx;i<14+xx;i++)
{
temp[i-12-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
Set_Speed(void)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_IPR,8);
gsm_Over();
SELInt_on();
while(Rev_count<18);
Rev_count=0;
Excrescent();
for(i=14+xx;i<16+xx;i++)
{
temp[i-14-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
Sent_Mes(unsigned char *p)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CMGS,5);
Ser_TxDchar(0x22);
Ser_TXDstring(TelNumber,11);
Ser_TxDchar(0x22);
gsm_Over();
SELInt_on();
ss=0xffff;
while(Rev_Buf[Rev_count-1]!=0x3e)
{
ss--;
if(ss==0)
{return;}
}
SELInt_off();
Ser_TXDstring(p,5);
Ser_TxDchar(0x1a);
SELInt_on();
}
Store_Location(void)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CPMS,5);
Ser_TxDchar(0x22);
Ser_TXDstring(TC_SM,2);
Ser_TxDchar(0x22);
Ser_TxDchar(0x2C);
Ser_TxDchar(0x22);
Ser_TXDstring(TC_SM,2);
Ser_TxDchar(0x22);
Ser_TxDchar(0x2C);
Ser_TxDchar(0x22);
Ser_TXDstring(TC_SM,2);
Ser_TxDchar(0x22);
gsm_Over();
SELInt_on();
while(Rev_count<54);
Rev_count=0;
Excrescent();
for(i=50+xx;i<52+xx;i++)
{
temp[i-50-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
Auto_Prompt(void)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CNMI,8);
gsm_Over();
SELInt_on();
while(Rev_count<17);
Rev_count=0;
Excrescent();
for(i=14+xx;i<16+xx;i++)
{
temp[i-14-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
void New_Mes(void)
{
Excrescent();
for(i=3+xx;i<7+xx;i++)
{
temp1[i-3-xx]=Rev_Buf[i];
}
if(!strcmp(temp1,TC_CMTI))
{
if(Rev_Buf[10]==0x53&&Rev_Buf[11]==0x4D)
{
NewSMS_flag=1;
MES_COUNT=Rev_Buf[13];
Cls_Rebuf();
}
}
}
void Read_Mes(uchar num)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CMGR,5);
Ser_TxDchar(num);
gsm_Over();
SELInt_on();
ss=0xffff;
while(Rev_Buf[Rev_count-1]!=0x4B)
{
ss--;
if(ss==0)
{return;}
}
for(i=30;i<40;i++)
{
if(Rev_Buf[i]==0x2B&Rev_Buf[i+1]==0x38&Rev_Buf[i+2]==0x36)
{
t=i;
}
}
for(i=t+3;i<t+14;i++)
{
TEL_Buf[i-t-3]=Rev_Buf[i];
}
TEL_Buf[11]=0x00;
for(i=t-20;i<t-15;i++)
{
CMD_Buf[i-t+20]=Rev_Buf[i];
CMD_Buf[5]=0x00;
}
}
Del_Mes(num)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CMGD,5);
Ser_TxDchar(num);
gsm_Over();
SELInt_on();
while(Rev_count<14);
Rev_count=0;
for(i=12;i<14;i++)
{
temp[i-12]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
Cls_Rebuf();
}
void CMD_SHIBIE(void)
{
if(!strcmp(TEL_Buf,TelNumber))
{
P1_2=0;
TELNUM_OK=1;
}
else
{ P1_3=0;
TELNUM_OK=0;
Del_Mes(MES_COUNT);
Cls_Rebuf();
NewSMS_flag=0;
}
if(!strcmp(CMD_Buf,CMD_1))
{
CMD=1;
}
else if(!strcmp(CMD_Buf,CMD_2))
{
CMD=2;
}
else
{
CMD=0;
}
}
void INIT_GSM(void)
{
if(Test_Mc39i())
{
if(MES_Mode(1))
{
if(Set_Speed())
{
if(Store_Location())
{
if(Auto_Prompt())
P1_0=0;
}
}
}
}
Cls_Rebuf();
#include "bianliang.h"
#include <REG51.h>
#include <string.h>
#include "1602.H"
#define rev_FAUSE 0
#define rev_OK 1
#define SELInt_on() ES=1
#define SELInt_off() ES=0
uchar temp[3];
unsigned long ss;
extern bit P0_0;
extern bit P0_1;
extern bit P0_2;
extern bit P0_3;
extern bit P0_4;
extern bit P0_5;
extern bit P0_6;
extern bit P0_7;
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
sbit P0_4=P0^4;
sbit P0_5=P0^5;
sbit P0_6=P0^6;
sbit P0_7=P0^7;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
void delay1(int n)
{
uchar i;
while(n--)
for(i=0;i<100;i++);
}
void Excrescent(void)
{
if(Rev_Buf[0]==0x00)
xx=1;
else
xx=0;
}
void gsm_Over(void)
{
Ser_TxDchar(0x0d);
Ser_TxDchar(0x0a);
}
void Cls_Rebuf(void)
{
unsigned char i;
for(i=0;i<Rev_BufSIZE+1;i++)
{
Rev_Buf[i]=0;
}
Rev_count=0;
}
Test_Mc39i(void)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,2);//发送AT
gsm_Over();//回车换行
SELInt_on();
while(Rev_count<9);
Rev_count=0;
Excrescent();
for(i=5+xx;i<7+xx;i++)
{
temp[i-5-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
MES_Mode(unsigned char mode)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CMGF,5);
Ser_TxDchar(mode+0x30);
gsm_Over();
SELInt_on();
while(Rev_count<15);
Rev_count=0;
Excrescent();
for(i=12+xx;i<14+xx;i++)
{
temp[i-12-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
Set_Speed(void)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_IPR,8);
gsm_Over();
SELInt_on();
while(Rev_count<18);
Rev_count=0;
Excrescent();
for(i=14+xx;i<16+xx;i++)
{
temp[i-14-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
Sent_Mes(unsigned char *p)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CMGS,5);
Ser_TxDchar(0x22);
Ser_TXDstring(TelNumber,11);
Ser_TxDchar(0x22);
gsm_Over();
SELInt_on();
ss=0xffff;
while(Rev_Buf[Rev_count-1]!=0x3e)
{
ss--;
if(ss==0)
{return;}
}
SELInt_off();
Ser_TXDstring(p,5);
Ser_TxDchar(0x1a);
SELInt_on();
}
Store_Location(void)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CPMS,5);
Ser_TxDchar(0x22);
Ser_TXDstring(TC_SM,2);
Ser_TxDchar(0x22);
Ser_TxDchar(0x2C);
Ser_TxDchar(0x22);
Ser_TXDstring(TC_SM,2);
Ser_TxDchar(0x22);
Ser_TxDchar(0x2C);
Ser_TxDchar(0x22);
Ser_TXDstring(TC_SM,2);
Ser_TxDchar(0x22);
gsm_Over();
SELInt_on();
while(Rev_count<54);
Rev_count=0;
Excrescent();
for(i=50+xx;i<52+xx;i++)
{
temp[i-50-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
Auto_Prompt(void)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CNMI,8);
gsm_Over();
SELInt_on();
while(Rev_count<17);
Rev_count=0;
Excrescent();
for(i=14+xx;i<16+xx;i++)
{
temp[i-14-xx]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
}
void New_Mes(void)
{
Excrescent();
for(i=3+xx;i<7+xx;i++)
{
temp1[i-3-xx]=Rev_Buf[i];
}
if(!strcmp(temp1,TC_CMTI))
{
if(Rev_Buf[10]==0x53&&Rev_Buf[11]==0x4D)
{
NewSMS_flag=1;
MES_COUNT=Rev_Buf[13];
Cls_Rebuf();
}
}
}
void Read_Mes(uchar num)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CMGR,5);
Ser_TxDchar(num);
gsm_Over();
SELInt_on();
ss=0xffff;
while(Rev_Buf[Rev_count-1]!=0x4B)
{
ss--;
if(ss==0)
{return;}
}
for(i=30;i<40;i++)
{
if(Rev_Buf[i]==0x2B&Rev_Buf[i+1]==0x38&Rev_Buf[i+2]==0x36)
{
t=i;
}
}
for(i=t+3;i<t+14;i++)
{
TEL_Buf[i-t-3]=Rev_Buf[i];
}
TEL_Buf[11]=0x00;
for(i=t-20;i<t-15;i++)
{
CMD_Buf[i-t+20]=Rev_Buf[i];
CMD_Buf[5]=0x00;
}
}
Del_Mes(num)
{
Cls_Rebuf();
SELInt_off();
Ser_TXDstring(TC_HEAD,3);
Ser_TXDstring(TC_CMGD,5);
Ser_TxDchar(num);
gsm_Over();
SELInt_on();
while(Rev_count<14);
Rev_count=0;
for(i=12;i<14;i++)
{
temp[i-12]=Rev_Buf[i];
}
if(!strcmp(temp,TC_OK))
return rev_OK;
else
return rev_FAUSE;
Cls_Rebuf();
}
void CMD_SHIBIE(void)
{
if(!strcmp(TEL_Buf,TelNumber))
{
P1_2=0;
TELNUM_OK=1;
}
else
{ P1_3=0;
TELNUM_OK=0;
Del_Mes(MES_COUNT);
Cls_Rebuf();
NewSMS_flag=0;
}
if(!strcmp(CMD_Buf,CMD_1))
{
CMD=1;
}
else if(!strcmp(CMD_Buf,CMD_2))
{
CMD=2;
}
else
{
CMD=0;
}
}
void INIT_GSM(void)
{
if(Test_Mc39i())
{
if(MES_Mode(1))
{
if(Set_Speed())
{
if(Store_Location())
{
if(Auto_Prompt())
P1_0=0;
}
}
}
}
Cls_Rebuf();
}
我做过一点;(1)pc机和单片机发送的串口数据是不是不一样?答:一样,一般都为9600,n,8,1(2)把单片机和pc上位机相连,pc的超级终端接收的命令确实正确的?答:可以连,注意RXD和TXD应交叉对联。满足单片机发送PC接收,PC发送MCU接收的关系(2)是不是单片机和pc机波特率不一样?答,GSM模块一般都是自适应模特率的,只要断电一次,就可以自己适应当前波特率注意:你通讯补上可能是RXD和TXD交叉的问题(交换TXD和RXD尝试),也可能是需要硬件握手的问题(RTS CTS
- 做一个项目,需要使用单片机控制GSM模块收发短信
- 单片机控制GSM模块实现短信收发的软件设计
- 9C51单片机(特别是AT89S52)控制GSM模块TC35收发短信的程序
- 利用gsm模块自动收发短信
- VB 使用COM串口驱动GSM模块收发短信测试用例
- 15.使用AT指令在GSM /GPRS模块上打接电话,收发短信 (原创)
- gsm 收发短信 打电话
- gsm 收发短信 打电话
- GSM短信收发介绍
- 单片机控制GSM模块(TC35I)电路设计
- STM32 控制GSM模块收发信息 F407 discovery
- GSM模块之TC35I发送pdu短信--stc51单片机
- 单片机 GSM 模块应用
- GSM模块发送短信
- 自己改的AT89S51单片机控制GSM模块(M22)发送短信程序,在Keil上编译没错,但还未试过烧入片内运行。。
- GSM900模块收发短信
- 基于GSM调制解调器的短信收发平台
- 基于GSM调制解调器的短信收发平台
- dx命令详解
- DBCP 配置文件加Java code
- poj 1273 Drainage Ditches (网络流_EK_入门)
- CoreData 简介
- iOS常用控件尺寸大集合
- 做一个项目,需要使用单片机控制GSM模块收发短信
- 获取某个字符在字符串中出现的次数
- 云计算论文
- JS判断浏览器类型与版本
- 原创:linux添加scsi硬盘笔记
- C/C++算法实例(三)--背包问题
- 利用Visual Studio的搜索功能和正则表达式统计代码行数
- 下载android 源码过程中遇到的问题
- eclipse 调试子进程