找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1987|回复: 0
打印 上一主题 下一主题
收起左侧

GSM短信模块AT指令及编程

[复制链接]
跳转到指定楼层
楼主
ID:130758 发表于 2016-7-17 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机串口不够用或者没有串口,怎么样模拟呢?
串口通信时数据格式由一个起始位,八个数据位,一个或两个结束位组成。在数据发送是结束位是不能省。但在数据接收时,程序中就没有必要等待结束位了,因为在等待结束位的过程中,把下一个数据的起始中断也等待过去了。程序发送口采用任一IO口,接收口采用外部中断0口,实现了9600bit/s的串口通信,信号产生与接收采用定时器定时溢出标志来进行控制。另外在程序中需要注意下面问题:1、中断的中断标志要保证状态正确2、定时器定时要精确  下面是我们单片机是所写的串口通信程序,主要用来实习发送和接收短信,因此下面的AT指令让我们一起学习一下:
AT指令功能
  AT+CMGC Send an SMS commend(发出一条短信息命令)
  AT+CMGD Delete SMS message (删除SIM卡内存的信息)
  AT+CMGF Select SMS message format(选择短消息信息格式:0-PDU;1-文本)
  AT+CMGL List SMS message from preferred store(列出SIM卡中的短消息格式PDU/TEXT:0“REC
  UNREAD”为未读,1“REC READ”为已读,2“STOU NSENT”为待发,3“STOSENT”为已发,
  4“ALL”为全部
  AT+CMGR Read SMS message (读短消息)
  AT+CMGS Send SMS message (发短消息)
  AT+CMGW Write SMS message to memory (向SIM内存中写入待发的短消息)
  AT+CNMI New SMS message storage(显示新收到的短消息)
  AT+CPMS Preferred SMS message storage (选择短消息内存)
  AT+CSCA SMS service center address(短消息中心地址)
  AT+CSCB Select cell broadcast message messages (选择蜂窝广播信息)
  AT+CSMP Set SMS text mode parameters(设置短消息文本模式参数)
  模块的供电电压如果低于3.3V会自动关机。同时模块在在发射时,电流峰值可高达2A。同时在此电流峰值时,电源电压(送入模块的电压)下降值不能超过0.4V。所以该模块对电源的要求较高,电源的内阻+FFC联接线的电阻必需小于200mΩ。
  单片机通过两根I/O口控制TC35的开关机、复位等,通过串口与TC35进行数据通信,通信速率为9600Kbps,采用8位异步通讯方式,1位起始位,8位数据位,1位停止位。
TC35模块输入输出的TTL正电平逻辑不是+5V,而是+2.9V,因此必要时加端口保护。
#ifndef sentmessage
#define    sentmessage
#define  uint   unsigned   int
#define  uchar   unsigned   char
void delay_1000us(uchar n)        //延迟0.01s         
{
    unsignedchar a,b,c;
       for(c=0;c<n;c++)
       {
           for(b=249;b>0;b--)
          for(a=17;a>0;a--);
       }
}      
void delay_100us(uchar c)   //误差 -0.173611111111us
{
   unsigned char a,b,i;
       for(i=0;i<c;i++)
       {
           for(b=1;b>0;b--)
               for(a=43;a>0;a--);
       }
}
voiddelay_5s(void)   //误差 -0.000000002274us
{
   unsigned char a,b,c;
   for(c=203;c>0;c--)
       for(b=156;b>0;b--)
           for(a=144;a>0;a--);
}
void Sendchar(unsigned char c)
{
   SBUF = c;
   while(!TI);
   TI = 0;
}
void Sentstring(unsigned char *p)
{
       while(*p!='\0')
       {
         Sendchar(*p++);
    }
}
/*
void Sent_message()
{  

       Sentstring("AT+CMGS=\"1252015215029882\"");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);

       Sentstring("afasfasd");
       delay_100us(60);
       Sendchar(0x1a);
}
*/
void Pre_readmessage()
{  
   Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);

       Sentstring("AT+CMGF=1");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);

       Sentstring("AT+CNMI=2,1");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
}
void Readmessage(unsigned char msgnum) //读短信
{   
   ES=1;
       Sentstring("AT+CMGR=");
       Sendchar(msgnum);
       Sendchar(0X0D);
       Sendchar(0X0A);     
      delay_1000us(300);
       ES=0;                                   
}
void Delete_message(uchar num)
{  
      Sentstring("AT+CMGD=");
       Sendchar(num);
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
}

void Send_yfhz(uchar str[])
{
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D9168");
       Sentstring(str);
       Sentstring("000801086CE8610F9632706B");   
       Sendchar(0x1a);
       delay_1000us(500);
}//0891683108200305F011000D91683146384837F2000801084E3B4EBA8BF7610F6CE8
//0891683108200309F011000D91685121333639F7000801064E3B4EBA8BF7610F6CE8
void Send_bxg(uchar str[])
{
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D9168");
       Sentstring(str);
       Sentstring("000801086CE8610F963276D7");   
       Sendchar(0x1a);
       delay_1000us(500);
}
void Send_tdg(uchar str[])
{
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D9168");
       Sentstring(str);
       Sentstring("0008010853F0706F5DF25173");   
       Sendchar(0x1a);
       delay_1000us(500);
}
void Send_secret(uchar str[])
{
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D9168");
       Sentstring(str);
       Sentstring("0008010895E8670953719669");   
       Sendchar(0x1a);     
       delay_1000us(500);
}
void Send_tdk(uchar str[])
{
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D9168");
       Sentstring(str);
       Sentstring("0008010853F0706F5DF25F00");   
       Sendchar(0x1a);     
       delay_1000us(500);
}
  /*
void Send_tdk1()
{

       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(30);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D91685112059288F2");
       Sentstring("0008010853F0706F5DF25F00");  
       Sendchar(0x1a);     
       delay_1000us(500);
}*/
void Send_fsg(uchar str[])
{
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D9168");
       Sentstring(str);
       Sentstring("0008010898CE62475DF25173");   
       Sendchar(0x1a);
       delay_1000us(500);
}
void Send_fsk(uchar str[])
{
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D9168");
       Sentstring(str);
       Sentstring("0008010898CE62475DF25F00");   
       Sendchar(0x1a);
       delay_1000us(500);
}
void Send_ykm(uchar str[])
{
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=0");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=23");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("0891683108408705F0");    //发送内容
       Sentstring("11000D9168");
       Sentstring(str);
       Sentstring("000801085DF262535F0095E8");   
       Sendchar(0x1a);
       delay_1000us(500);
}
void Send_jiankong(uchar str[],uint a,uintb)
{     
       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGF=1");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("AT+CMGS=");
       Sentstring(str);
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("taideng shi ");
       if(a==1)
         Sentstring("guan de,");
       else
         Sentstring("kai de,");
       Sentstring("fengshan shi ");
          if(b==1)
         Sentstring("guan de!");
       else
         Sentstring("kai de!");
       Sendchar(0X0D);
       Sendchar(0X0A);
       Sendchar(0x1a);
       delay_1000us(500);
}
void Send_phone(uchar str[])
{

       Sentstring("AT");
       Sendchar(0X0D);
       Sendchar(0X0A);
       delay_1000us(20);
       Sentstring("atd");
       Sentstring(str);
       Sentstring(";");
       Sendchar(0X0D);
       Sendchar(0X0A);   
       delay_1000us(500);        
}
#endif

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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