|
发表于 2009-8-7 18:52:44
|
显示全部楼层
我直接就是发的出去没回应。也是单片机与短信模块之间用了RS232通讯标准,两片MAX232,可是却没回应
#include <reg51.h>
#include <string.h>
#include <stdio.h>
//#define BUFFERLEGTH 10
unsigned char *RECEIVR_buffer ;
void delay(unsigned int i)
{
unsigned char j; //当i为1000时约延时1秒
for(i;i>0;i--)
{
for(j=0;j<125;j++)
{ ; }
}
}
//-------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
// 串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
unsigned char m; //初始化串行口和波特率发生器
SCON =0x50; //选择串口工作方式1,打开接收允许
TMOD =0x20; //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
PCON = 0x80;
TR1 =1; //启动定时器T1
ET1 =0;
ES=1; //允许串行口中断
PS=1; //设计串行口中断优先级
EA =1; //单片机中断允许
}
//------------------------------------------------------------
void com_send_char(unsigned char ch)
{
SBUF=ch;
while(!TI);
TI=0;
}
void com_send_string(unsigned char *str,unsigned str_len)
{
unsigned int k= 0 ;
do
{
com_send_char(*(str + k));
k++;
} while (k < str_len);
}
//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: com_interrup()串口接收中断、不中断处理函数
// 函数功能: 接收2位数据到数据缓冲区
//--------------------------------------------------------------------------------------------------
void received()
{unsigned char n;
while(RI)
{ RI=0;
n=(*RECEIVR_buffer);
n=SBUF;
RECEIVR_buffer++;
}
}
//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: 清除缓冲区
// 函数功能:清除接收到的i位数据
//---------------------------------------------------------------
void clr(unsigned char *m,unsigned int i)
{
unsigned int k;
for(k=0;k<=i;k++)
{
m=0xff;
m++;
}
}
void main(void)
{
unsigned char *p;
UART_init(); //初始化串口
//首先发送一次数据作为测试
L1: com_send_string("AT\r\n",strlen("AT\r\n"));
//com_send_string("AT\r\n",strlen(RECEIVR_buffer)); 只发一个字母
delay(10000);
received();
p=strstr(RECEIVR_buffer,"OK") ;
if (p=NULL)
{ goto L1;
}
else
{
clr(RECEIVR_buffer,8);
}
//设置短信方式为TEXT模式
L2: com_send_string("AT+CMGF=1\r\n",strlen("AT+CMGF=1\r\n"));
delay(10000);
received();
p=strstr(RECEIVR_buffer,"OK") ;
if (p=NULL)
{goto L2; }
else
{
clr(RECEIVR_buffer,8) ;
}
//设置短信接收方
L3:com_send_string("AT+CMGS=",strlen("AT+CMGS=")) ;
com_send_char(0X22);
com_send_string("13814426338",strlen("13814426338")) ;
com_send_char(0X22); //发冒号给串口
com_send_string("\r\n",strlen("\r\n"));
delay(1000);
received();
p=strstr(RECEIVR_buffer,">") ;
if (p=NULL)
{goto L3; }
else
{
clr(RECEIVR_buffer,8) ;
}
//设置短信内容
L4: com_send_string("hello",strlen("hello")) ;
com_send_char(0X1A);
delay(1000);
received();
p=strstr(RECEIVR_buffer,"OK") ;
if (p!=NULL)
{ goto L4; }
else
{
clr(RECEIVR_buffer,8) ;
}
while(1)
{;}
} |
|