用51单片机读取sim900里的短信程序怎么写 如何利用51单片机读取sim900a收到的短信并且利用收到的...

\u8bf7\u95ee\u4e00\u4e0b\uff0c\u752851\u5355\u7247\u673a\u8bfb\u53d6sim900\u91cc\u7684\u77ed\u4fe1\u7a0b\u5e8f\u600e\u4e48\u5199

\u4e70\u4e00\u4e2a\u624b\u673a\u901a\u4fe1\u6a21\u5757\uff0c\u5382\u5bb6\u5c31\u5e26\u7ed9\u4f60\u8fd9\u6837\u7684\u7a0b\u5e8f\u3002

\u4e70\u6a21\u5757\u65f6\uff0c\u5546\u5bb6\u4f1a\u7ed9\u4f60\u4f8b\u7a0b\u7684\uff0c\u77ed\u4fe1\u63a7\u5236LED\u706f\u4eae\u706d\u3002\u6211\u8fd9\u90fd\u670951\u5355\u7247\u673a\u77ed\u4fe1\u63a7\u5236LED\u7684\u7a0b\u5e8f

买模块商家送资料, 串口配置程序略,主程序如下:
/**********************************************************************************
* 工程名 :短信控制LED
* 描述 :通过短信控制开发板的LED
* 实验平台:C51
* 库版本 :
* 作者 :泥人通信模块开发平台团队
* 博客 :http://nirenelec.blog.163.com
* 淘宝 :http://shop105683814.taobao.com

* 硬件连接说明
使用单片串口与GPRS模块通信
C51 GPRS模块
P30 (RXD)->RXD
P31 (TXD)->TXD
GND ->GND

* 软件功能说明
板子上电后运行指示灯RUNING_LED会以一秒的频率闪烁
手机发送“onled”点亮LED;
手机发送“offled”熄灭LED;
**********************************************************************************/
#include "config.h"
#include "string.h"
#include "delay.h"
#include "uart.h"

#define Automatic_Startup 1 //定义自启动 V1.2版本起有自启动功能

#define Buf1_Max 200 //串口1缓存长度
/************* 本地常量声明 **************/
sbit RUNING_LED = P1^2; //运行指示灯
sbit LED = P1^3; //控制指示灯

/************* 本地变量声明 **************/
xdata u8 Uart1_Buf[Buf1_Max];

u8 Times=0,First_Int = 0,shijian=0;

bdata u8 Flag;//定时器标志位
sbit Timer0_start =Flag^0; //定时器0延时启动计数器

/************* 本地函数声明 **************/
void GPIO_config(void); //引脚初始化
void Timer0Init(void); //定时器0初始化
void CLR_Buf1(void); //清串口接收缓存
u8 Find(u8 *a); //查找字符串
void Second_AT_Command(u8 *b,u8 *a,u8 wait_time);//发送指令
void Wait_CREG(void); //查询等待模块注册成功
void Set_Text_Mode(void); //设置短信为TEXT模式
void Check_New_Message(void); //查询新短信

/************* 外部函数和变量声明*****************/

/*******************************************************************************
* 函数名 : main
* 描述 : 主函数
* 输入 :
* 输出 :
* 返回 :
* 注意 : 串口波特率是9600,GPRS模块默认波特率是115200,需要自己通过串口助手修改
为9600方可使用。
程序会删除手机卡上的短信,请注意
*******************************************************************************/
void main(void)
{
Timer0Init(); //初始化定时器0
GPIO_config();
EA=1; //开总中断
Uart1Init(); //初始化串口9600
Wait_CREG(); //查询等待模块注册成功
Set_Text_Mode();//设置短信为TEXT模式
//Second_AT_Command("AT+CMGD=1,4","OK",3);//删除卡上所有短信
while(1)
{
Check_New_Message();
}

}

