#include
#include
#define uint unsigned int
#define uchar unsigned char
#define RST 0X01
#define CMGF 0X02
#define CMGD 0X03
#define CREG 0X04
#define CMGR 0X05
#define CMGS 0X06
#define CSCA 0X07
#define ATDAT 0X08
#define TC35RET 0X00
sbit IGT=P1^0;
本文引用地址:
http://www.ex-cimer.com/article/201611/319959.htm
uchar TC35_CON;
uchar i_TC35_RECE;
uchar TC35_RE[30],
TC35_MAX,
i_TC35;
extern uchar TC35_CON;
extern uchar i_TC35_RECE;
extern uchar i_receive,
TC35_RE[30],
TC35_MAX,
i_TC35;
void delay(uint);
void init_serialcom( void );
void send_uart( unsigned char);
void ATNAME(void);
void AT_CMGS(void);
void AT_CSCA(void);
void AT_RST(void);
void AT_CREG(void);
void AT_CMGF(void);
void AT_CMGR(void);
void AT_CMGD(void);
uchar code TC_MDSJ[]={"AT+CMGS=13969138509"};
//目的手機(jī)地址,
uchar code TC_ZXH[]={"AT+CSCA=+8613800531500"};
//本地中心號(hào)。
////////其他地方不要亂動(dòng)//
uchar code TC_FSNR[]={"zhangkaiqiang"};
//發(fā)送短信內(nèi)容。
uchar code TC_WLZT[]={"AT+CREG?"};
//網(wǎng)絡(luò)狀態(tài)查詢
uchar code TC_MSXZ[]={"AT+CMGF=1"};
//發(fā)送模式選擇。
uchar code TC_DQML[]={"AT+CMGR=1"};
//短信讀取命令。
uchar code TC_SCML[]={"AT+CMGD=1"};
//短信刪除命令。
uchar code TC_ATF[]={"AT&F"};
//格式化命令。
void delay(uint i)
{
unsigned int i_delay,j_delay;
for(i_delay=0;i_delay {
for(j_delay=0;j_delay<100;j_delay++)
{;}
}
}
void init_serialcom( void )
{
SCON = 0x50 ;
//SCON: serail mode 1, 8-bit UART, enable ucvr
//UART為模式1,8位數(shù)據(jù),允許接收
TMOD |= 0x20 ;
//TMOD: timer 1, mode 2, 8-bit reload
//定時(shí)器1為模式2,8位自動(dòng)重裝
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xFD ; //Baud:19200 fosc="11".0592MHz
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
TI=1;
}
//向串口發(fā)送一個(gè)字符
void send_uart( unsigned char ch)
{
while (TI==0);
TI= 0 ;
SBUF=ch;
}
//串口接收中斷函數(shù)
void serial () interrupt 4 using 3
{
if (RI)
{
RI = 0 ;
i_receive=SBUF;
TC35_RE[i_TC35_RECE++]=i_receive;
// i_TC35_RECE++;
if(i_TC35_RECE>TC35_MAX)
{
TC35_MAX=i_TC35_RECE;
}
}
}
void ATNAME()
{
uchar i;
for(i=0;i {
send_uart(TC_FSNR[i]);
}
delay(1000);
send_uart(0X1A);
TC35_CON=ATDAT;
}
//寫目的手機(jī)的
void AT_CMGS()
{
uchar i;
for(i=0;i {
send_uart(TC_MDSJ[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CMGS;
}
//寫信息中心號(hào)
void AT_CSCA()
{
uchar i;
for(i=0;i {
send_uart(TC_ZXH[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CSCA;
}
//AT復(fù)位指令
void AT_RST()
{
uchar i;
for(i=0;i {
send_uart(TC_ATF[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=RST;
}
//AT網(wǎng)絡(luò)狀態(tài)查詢指令
void AT_CREG()
{
uchar i;
for(i=0;i {
send_uart(TC_WLZT[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CREG;
}
//AT接收格式指令
void AT_CMGF()
{
uchar i;
for(i=0;i {
send_uart(TC_MSXZ[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CMGF;
}
//AT短消息讀取指令
void AT_CMGR()
{
uchar i;
for(i=0;i {
send_uart(TC_DQML[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CMGR;
}
//AT短消息刪除指令
void AT_CMGD()
{
uchar i;
for(i=0;i {
send_uart(TC_SCML[i]);
}
send_uart(0X0D);
send_uart(0X0D);
send_uart(0X0A);
TC35_CON=CMGD;
}
void delay1(void) //誤差 0us
{
unsigned char a,b,c;
for(c=19;c>0;c--)
for(b=20;b>0;b--)
for(a=150;a>0;a--);
}
void GSM(void)
{
uchar shou=100;
IGT=0;
delay1();
IGT=1;
init_serialcom(); //初始化串口
delay(100);
TC35_MAX=0;
AT_RST();
while(shou--)
{
delay(100);
if(TC35_MAX>0)
{
if(TC35_CON==RST)//TC35_CON==0x01
{
if((TC35_RE[7]==O)&&(TC35_RE[8]==K))
{
TC35_CON=TC35RET;
AT_CMGF();
}
else
{}
}
//AT+CMGF 優(yōu)先信息格式。執(zhí)行格式有TEXT 方式和PDU 方式。
else if(TC35_CON==CMGF) //TC35_CON==0x02
{
if((TC35_RE[12]==O)&&(TC35_RE[13]==K))
{
TC35_CON=TC35RET; // delay(100);
AT_CREG();
}
else
{}
}
//AT+CREG 網(wǎng)絡(luò)注冊(cè)。獲得手機(jī)的注冊(cè)狀態(tài)。
else if(TC35_CON==CREG)//TC35_CON==0x04
{
if(((TC35_RE[18]==0)&&(TC35_RE[20]==1))||((TC35_RE[18]==0)&&(TC35_RE[20]==5)))
{
TC35_CON=TC35RET;
AT_CMGD();
}
else
{
AT_CREG();
}
}
//AT+CMGR 讀短信。信息從+CPMS 命令設(shè)定的存儲(chǔ)器讀取。
else if(TC35_CON==CMGR)//TC35_CON==0x05
{
if(TC35_MAX<=30)
{
AT_CMGR();
}
else //if((TC35_MAX==77)||(TC35_MAX==79))
{
if(TC35_RE[69]==0)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==1)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==2)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==3)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==4)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==5)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==6)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else if(TC35_RE[69]==7)
{
TC35_CON=TC35RET;
delay(100);
AT_CMGD();
}
else
{
TC35_CON=TC35RET;
AT_CMGR();
}
}
}
//AT+CMGD 刪除短信息。刪除一個(gè)或多個(gè)短信息。
else if(TC35_CON==CMGD)//TC35_CON==0x03
{
delay(100);
if((TC35_RE[12]==O)&&(TC35_RE[13]==K))
{
AT_CSCA();
}
else
{
}
}
//AT+CSCA 短信服務(wù)中心地址。
else if(TC35_CON==CSCA)//TC35_CON==0x07
{
delay(100);
if((TC35_RE[25]==O)&&(TC35_RE[26]==K))
{
AT_CMGS();
}
else
{
}
}
//填寫發(fā)送內(nèi)容
else if(TC35_CON==CMGS)//TC35_CON==0x06
{
delay(100);
if((TC35_RE[22]==0X3E)&&(TC35_RE[23]==0X20))
{
ATNAME();
}
else{}
}
//發(fā)送完畢返回繼續(xù)掃描接收
else if(TC35_CON==ATDAT)//0x08
{
delay(100);
if((TC35_RE[0]==+)||(TC35_RE[0]==0x1A))
{
AT_CMGR();
}
else
{}
}
//復(fù)位接收組
for(i_TC35=0;i_TC35<=TC35_MAX;i_TC35++)
{
TC35_RE[i_TC35]=0;
}
i_TC35_RECE=0;
TC35_MAX=0;
}
}
}
void main()
{
GSM();
}
評(píng)論