|
研究了下論壇里關(guān)于GSM模塊SIM900A的程序,稍微整理了一個(gè)單純接收短信來(lái)執(zhí)行自定義內(nèi)容的程序,但是沒有實(shí)物來(lái)調(diào)試,有用過(guò)的指點(diǎn)一下嗎~~~~附帶AT指令集和程序- #include <reg52.h>
- #include <absacc.h>
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
- #include <stdlib.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
-
- uchar code AT_CMGF[]= "AT+CMGF=1\r"; //發(fā)送數(shù)據(jù)為文本格式
- uchar code AT_CMGR[]= "AT+CMGR=2\r"; //讀短信
- uchar code AT_CSCA[]="AT+CSCA=\"+8613800771500\""; //設(shè)置服務(wù)中心號(hào)碼
- uchar code AT_CNMI[]= "AT+CNMI=2,1,0,0\r"; //新消息提示:設(shè)置為mode=2,mt=1
- uchar code AT_CMGD[]="AT+CMGD=1,1\r\n"; //刪除已讀消息
- uchar RsPoint=0;
- uchar RsBuf[100]; //緩存接收數(shù)據(jù)
- uint i, k,ii;
- void delayms(uint x)//延時(shí)
- {
- uint i,j;
- for(i=x;i>0;i--)
- for(j=110;j>0;j--);
- }
- //=================================================//
- void Print_Char(uchar ch) //發(fā)送單個(gè)字符
- {
- SBUF=ch; //送入緩沖區(qū)
- while(TI==0); //等待發(fā)送完畢
- TI=0; //軟件清零
- }
- //=================================================//
- void Print_Str(uchar *str)//發(fā)送字符串
- {
- while(*str!='\0')
- {
- Print_Char(*str++);
- }
- }
- //=================================================//
- void clr_rsbuf(void) //清空接收緩存
- {
- for(RsPoint=0;RsPoint<100;RsPoint++)
- {
- RsBuf[RsPoint]=0x00;
- }
- RsPoint=0;
- }
- //======================================================//
- void ser()interrupt 4 //串口中斷,接受數(shù)據(jù)
- {
- if(RI==1)
- {
- RI=0;
- RsBuf[RsPoint++]=SBUF;
- if (RsPoint>=sizeof(RsBuf)) //計(jì)算對(duì)象類型大小
- {
- RsPoint=0;//FlagRs485=0;
- }
- }
- }
- //=================================================//
- Ini_UART(void)//串口初始化、定時(shí)器初始化
- {
- TMOD = 0x20; //T1方式2,用于UART波特率
- TH1 = 0xFD; //UART波特率設(shè)置:9600
- TL1 = 0xFD;
- SCON = 0x50; ////UART方式1:8位UART; REN=1:允許接收
- PCON = 0x00;
-
- TF1 = 1; // 中斷標(biāo)志位
- TR1 = 1; // 啟動(dòng)定時(shí)器1
- ES=1; //啟動(dòng)串行口中斷
- ET0=1; //啟動(dòng)中斷功能
- EA=1;
- }
- //=================================================//
- void ScanMessage(void) //信息檢測(cè)
- {
- for(ii=0;ii<100;ii++)
- if(RsBuf[ii-3]=='C'&&RsBuf[ii-2]=='M'&&RsBuf[ii-1]=='T'&&RsBuf[ii]=='I') //接收到短信后返回的指令
- {
- clr_rsbuf();
- Print_Str(AT_CMGR); //讀短信
- delayms(250);delayms(250);delayms(250);delayms(250);
-
- for(i=0;i<100;i++)
- {
- if(RsBuf[i-3]=='Z'&&RsBuf[i-2]=='F'&&RsBuf[i-1]=='C'&&RsBuf[i]=='G') //自定義接收特定的短信內(nèi)容
- { //我這里是支付成功的簡(jiǎn)寫
- //這里添加控制內(nèi)容
- }
- Print_Str(AT_CMGD); //刪除已讀短信
- delayms(100);
- clr_rsbuf();
- }
-
- }
- }
- //===============================================================//
- void main()
- {
- Ini_UART();
- k=0;
- Print_Str("AT\r\n");
- delayms(100);
- Print_Str(AT_CMGF); //文本模式
- delayms(100);
- Print_Str(AT_CNMI); //新消息提示
- delayms(200);
- Print_Str("AT+CMGD=1,4\r\n"); //刪除所有短信
- delayms(100);
- clr_rsbuf(); //清緩存
- delayms(100);
- while(1)
- {
- ScanMessage();
-
-
- }
- }
復(fù)制代碼
|
|