/*******************************************************************************
* 函数名 : Uart1
* 描述 : 串口1中断服务入口函数
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
void Uart1() interrupt 4
{
if (RI)
{
RI = 0; //清除RI位
Uart1_Buf[First_Int] = SBUF; //将接收到的字符串存到缓存中
First_Int++; //缓存指针向后移动
if(First_Int > Buf1_Max) //如果缓存满,将缓存指针指向缓存的首地址
{
First_Int = 0;
}
}
if (TI)
{
TI = 0; //清除TI位
}
}

/*******************************************************************************
* 函数名 : Timer0_ISR
* 描述 : 定时器0中断服务入口函数,20ms中断一次
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
void Timer0_ISR() interrupt 1
{
static u8 Time_count=0;
TR0=0;//关定时器
TL0 = 0x00; //重设定时器初值
TH0 = 0xB8; //重设定时器初值
Time_count++;
if(Time_count>=50)
{
Time_count = 0;
RUNING_LED =~RUNING_LED;
}
if(count_20ms) //20ms延时计数器
count_20ms--;
if(Timer0_start)
Times++;
if(Times > (50*shijian))
{
Timer0_start = 0;
Times = 0;
}
TR0=1;//开定时器
}
/*******************************************************************************
* 函数名 : GPIO_config
* 描述 : IO口配置函数
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
void GPIO_config(void)
{
LED=1;
RUNING_LED=1;
}
/*******************************************************************************
* 函数名 : Timer0Init
* 描述 : 定时器0初始化,20ms定时
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
void Timer0Init(void) //20毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //
TMOD |= 0x01; //设置定时器模式,16位定时器
TL0 = 0x00; //设置定时器初值
TH0 = 0xB8; //设置定时器初值
TF0 = 0; //清TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
/*******************************************************************************
* 函数名 : CLR_Buf1
* 描述 : 清除串口2缓存数据
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
void CLR_Buf1(void)
{
u16 k;
for(k=0;k<Buf1_Max;k++) //将缓存内容清零
{
Uart1_Buf[k] = 0x00;
}
First_Int = 0; //接收字符串的起始存储位置
}

/*******************************************************************************
* 函数名 : Find
* 描述 : 判断缓存中是否含有指定的字符串
* 输入 :
* 输出 :
* 返回 : unsigned char:1 找到指定字符,0 未找到指定字符
* 注意 :
*******************************************************************************/

u8 Find(u8 *a)
{
if(strstr(Uart1_Buf,a)!=NULL)
return 1;
else
return 0;
}

