搜索
bottom↓
回复: 5

关于单片机控制sim300的问题

[复制链接]

出0入0汤圆

发表于 2012-10-29 09:04:23 | 显示全部楼层 |阅读模式
本帖最后由 WYK 于 2012-10-29 09:49 编辑

我的单片机控制sim300在串口调试助手中显示,可以打电话,接电话,发短信但是就是接收不到短信,
程序没有错,在串口调试助手模拟调试没有问题,请问有没有人帮忙告诉我,问题出在哪啊?

/*****这个是接收英文短信的程序***********************/
#include<reg52.h>
#include <string.h>
#define uint8 unsigned char
#define uint16 unsigned int
//uint8 DATA[19]={};
#define Fclk      11059200UL   /*使用22.1184M晶体*/
#define BitRate   9600UL      /*波特率定义为9600*/
//#define RELOAD_COUNT   0Xb8
#define BUFLEN 100


typedef struct _UART_BUF
{
    unsigned char buf [BUFLEN+1];   // 多申请一个字符保证最后一个字符永远是'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[buf_uart1.index++] = SBUF ;
        }

        RI = 0 ;
    }
}
/********************以上为串口1收发程序***********************/


void main()
{
        char a[2];       

  char *p;
  p = NULL;
  UartInit();
  
  while(1)
  {

p=strstr((const char*)buf_uart1.buf,"SM");
if(p)
{

        a[0]=*(p+4);
        a[1]=*(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[0];        //发送数据
        while(TI==0);        //查询发送是否结束
        TI=0;        //清除发送一标志位
        if(a[1]!=0x0D)
        {
        SBUF=a[1];        //发送数据
        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);
  }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-10-29 09:38:54 | 显示全部楼层
将你发短信的AT命令贴一下,大家应该可以帮到你的

出0入0汤圆

 楼主| 发表于 2012-10-29 09:45:25 | 显示全部楼层
devcang 发表于 2012-10-29 09:38
将你发短信的AT命令贴一下,大家应该可以帮到你的

我是用 程序  来控制的。

出0入0汤圆

发表于 2012-10-29 10:17:23 | 显示全部楼层
短信更容易搞通吧?

出0入0汤圆

发表于 2012-10-29 10:24:34 | 显示全部楼层
接收程序错误

出0入0汤圆

发表于 2013-6-15 09:44:29 | 显示全部楼层
下过,参考一下!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表