单片机控制sim900a收发短信

合集下载

读写短信PC-UART0-SIM900

读写短信PC-UART0-SIM900
//配合SIM900A 发送一条英文短信 永远在线 自动重拨、
//头函数
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <inttypes.h>
//----------------------------------------------------------
//----------------------------------------------------------
//----------------------------------------------------------
uint8_t size_of_temp2_data;
//延时程序
void delay_ms(uint8_t xtal)
{
uint8_t i;
for(i=1;i<(uint8_t)(xtal*143-2);i++)
{;}
}
//延时1s
void delay_s(void)
delay_ms(200);
}
//----------------------------------------------------------
//sim900复位
void sim_rst(void)
{
sbi(DDRB,PB4);
sbi(PORTB,PB4);//高
cbi(PORTB,PB4);//高低50us

SIM900A模块单片机

SIM900A模块单片机

SIM900A模块单片机SIM900A模块是一种常用的GSM/GPRS通信模块,可以用于单片机与移动通信网络的连接,实现远程监控、远程控制、短信通知等功能。

本文将介绍SIM900A模块的基本原理、使用方法以及常见问题解决方案。

一、SIM900A模块的基本原理。

SIM900A模块是基于GSM/GPRS技术的通信模块,可以实现单片机与移动通信网络的连接。

它具有GSM和GPRS双模式,支持全球四频段,可以在全球范围内使用。

SIM900A模块可以通过串口与单片机进行通信,实现短信发送、接收、电话呼叫、网络连接等功能。

SIM900A模块内部集成了GSM/GPRS通信模块、SIM卡接口、天线接口、电源管理电路等部分。

它可以通过AT指令进行控制,与单片机通信时,只需要发送相应的AT指令即可完成各种功能的操作。

SIM900A模块还具有丰富的接口,可以与各种外部设备连接,如传感器、继电器等,实现更多的应用场景。

二、SIM900A模块的使用方法。

1. 硬件连接。

使用SIM900A模块时,首先需要将SIM卡插入SIM卡接口,并连接天线。

接着将SIM900A模块的串口引脚与单片机的串口引脚相连,同时连接电源和地线。

在连接时需要注意电源的稳定性,以免影响SIM900A模块的正常工作。

2. 软件编程。

在单片机的程序中,需要通过串口向SIM900A模块发送AT指令,以实现各种功能的操作。

例如,发送短信可以使用AT+CMGS指令,接收短信可以使用AT+CMGR指令,呼叫电话可以使用ATD指令,挂断电话可以使用ATH指令,建立GPRS连接可以使用AT+CGATT指令等。

通过编写相应的程序,可以实现单片机与SIM900A模块的通信,从而实现各种功能的操作。

3. 功能测试。

在完成硬件连接和软件编程后,需要进行功能测试,以验证SIM900A模块的正常工作。

可以通过发送短信、接收短信、呼叫电话、建立GPRS连接等操作,检查SIM900A模块的各项功能是否正常。

单片机也能给手机发短信

单片机也能给手机发短信

单片机也能给手机发短信没错!利用强大的GSM网络,就可以实现单片机和手机之间互发短信。

我们知道,单片机以其强大的低成本优势和强大的采集、控制、存储功能在工业领域已经被广泛使用,而今天我们所要说的,并不是要介绍是如何的强大,也不标榜其在哪个领域的杰出贡献,我们今天所要说的,就是给单片机插上无线的翅膀,给它配上“手机”,让其利用成熟的GSM网络和远在海外的您收发短信。

试想一下,如果单片机自身具备了收发短信功能,那将是多么令人欣喜若狂的一件事,我们可以利用手机向单片机发送一条短信,单片机可以根据不同的短信内容,进行不同的动作,比如控制某些管脚的电平,如果外部加个继电器之类的,就可以用它来控制电源的开关等,单片机也可以将自身采集到的电压、电流、压力等模拟量值发送到指定的手机上。

下面我们具体来说一下如何使用单片机和手机进行短信收发。

“巧妇难为无米之炊”,我们也需要几个“零件”:1、单片机:无所谓什么型号,只要能提供串口就行,具体选型主要看其稳定性和自身要实现的功能,最后就是性价比了。

2、GSM短信模块:这个市面上很多,价格也是参差不齐,我这里选择西安达泰电子的T09C短信模块,个人觉得相对比较稳定,主要是它提供标准的AT指令,这样对于以后的产品升级或更换都有所保障;提供标准的RS232接口可以方便地与电脑的串口连接,通过提供的PC机测试软件方便进行电脑调试,帮助我们尽快上手。

好多公司的同类产品将AT指令封装成自己的指令,这可能影响以后的产品改造和升级。

3、相关配件:5V电源、GSM天线、SIM卡、一些电子元器件。

其中的5V电源和GSM天线在购买时作为赠品已经提供给我们了,SIM卡就到当地移动服务厅办一张就行了,注意不能使用CDMA和3G卡,电子元器件主要部分是RS232转TTL的电平转换,我推荐常用的MAX232。

我想对于单片机和MAX232以及RS232接口之间的连接,搞过单片机的朋友都是轻车熟路了,为了节省互联网资源,我就不再重复。

必看3 SIM900A 各功能指令 详细版

必看3 SIM900A 各功能指令 详细版

// 查询模块是否附着GPRS网络
模块开机后首先查询模块是否附着GPRS网络,不要主动设置AT+CGATT=1,除非待机状态 下主动上报+CGATT: 0,此时可以设置AT+CGATT=1,否则不要设置。
在一些特殊的情况,比如模块从无信号的状态进入有信号的状态(穿过隧道),有可能会出 现无法附着GPRS网络的情况,此时建议用AT+CFUN来重启射频。
一般性AT指令
AT+CCID显示CCID(SIM卡背面20为数字) • AT+CCID
898682604
OK SIM卡背面20为数字所代表的含义(不过目前市面上SIM卡号段繁多,目前也无法对应起来, 仅供参考): 前6位:898600中国移动;898601中国联通 第7位:业务接入号,对应于134~139中的4、5、6、7、8、9; 第8位:SIM卡的功能位:一般为0,现在的预付费SIM卡为1; 第9、10位:各省的编码; 第11、12位:年号; 第13位:供应商代码; 第14—19位:用户识别码; 第20位:校验位。
AT+CPIN输入pin码 AT+CLCK设置pin码,取消pin码
AT+CLCK=“SC”,1,“1234“ OK
// 设置pin码,一般建议不要随意设置SIM的PIN码
AT+CPIN? +CPIN: SIM PIN OK
AT+CPIN="1234“
OK 注意:SIM卡设置pin后,如果3次输入pin码失败,需要输入puk码,puk输入10次无效SIM卡 无效,只能重新补卡。
SIM900系列与之前SIM300系列模块AT指令处理方式不同:
SIM300:在同一时间内mcu同时向模块发送几条AT指令,SIM300可以 进行一一处理并执行;

SIM900A 各功能指令 详细版.

SIM900A 各功能指令 详细版.

1 AT指令简介关键词:发送第一条指令;同步波特率;AT即Attention,指令集是从终端设备(TerminalEquipment,ATTE)或数据终端设备(DataTerminalEquipment,DTE)向终端适配器(TerminalAdapter,TA)或数据电路终端设备(DataCircuitTerminalEquipment,DCE)发送的。

通过TA,TE发送AT指令来控制移动台(MobileStation,MS)的功能,与GSM网络业务进行交互。

用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。

AT指令必须以"AT"或"at"开头(第一条发给模块的指令要都大写),以回车(<CR>)结尾。

模块的响应通常紧随其后,格式为:<回车><换行><响应内容><回车><换行>。

我们通过串口调试助手SSCOM来测试一下,打开:选择正确的COM号(连接到SIM900A 模块的COM端口,我电脑是COM3),然后设置波特率为115200,勾选发送新行(必选!即sscom自动添加回车换行功能),然后发送AT到SIM900A模块,如下图所示:我们发送了2次AT指令,第一次看到有乱码,这是因为模块上电后,还没有实现串口同步,在收到第一次数据(不一定要AT指令)后,模块会自动实现串口同步后续通信就不会出现乱码了。

因为SIM900A具有自动串口波特率识别功能(识别范围:1200~115200),所以我们的电脑(或设备)可以随便选择一个波特率(不超过识别范围即可),来和模块进行通信,这里我们选择最快的115200。

从上图可以看出,我们现在已经可以和SIM900A模块进行通信了,我们通过发送不同的AT指令,就可以实现对SIM900A的各种控制了。

SIM900A模块提供的AT命令包含符合GSM07.05、GSM07.07和ITU-TRecommendationV.25ter的指令,以及SIMCOM自己开发的指令。

SIM900A模块用户手册

SIM900A模块用户手册

SIM900A模块⽤户⼿册User ManualYIXIN_SIM900A模块⽤户⼿册⾼性能 GSM/GPRS模块⽬录1.模块简介 (1)1.1 模块资源图 (1)1.2 模块硬件资源详解 (2)2.模块使⽤ (6)2.1 使⽤前准备 (6)2.2 AT指令简介 (7)2.3 拨打/接听电话 (10)2.3.1 拨打电话 (11)2.3.2 接听电话 (13)2.4 短信的读取和发送 (14)2.4.1 英⽂短信的读取 (15)2.4.2 英⽂短信的发送 (16)2.4.3 中英⽂短信的读取 (17)2.4.4 中英⽂短信的发送 (19)2.5 GPRS通信 (21)2.5.1 TCP连接 (24)2.5.2 UDP连接 (29)2.5.3 GPRS通信注意事项 (34)1.模块简介YIXIN_SIM900A_V8(V8是版本号,下⾯均以YIXIN_SIM900A表⽰该产品)是⼀款⾼性能⼯业级的GSM/GPRS模块(开发板)。

YIXIN_SIM900A模块采⽤SIMCOM 公司的⼯业级双频GSM/GPRS模块:SIM900A,⼯作频段双频:900/1800MHz,可以低功耗实现语⾳、短信、彩信、数据和传真信息的传输。

YIXIN_SIM900A模块⽀持RS232串⼝和TTL串⼝,TTL串⼝⽀持3.3V/5V系统,⽀持6V-18V的宽⼯作电压范围,⼯作温度为-40℃⾄+85℃。

1.1 模块资源图YIXIN_SIM900A模块(开发板)接⼝丰富,功能完善,尤其适⽤于需要语⾳/短信/GPRS数据服务的各种领域,其资源图如下图所⽰:1从上图可以看出,YIXIN_SIM900A模块(开发板)功能齐全、接⼝丰富,模块(开发板)尺⼨(不算天线部分)为83mm*53mm,并带有安装孔,⾮常⼩巧,可⽅便嵌⼊到各种产品设计中。

1.2 模块硬件资源详解1.2.1 SIM900A(GSM/GPRS)模块(U5)YIXIN_SIM900A所选择的GSM模块为SIMCOM公司的SIM900A模块,该模块采⽤SMT封装形式,其性能稳定,外观精巧,性价⽐⾼。

{财务管理财务知识}用单片机控制手机收发短信息

{财务管理财务知识}用单片机控制手机收发短信息GSM手机通过异步通信接口实现对SMS的控制共有三种接入协议:BlockMode;基于AT命令的TextMode;基于AT命令的PDUMode。

PDU模式是发送或接收手机SMS信息的一种方法,短信息正文经过十六进制编码后被传送。

目前,PDUMode应用最为广泛,基本上全国所有的电信局都提供支持PDUMode的短消息业务。

有些地址则不支持TextMode和BlockMode,这就限制了这两种接入协议的应用,而且PDUMode已有取代BlockMode的趋势。

为了保证系统具有广泛的适用性,本文采用PDU模式收发SMS。

PDU相当于一个数据包,它由构成消息(SMS)的信息组成。

作为一种数据单元,它必须包含源/目的地址、保护(有效)时间、数据格式、协议类型和正文,正文长度可达140字节,它们都以十六进制表示。

PDU结构根据短消息由移动终端发起或以移动终端为目的而不同。

当由移动终端发起时,PDU的格式为:当以移动终端为目的时,PDU的格式为:其中,SMSC为短消息业务中心地址,DA/OA为源/目的地址,PID为协议识别,DCS为数据编码,UDL为用户数据长度,UD为用户数据,VP为有效时间,MR指明是发出信息,SCTS指明短消息到达业务中心的时间。

2PDU格式下短信息的接收根据设置不同,手机将收到的短消息保存在缓存单元或存入SIM卡,单片机从手机中接收短消息实质上就是从SIM或缓存中读出信息。

这主要利用AT+CMGR和AT+CMGL两条指令来完成,其工作过程见图2。

由于不同的厂商对AT指令集的解释代码和响应信息不一样,所以单片机首先要确认能否与手机建立起通信,一般用ATE指令完成此确认;然后用AT+CMGF指令选定短消息的数据格式;在收到手机的正确回答反以AT指令完成读出功能。

一般用AT+CMGL读取以前的信息,在收到手机的RING(振铃)数据时,用AT+CMGR读取实时信息。

短信sim900模块编写程序原理

短信sim900模块编写程序原理SIM900模块是一款用于发送和接收短信的GSM/GPRS模块。

通过编写程序,可以使用SIM900模块完成短信的发送和接收功能。

编写程序的原理如下:1. 硬件连接:首先,需要将SIM900模块与单片机或开发板进行硬件连接。

一般来说,SIM900模块的VCC引脚连接到3.3V电源,GND引脚连接到地,RXD引脚连接到单片机或开发板的TXD引脚,TXD引脚连接到单片机或开发板的RXD引脚。

另外,还需要连接SIM卡的VCC、GND、CLK和DATA等引脚。

2. 串口通信:SIM900模块与单片机或开发板之间通过串口进行通信。

可以使用单片机或开发板的UART(串口通信)模块,并设置相应的波特率和数据位数等参数。

SIM900模块一般默认使用波特率为9600。

3. AT指令:SIM900模块通过AT指令来完成短信的发送和接收。

AT指令是一组预定义的命令,用于控制调制解调器和通信设备的行为。

例如,使用AT+CMGS指令发送短信,使用AT+CMGR指令接收短信。

4. 编写程序:在单片机或开发板的代码中,可以通过串口发送AT指令给SIM900模块,并通过串口接收SIM900模块返回的响应。

根据发送和接收短信的需求,可以编写相应的函数来封装发送和接收短信的过程。

5. 软件控制:通过程序控制SIM900模块进入相应的模式,如发送模式、接收模式等。

在发送短信时,将短信内容作为参数发送给SIM900模块,并等待模块返回发送成功的响应。

在接收短信时,将调用AT+CMGR指令,获取短信内容并在程序中进行处理。

6. 错误处理:根据SIM900模块返回的响应,可以判断短信是否发送或接收成功。

如果发生错误,程序可以进行相应的处理,如重新发送短信或者重新尝试接收短信。

总的来说,编写程序的原理是通过串口通信发送AT指令给SIM900模块,并根据模块的响应判断短信的发送和接收是否成功。

在实际应用中,可以根据具体需求,对程序进行进一步的优化和调整。

SIM900A模块系列调试(未完)

SIM900(A)系列模块开发板调试开发流程一概要:SIM900A模块采用串口(UART)通信,我们所有的SIM900A开发板都含有TTL接口(V3.7版本还含有一组RS232电平接口)。

使用标准的AT指令对SIM900A模块进行控制,实现打电话发短信等功能。

所以,您要做的是:使用您的控制器(包括单片机、电脑等)连接到我们的SIM900A模块的TTL接口或是RS232接口。

硬件连接完毕后,就可以通过串口来发送AT指令了。

二用电脑调试SIM900A模块我们推荐先用电脑控制模块,然后再用单片机控制模块。

2.1 硬件连接说明您在用电脑调试我们的模块时需要用到一个将SIM900模块与电脑连接起来的设备(一定会用到这个设备),常见的调试设备有USB--TTL模块与USB--232串口线。

实际中所有的USB设备都是需要驱动的,不同的系统所需的驱动也是不同。

所以,在使用这些USB设备来调试模块时,一定先确定您所安装的驱动是OK的。

如果您不知道您手里的USB设备的驱动是什么,可以到我们的QQ群中的共享资料里去寻找,您还可以求助百度。

将您的USB设备的具体名字(一定要芯片名车)+您的系统名称去搜索,如CH340 wIn 7 64位驱动。

这样一般都会找到合适的驱动。

安装完驱动后需要先实验一下USB设备和对应的驱动是否OK。

方法是,我的电脑--属性--硬件管理器--COM口,找到USB设备安装后系统为其生成的COM口(系统生成的COM 口一般会含有USB设备芯片的名称,如果***CH340***COM2),注意,如果系统没有为此设备生成COM口,很可能安装的驱动不正确或是USB设备已损坏。

此时需要重新安装驱动或是更换USB调试设备。

如果找到对应的COM口后就可以用串口助手一类的软件来测试这个USB设备与驱动是否OK。

方法是将USB设备的转换成的TTL接口或是RS232接口的收发用线连在一起,例如:将USB--TTL设备的TTL端的TXD与RXD用线连在一起,或是将USB--232串口线的RS232端的2 3 针(接线端里面有标注2 3针对应的位置)连在一起。

SIM900A发送数据参考流程

建立连接的正常流程
AT+CREG? 查询网络注册信息
+CREG: 1,1
OK
AT+CGATT? 查看是否附着GPRS业务
+CGATT: 1 0-分离,1-附着//如果返回不是1,需要等待几秒再次查询,
如果查询三次仍然未附着成功,需要用AT+CGATT=1强制附着
OK
AT+CSTT="CMNET" 启动任务并设置接入点APN、用户名、密码
OK
AT+CIICR 激活移动场景,发起GPRS 或CSD无线连接
OK 此处需要等待返回OK后才能进行TCP或UDP连接
AT+CIFSR 获取本地IP地址
10.105.42.21
AT+CIPSTART="TCP","61.162.24.123","2020" 建立TCP连接或注册UDP端口号,IP
地址和端口号根据实际填写
OK
CONNECT OK 服务器连接成功(TCP需要等待连接建立成功后才能发送数据)AT+CIPSEND 发送数据
> ABCDEFG 等待返回“>”后,填入要发送的数据后,按(Ctrl+Z)将数据发

SEND OK。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define one 0x80//第一行的初始位置
#define two 0x80+0x40
void write_1602com(uchar com);
void write_1602dat(uchar dat);
void lcd_init();
#endif
SCON = 0x50;//串口选择工作模式1使能接收,允许发送,允许接收
TH1 = 0xFD;//用11.0592 MHz波特率9600
TL1 = 0xFD;
TR1 = 1;//打开中时器
ES=1;//打开串口中断
}
/********************************************************************
*名称: Clear_Rxdata(uchar length)
*功能:清空接收缓存数组
*输入:无
*输出:无
***********************************************************************/
void Clear_Rxdata(uchar length)//清空接收缓存数组
&&Rx_data[i+4]=='I'
&&Rx_data[i+5]==':')
{
Response_receive_SMS_flag=1;
return;
}
}
Response_receive_SMS_flag=0;
}
/********************************************************************
void Uart_SendString(uchar *String)
{
while (*String !='\0')//字符串结束标志\0
{
Uart_SendChar(*String);
String++;
}
}
/********************************************************************
*名称: Uart_SendChar(uchar ch)
*功能:向串口发送一个字符
*输入:无
*输出:无
***********************************************************************/
void Uart_SendChar(uchar ch)
write_1602com(0x06);//显示不移动光标右移
write_1602com(0x01);//清屏
}
lcd1602_drv.h部分
#ifndef __LCD1602_DRV_H__
#define __LCD1602_DRV_H__
#define uchar unsigned char
#define uint unsigned int
write_1602com(one);
for(i=0;i<16;i++)
{
write_1602dat(w[i]);
}
while(1)
{
EA=1;
EX0=1;//开外部中断0
IT0=0;//脉冲触发方式
Response_receive_SMS();//循环检测是否收到短信,若收到短信则Response_receive_SMS_flag==1
while(TI==0);
TI=0;
}
Uart_SendString("\"\r");
delay(200);
Uart_SendString("xxx"); //返回的短信内容
(300);
Uart_SendChar(0x1a);
delay(1000);
aa=0;}
}
}
void uart() interrupt 4
{
write_1602com(0x38);//16*2 5*7点阵8位数据线
delay(5);
write_1602com(0x38);
delay(5);
write_1602com(0x38);
delay(5);
write_1602com(0x08);
write_1602com(0x0c);//开显示不显示光标不闪烁
*名称: uart_init(void)
*功能:串口初始化程序
*输入:无
*输出:无
***********************************************************************/
void uart_init(void) //初始化uart
{
TMOD = 0x20;//定时器1工作模式2,8位可自动重载初值,常把定时1以模式2作为串行口波特率发生器
Uart_SendString("AT+CMGF=1\r\n");//设置sim900模块为英文方式发送短信
delay(500);
Uart_SendString("AT+CMGD=1\r\n");//清除所有短信
delay(500);
Uart_SendString("AT+CSCS=\"GSM\"\r"); //设置sim900模块GSM字符集
delay(100);
Rx_bit=0;
if(Response_receive_SMS_flag==1)
{
Uart_SendString("AT+CMGR=1\r\n");//短信读取
delay(2000);
write_1602com(one);
for(i=0;i<16;i++)
{
write_1602dat(Rx_data[69+i]);
单片机接受指定短信内容,1602显示短信内容,单片机对短信内容作判断,若为所要求的内容,则返回一条短信
#include <reg52.h>//单片机头文件
#include <string.h>
#include "lcd1602_drv.h"
#define uchar unsigned char
#define uint unsigned int
delay(100);
Uart_SendString("AT+CMGD=1\r\n");//清除所有短信
delay(100);
}
delay(1000);
if(aa==1)
{
delay(1000);
Uart_SendString("AT+CMGS=\"");
for(j=0;j<11;j++)
{
SBUF=Admin_num[j];
}
if(Rx_data[69]=='x'&&Rx_data[70]=='x'&&Rx_data[71]=='ax'&&Rx_data[72]=='x'&&Rx_data[73]=='x') //判断的短信内容,可以不止5位
{
aa=1;
}
Response_receive_SMS_flag=0;
Clear_Rxdata(Rx_data_length);
{
SBUF=ch;
while(TI==0);
TI=0;
}
/********************************************************************
*名称: Uart_SendChar(uchar ch)
*功能:向串口发送一个字符串
*输入:无
*输出:无
***********************************************************************/
}
void main(void)
{
uint aa=0;
EA=1;//开总中断
LCD_RW=0;//LCD RW主程序接地一直等于0
uart_init();//串口初始化
lcd_init();//液晶屏显示初始化
Rx_bit=0;
Uart_SendString("AT+CLIP=1\r\n");
delay(500);
#define Rx_data_length 110
uchar Admin_num[11]="xxxxxxxxxxx"; //手机号码
uchar i,j;
bit Response_receive_SMS_flag=0;
sbit RS_1602=P2^6;//1602数据/命令选择引脚
sbit LCD_RW=P2^5;//1602读写引脚
delay(1);
E_1602=1;
delay(1);
E_1602=0;
}
//②写数据子程序
void write_1602dat(uchar dat)
{
RS_1602=1;//置为写数据
P0=dat;//送入数据
delay(1);
E_1602=1;
delay(1);
E_1602=0;
相关文档
最新文档