/*******************************************************************************
* 函数名 : Second_AT_Command
* 描述 : 发送AT指令函数
* 输入 : 发送数据的指针、希望收到的应答、发送等待时间(单位:S)
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/

void Second_AT_Command(u8 *b,u8 *a,u8 wait_time)
{
u8 i;
u8 *c;
c = b; //保存字符串地址到c
CLR_Buf1();
i = 0;
while(i == 0)
{
if(!Find(a)) //查找需要应答的字符
{
if(Timer0_start == 0)
{
b = c; //将字符串地址给b
for (b; *b!='\0';b++)
{
UART1_SendData(*b);
}
UART1_SendLR();
Times = 0;
shijian = wait_time;
Timer0_start = 1;
}
}
else
{
i = 1;
Timer0_start = 0;
}
}
CLR_Buf1();
}

/*******************************************************************************
* 函数名 : Set_Text_Mode
* 描述 : 设置短信为TEXT文本模式
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
void Set_Text_Mode(void)
{
Second_AT_Command("ATE0","OK",3); //取消回显
Second_AT_Command("AT+CNMI=3,2,0,0,0","OK",3); //新短信直接输出
Second_AT_Command("AT+CMGF=1","OK",3); //TEXT模式
Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"","OK",3);//所有操作都在SIM卡中进行
}

/*******************************************************************************
* 函数名 : Check_Message_rec
* 描述 : 检查是否有新信息,并执行信息内容指令
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/

void Check_New_Message(void)
{
u8 temp=0;
if(strstr(Uart1_Buf,"+CMT")!=NULL) //若缓存字符串中含有"+CMT"就表示有新的短信
{
delay_ms(3);//等待数据全部接收完成
if(strstr(Uart1_Buf,"onled")!=NULL)
{
LED = 0;
}
if(strstr(Uart1_Buf,"offled")!=NULL)
{
LED = 1;
}
CLR_Buf1();
//Second_AT_Command("AT+CMGD=1,4","OK",3);//删除短信
}
}

/*******************************************************************************
* 函数名 : Wait_CREG
* 描述 : 等待模块注册成功
* 输入 :
* 输出 :
* 返回 :
* 注意 :
*******************************************************************************/
void Wait_CREG(void)
{
u8 i;
u8 k;
i = 0;
CLR_Buf1();
while(i == 0)
{
CLR_Buf1();
UART1_SendString("AT+CREG?");//查询模块网络注册状态
UART1_SendLR();
delay_ms(250);
for(k=0;k<Buf1_Max;k++)
{
if(Uart1_Buf[k] == ':')
{
if((Uart1_Buf[k+4] == '1')||(Uart1_Buf[k+4] == '5')) //表明网络注册成功
{
i = 1;
break;
}
}
}
}
}

  • 鐢51鍗曠墖鏈鸿鍙杝im900閲鐨勭煭淇$▼搴忔庝箞鍐
    绛旓細Second_AT_Command("AT+CMGF=1","OK",3); //TEXT妯″紡 Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"","OK",3);//鎵鏈夋搷浣滈兘鍦SIM鍗′腑杩涜 }/*** 鍑芥暟鍚 : Check_Message_rec* 鎻忚堪 : 妫鏌ユ槸鍚︽湁鏂颁俊鎭,骞舵墽琛屼俊鎭唴瀹规寚浠* 杈撳叆 : * 杈撳嚭 : * 杩斿洖 : * 娉ㄦ剰 : ***...
  • 鎬庝箞鐢51鍗曠墖鏈鸿鍙杝im900a鎺ユ敹鐨勭煭淇
    绛旓細闇瑕佷覆鍙f柇鎺ユ敹鎵嶈 void Uart2InterruptReceive(void) interrupt 8 { unsigned char tmp2;//char i;//num2=0;IE2 &= (~ES2);//鍏抽棴涓插彛2鏂//ES2 = 0;if(S2CON & S2RI)//if(S2RI == 1){ S2CON &= (~S2RI);//S2RI = 0;tmp2 = S2BUF;//Uart1Send(tmp2);rev_buf2[num...
  • sim900璺熺數鑴戦氳寰堟甯镐絾鏄拰51鍗曠墖鏈閫氳灏变笉琛屼簡,51鍙戝嚭鍘荤殑AT鎸囦护...
    绛旓細sim900涓巔c鐢佃剳鏄氫俊鐢ㄧ殑鏄疪S232锛堟垨RS绯诲垪鍏跺畠鐗堟湰锛夋爣鍑嗭紝鑰51鍗曠墖鏈鐨勯氫俊鍙i潪RS绯诲垪寮傛閫氫俊鏍囧噯銆傝嫢涓51鍗曠墖鏈轰覆琛岄氫俊锛岄』鐢∕AX232涔嬬被鐨勮姱鐗囦綔鐢靛钩杞崲銆傚涓嬪浘鎵绀猴紝缁忕數骞宠浆鎹紝MAX232 鐨凾XD銆丷XD寮曡剼涓51鍗曠墖鏈虹殑RXD銆乀XD寮曡剼杩炴帴銆
  • 51鍗曠墖鏈涓sim900a鐩歌繛鎺ョ殑鏈绠鍗曠殑绋嬪簭鏄粈涔?
    绛旓細1.灏嗚嚜宸辩殑51鍗曠墖鏈鐨勪覆鍙1杩炴帴鍒癎SM鐨則x rx gnd 2.鎵惧埌绋嬪簭涓墠闈㈢殑#define澶勶紝鏍规嵁璇存槑淇敼濂借嚜宸辩殑鍗曠墖鏈洪厤缃紝缂栬瘧绋嬪簭 2.涓嬭浇绋嬪簭 3.鎸変笅妯″潡澶嶄綅閿紝鍚姩妯″潡,绛夊緟淇″彿鐏棯鐑佸彉鎱紝澶嶄綅鍗曠墖鏈 4.绛夊緟鍙戦佹垚鍔 / include <REGX52.H> define uchar unsigned char define uint unsigned int //...
  • 鎬庝箞鐢51鍗曠墖鏈鸿鍙杝im900a鎺ユ敹鐨勭煭淇
    绛旓細浣犺繖涓簲璇ユ槸鐢ㄤ覆鍙h繛鎺ョ殑鍚с傝鐭俊褰撶劧鏄線涓插彛鍙戦丄T鎸囦护 鍏蜂綋鐨凙T鎸囦护鍙互鍙傝冩ā鍧楃殑璧勬枡閲岄潰鏈夈
  • 51鍗曠墖鏈鎬庢牱鍒ゆ柇SIM900A鏀跺埌鐨勭煭淇$殑鍐呭
    绛旓細棣栧厛浣犺鐞嗚ВUnicode缂栫爜鍗忚.浣犲彲浠ヤ笅杞戒釜锛氭枃鏈笌unicode鐮佽浆鎹㈠皬宸ュ叿 浣犲氨浼氭槑鐧経nicode缂栫爜娌′竴涓眽瀛楁垨鑰呮暟鎹槸鐢4涓狝SCII鐮佺粍鎴愮殑銆備緥濡123杞崲鎴怳nicode鐮佸悗鏄細003100320033 鎵浠ヤ綘鍏堣鐞嗚ВUnicode缂栫爜鍗忚銆傚叾娆★紝鐭俊璇诲彇锛岄氬父鎯呭喌涓嬶紝閮芥湁鍏跺浐瀹氱殑鎺掑垪椤哄簭銆傝繖涓綘瑕佹煡鐪嬩竴涓嬬浉鍏崇殑璧勬枡銆傛瘡涓涓暟鎹...
  • 51鍗曠墖鏈鎬庢牱鍜SIM900a妯″潡杩炴帴璧锋潵???
    绛旓細鍒嗗埆娴嬭瘯鈥淯SB杞琓TL鈥濃SIM900a鈥濃51鍗曠墖鏈鈥濈殑UART閫氳鑳藉惁姝e父浣跨敤锛屼富瑕佹祴璇51鍗曠墖鏈鸿姱鐗嘡X-TX寮曡剼鐭帴鍚庤兘鍚﹁嚜棣栬嚜鍙戙備簩銆佹ā鍧楀崗浣滄晠闅滄帓闄 PC-USB-TTL-SIM900a PC-USB-TTL-51鍗曠墖鏈 51鍗曠墖鏈-SIM900a 涓夈侀棶棰樺師鍥犵寽娴 1銆乀X-RX杩炴帴绾垮簭閿欒 2銆乀TL-RS232鐢靛钩閿欒 3銆佸崟鐗囨満涓插彛澶氱‖浠舵帴鍏...
  • 鏅鸿兘姘磋〃sim900aGPRS涓51鍗曠墖鏈杩炴帴纭欢鍥
    绛旓細涓鑸繖涓ā鍧楃殑寮曡剼閮芥湁杈撳嚭VCC銆丟ND銆乀XD鍜孯XD銆佹ā鍧楃殑TXD鎺鍗曠墖鏈鐨凴XD 妯″潡鐨凴XD鎺ュ崟鐗囨満鐨凾XD 鍏卞湴銆
  • 鎬庝箞鐢51鍗曠墖鏈鸿鍙杝im900a鎺ユ敹鐨勭煭淇,sim900a鎺ユ敹鐨勭煭淇″埌鍝噷浜,瑕佹...
    绛旓細娌$敤杩囪繖涓ā鍧椾笉杩囧府浣犳壘鍒颁簡涓浜涜祫鏂欍傛妸鍙戦佺鐢盤C鏀规垚51鍗曠墖鏈搴旇鏄竴鏍风殑鏁堟灉 http://wenku.baidu.com/link?url=1LV69Z6dKOTgtkWRlCrws-gwOLAuALPzn37CGmTRd_Or4Q9PGsWW6641klwzpabxOUBDqL-WQ76CmfItierUp3oBf8uZKGN8KinANY4v1s3 ...
  • sim900a鍜宻im800c鐨51鍗曠墖鏈绋嬪簭涓鏍峰悧
    绛旓細sim900a鍜宻im800c鐨51鍗曠墖鏈绋嬪簭涓鏍枫傛牴鎹煡璇㈢浉鍏宠祫鏂欎俊鎭樉绀猴紝sim900a鍜宻im800c鐨51鍗曠墖鏈洪兘鏄埄鐢ㄤ覆鍙i氫俊锛岄檮浠舵槸51鍗曠墖鏈烘帶鍒禨IM800鐨勪緥绋嬶紝鍥犳浠栦滑鐨勭▼搴忔槸涓鏍风殑銆傝绠楁満绋嬪簭鏄竴缁勮绠楁満鑳借瘑鍒拰鎵ц鐨勬寚浠わ紝杩愯浜庣數瀛愯绠楁満涓婏紝婊¤冻浜轰滑鏌愮闇姹傜殑淇℃伅鍖栧伐鍏枫
  • 扩展阅读:单片机入门基础知识 ... 51单片机读取p1口状态 ... 单片机程序读取工具 ... 单片机 芯片 ... 51单片机检测不到串口 ... 单片机读取io口数据 ... 51单片机读取电阻阻值 ... 51单片机读取引脚电平 ... 读取51单片机内部的程序 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网