关于单片机控制sim300的问题
本帖最后由 WYK 于 2012-10-29 09:49 编辑我的单片机控制sim300在串口调试助手中显示,可以打电话,接电话,发短信但是就是接收不到短信,
程序没有错,在串口调试助手模拟调试没有问题,请问有没有人帮忙告诉我,问题出在哪啊?
/*****这个是接收英文短信的程序***********************/
#include<reg52.h>
#include <string.h>
#define uint8 unsigned char
#define uint16 unsigned int
//uint8 DATA={};
#define Fclk 11059200UL /*使用22.1184M晶体*/
#define BitRate 9600UL /*波特率定义为9600*/
//#define RELOAD_COUNT 0Xb8
#define BUFLEN 100
typedef struct _UART_BUF
{
unsigned char buf ; // 多申请一个字符保证最后一个字符永远是'0'
unsigned int index ;
}UART_BUF;
UART_BUF idata buf_uart1 ;
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void UartInit()
{
SCON=0X50; //8位可变波特率,无奇偶校验,方式1,10位异步收发器,8位数据位
TMOD=0X21; //设置定时器1,自动重装数
TH1=256-Fclk/(BitRate*12*16);//计算定时器重装值
TL1=256-Fclk/(BitRate*12*16);
PCON|=0X80; //波特率加倍
TR1=1; //开定时器1
REN=1; //允许接收
ES=1; // 允许串口1中断
EA=1; // 开总中断
}
void UartSendByte(unsigned char i)//单片机向主机发送数据
{
ES=0;
TI=0;
SBUF=i;
while(TI==0);
TI=0;
ES=1;
}
void send_string_uart1(char * S)
{
while(*S)
{
UartSendByte(*S++);
}
}
void clear_buf_uart1()
{
unsigned int i = 0 ,c ;
c = BUFLEN +1 ;
ES = 0 ;
for( i = 0 ; i < c ; i ++)
{
buf_uart1.buf = 0x0 ;
}
buf_uart1.index = 0 ;
ES = 1 ;
}
/********************************************************************函数功能:串口中断处理。入口参数:无。返 回:无。备 注:无。********************************************************************/
void UartISR(void) interrupt 4 //主机接收单片机数据
{
if(RI)
{
if(buf_uart1.index >= BUFLEN)
{
buf_uart1.index = 0 ;
}
else
{
buf_uart1.buf = SBUF ;
}
RI = 0 ;
}
}
/********************以上为串口1收发程序***********************/
void main()
{
char a;
char *p;
p = NULL;
UartInit();
while(1)
{
p=strstr((const char*)buf_uart1.buf,"SM");
if(p)
{
a=*(p+4);
a=*(p+5);
send_string_uart1("AT+CNMI=2,1\r");
delay(3000);
send_string_uart1("AT+CMGF=1\r");
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
delay(1000);
send_string_uart1("AT+CMGR=");
SBUF=a; //发送数据
while(TI==0); //查询发送是否结束
TI=0; //清除发送一标志位
if(a!=0x0D)
{
SBUF=a; //发送数据
while(TI==0); //查询发送是否结束
TI=0;
}
send_string_uart1("\r");
}
p=strstr((const char*)buf_uart1.buf,"led");
if(p)
{
P2 =0x00;
delay(1000);
P2=0XFF;
delay(1000);
P2 =0x00;
delay(1000);
P2=0XFF;
delay(1000);
}
clear_buf_uart1();
delay(1000);
delay(1000);
delay(1000);
}
} 将你发短信的AT命令贴一下,大家应该可以帮到你的
RE: 关于单片机控制sim300的问题
devcang 发表于 2012-10-29 09:38 static/image/common/back.gif将你发短信的AT命令贴一下,大家应该可以帮到你的
我是用 程序来控制的。 短信更容易搞通吧? 接收程序错误 下过,参考一下!
页:
[1]