WYK 发表于 2012-10-29 09:04:23

关于单片机控制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);
}
}

devcang 发表于 2012-10-29 09:38:54

将你发短信的AT命令贴一下,大家应该可以帮到你的

WYK 发表于 2012-10-29 09:45:25

RE: 关于单片机控制sim300的问题

devcang 发表于 2012-10-29 09:38 static/image/common/back.gif
将你发短信的AT命令贴一下,大家应该可以帮到你的

我是用 程序来控制的。

wkman 发表于 2012-10-29 10:17:23

短信更容易搞通吧?

liangong 发表于 2012-10-29 10:24:34

接收程序错误

ddcchh 发表于 2013-6-15 09:44:29

下过,参考一下!
页: [1]
查看完整版本: 关于单片机控制sim300的问题