查看: 2027|回复: 0
打印 上一主题 下一主题

BenQ的M33G模块做电话远程控制器

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-7 23:33:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GSM模块通过232与PC机通信测试完全正常,单片机通过232与PC上的串口助手调试也完全正常。但是单片机与GSM模块通信时就不能通信了(直通线),我不知道是软件的问题还是电平的问题,已经困扰我1周了,希望各位大虾能帮我看看。在此表示由衷的谢谢!
测试结果:P0=0X0F0口是8个LED
程序如下:
#include<regx52.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
#define RxIn 67
sbit start=P0^3;
sbit ceshi=P0^4;
uchar code AT[]="AT";        
uchar code OK[]="OK";
uchar code ATD[]="ATD13408681235;";      
uchar code ATS0[]="ATS0=3";                 
uchar code ATNOS[]="AT$NOSLEEP=1";
uchar idata SystemBuf[RxIn]; //储存出口接收数据
uchar Rx=0,flag1=0;
uint flag=0,count=0;
void Delay_ms(uint i);
void sendchar(uchar ch);
void sendstring(uchar *p);
void GSM_INIT(void);
void Start_GSM();
void UART_init (void);
main()
{
Start_GSM();
UART_init();
GSM_INIT();
while(1)
{
if(flag1)
flag1=0;
P0=0X0F;


  }

}


/*************串口初始*******************/
void UART_init (void)
{
TMOD=0x20; //方式控制字
TH1=0xfd;  //设置波特率为9600
TL1=0xfd;
TR1=1;   
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
/*************启动*******************/
void Start_GSM()
{
        start=0;
        Delay_ms(500);
        start=1;
        Delay_ms(1000);
}



/******************************************************************************************************************/
////////////////////////////////函数void Delay_ms(uint i);实现功能:进行毫秒延时///////////////////////////////////
/******************************************************************************************************************/
void Delay_ms(uint i)
{
    unsigned int j;
    for(;i>0;i--)
        {
    for(j=0;j<125;j++)
    {;}
}
}

/******************************************************************************************************************/
//////////////////////函数void sendchar(uchar ch);实现功能:发送一字节数据//////////////////////////////////////////
/******************************************************************************************************************/
void sendchar(uchar ch)
{
    SBUF=ch;
while(TI==0);
TI=0;
}

/******************************************************************************************************************/
//////////////////////函数void sendstring(uchar *p);实现功能:通过串口发送字符串/////////////////////////////////////
/******************************************************************************************************************/
void sendstring(uchar *p)
{
  
  while(*p)
  {
  sendchar(*p);
  p++;
}
  sendchar(0x0D);
  sendchar(0x0A);
}
/******************************************************************************************************************/
///////////////////函数void receive(void) interrupt 4 using 1;实现功能:通过串口接收数据///////////////////////////////
/******************************************************************************************************************/
void receive(void) interrupt 4 using 1
{  
        if(RI)
      {
        if(Rx<RxIn)
                  {
                    SystemBuf[Rx]=SBUF;
                    Rx++;
                  }
        RI=0;
     }
}


/*************清楚缓冲区*******************/
void clearbuffer(void)//清除缓冲区
{ uchar cl;
for(cl=0;cl<RxIn;cl++)
                {
                        SystemBuf[cl]=0x00;   
                }
                Rx=0;
}
/******************************************************************************************************************/
///////////////////函数void GSM_INIT(void);实现功能:初始化GSM模块///////////////////////////////
/******************************************************************************************************************/
void GSM_INIT(void)
{  

LOOP:
// Delay_ms(1000);
// sendstring(AT);
Delay_ms(1000);
sendstring(ATNOS);
Delay_ms(1000);
sendstring(ATS0);
Delay_ms(1000);
// sendstring(ATD);
//Delay_ms(1000);
//    sendstring(ATE);
//  Delay_ms(1000);
//  sendstring(AT_CNMI);
// Delay_ms(1000);
//  sendstring(AT_CSCA);
// Delay_ms(1000);
//  for(Rx=0;Rx<RxIn;Rx++)
//                {
//                        SystemBuf[Rx]=0x00;   
//                }
//                Rx=0;
//    sendstring(AT_CMGF);
//  Delay_ms(1000);

   
if(SystemBuf[0]=='O'&&SystemBuf[1]=='K')  //判断是否模块初始化成功,成功的话模块会回复"OK"给单片机
    {         
                  EA=0;                        //如果单片机没有收到OK,就继续发送初始化指令/
          clearbuffer();                    
            
           flag1=1;
                  
                 }      
        else
        {                              
       clearbuffer();
        goto LOOP;   
        }
   }

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

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