zhanyicai000 发表于 2012-9-8 14:44:24

stc12c5a60s2与SIM300的问题啊???

本帖最后由 zhanyicai000 于 2012-9-8 16:04 编辑

小弟,最近在弄這個SIM300 GSM/GPRS的模块,,,我用的MCU是:stc12c5a60s2,,串口而通信,,求各位大神指导一下:,有基本例程的贴一下最好了,,呵呵,还有论坛上我也看过一下他们说跳出来的例程,,我套用了一下,在我的板上是不行的,,我的SIM300模块是 http://item.taobao.com/item.htm?spm=a1z10.1.4.19.fb8b58&id=5020180338这个板,,自带的程序也太不行,但串口助手发送指令的话就可以,,应该是程序问题::求各位大神知道知道,有基本例程的贴一下最好了,。


我写的程序--只要可以发个信息就好了,,不知道哪里出错了
uint i = 0;
       
    Uart1_Init();      //串口1初始化
    Uart2_Init();      //串口2初始化
    AUXR |= 0x02;

        Delay_1us(1);
        Delay_1ms(1);
        Delay_1s(1);
    while(1)
        {
           if(i==0)
                {
                        Send_Uart1_Str("at\r");
                        Send_Uart1_Enter(1);
                        Delay_1us(2);
                        Send_Uart1_Str("ate1\r");
                        Send_Uart1_Enter(1);
                        Delay_1us(2);
                        Send_Uart1_Str("atv1\r");
                        Send_Uart1_Enter(1);
                        Delay_1us(2);
                        Send_Uart1_Str("at+cpgf=1\r");
                        Send_Uart1_Enter(1);
                        Delay_1us(2);
                        Send_Uart1_Str("at+cmgs=\"13538074093\"\r");
                        Send_Uart1_Enter(1);
                        Delay_1us(2);
                        Send_Uart1_Str("are you ok\r");
                        Send_Uart1_Enter(1);
                        Delay_1us(2);

                        Send_Uart1_Byte(0x1a);
                        Send_Uart1_Enter(1);
                        Delay_1us(2);
                        i=1;
                }
               
        }

lcw_swust 发表于 2012-9-9 09:13:23

貌似发0x1a之前需要有较大的延时

zhanyicai000 发表于 2012-9-9 09:20:17

本帖最后由 zhanyicai000 于 2012-9-9 16:38 编辑

这个是我现在改的程序,加了设置波特率的指令,,但还是没效果

能不能帮我看看,哪里还有不对的地方嘛

    while(1)
        {
           if(i==0)                                                                                                                                     
                {
                    P16=0;
                        Send_Uart1_Str("at");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);
                        Send_Uart1_Str("at");
                        Send_Uart1_Enter(1); //====Send_Uart1_Byte(0xD);//回车Send_Uart1_Byte(0xA);//换行
       
                        Delay_1ms(500);
                        Send_Uart1_Str("at");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);
                        Send_Uart1_Str("AT+IPR=9600");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);                                                                                                                                                          
                        Send_Uart1_Str("ate1");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);
                        Send_Uart1_Str("atv1");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);
                        Send_Uart1_Str("at+cpgf=1");           //AT+CMGF=1短信模式设置Text模式;AT+CMGF=0PDU模式
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);
                        Send_Uart1_Str("at+cmgs=\"18718579905\"");        //发送短信AT指令头+接收短信号码    改为你要发送短信的目标手机的号码    //an ning
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);
                        Send_Uart1_Str("are you ok");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);

                        Delay_1s(3);
                        Send_Uart1_Byte(0x1a);
                        Send_Uart1_Enter(1);
                //        Delay_1s(2);
                        i=1;
                        P16=1;
                }

lcw_swust 发表于 2012-9-9 09:32:12

zhanyicai000 发表于 2012-9-9 09:20 static/image/common/back.gif
能不能帮我看看,哪里还有不对的地方嘛

没用过这模块,只用过MC35I之类的,有些操作需要加较大的延时。
而且你也说“串口助手发送指令的话就可”,那估计就是延时的问题。

yuanbuqi 发表于 2012-9-9 10:15:04

还有波特率要设一下,有时候自适应是不行的

zhanyicai000 发表于 2012-9-9 10:27:30

zhanyicai000 发表于 2012-9-9 09:20 static/image/common/back.gif
能不能帮我看看,哪里还有不对的地方嘛

我改成了延时3秒但还是不行啊

zhanyicai000 发表于 2012-9-9 10:29:36

yuanbuqi 发表于 2012-9-9 10:15 static/image/common/back.gif
还有波特率要设一下,有时候自适应是不行的

问一下,,要不要断开单片机这边“串口助手”的232啊,,我看别的坛里有人这样说,,不知道是不是这样

yuanbuqi 发表于 2012-9-9 15:23:51

zhanyicai000 发表于 2012-9-9 10:29 static/image/common/back.gif
问一下,,要不要断开单片机这边“串口助手”的232啊,,我看别的坛里有人这样说,,不知道是不是这样 ...

如果你电脑上没发过来,一般都不用

zhanyicai000 发表于 2012-9-9 16:35:00

yuanbuqi 发表于 2012-9-9 15:23 static/image/common/back.gif
如果你电脑上没发过来,一般都不用

你能帮我看看,,程序哪有问题啊啊,,发出去了,,但就是没有效果啊

yuanbuqi 发表于 2012-9-9 19:37:49

zhanyicai000 发表于 2012-9-9 16:35 static/image/common/back.gif
你能帮我看看,,程序哪有问题啊啊,,发出去了,,但就是没有效果啊

你试试将模块发过来的数据让它发回你的电脑,这样你就可以看哪里出错了

zhanyicai000 发表于 2012-9-11 15:17:28

yuanbuqi 发表于 2012-9-9 19:37 static/image/common/back.gif
你试试将模块发过来的数据让它发回你的电脑,这样你就可以看哪里出错了 ...

串口助手一直返回这个啊,,不知道 是我函数错了还是啥问题啊?、、求解决

yuanbuqi 发表于 2012-9-11 17:08:38

zhanyicai000 发表于 2012-9-11 15:17 static/image/common/back.gif
串口助手一直返回这个啊,,不知道 是我函数错了还是啥问题啊?、、求解决 ...

肯定是你是函数错了,模块接收的识别不了,返回错误

zhanyicai000 发表于 2012-9-11 19:18:58

yuanbuqi 发表于 2012-9-11 17:08 static/image/common/back.gif
肯定是你是函数错了,模块接收的识别不了,返回错误

求教,,你说的是哪个函数啊,,你能帮我看看那呗

Uart1_Init();      //串口1初始化
    Uart2_Init();      //串口2初始化

        P17=0;
        Delay_1us(1);
        Delay_1ms(1);
        Delay_1s(5);
    while(1)
        {
           if(i==0)                                                                                                                                     
                {
                    
                        P16=0;
                        Send_Uart1_Str("at");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);
                  Send_Uart1_Str("at");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);

                        Send_Uart1_Str("AT+IPR=9600");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);       
                                                                                                                                                                          
                        Send_Uart1_Str("ate1");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);
                        Send_Uart1_Str("atv1");
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);

                        Send_Uart1_Str("at+cpgf=1");           //AT+CMGF=1短信模式设置Text模式;AT+CMGF=0PDU模式
                        Send_Uart1_Enter(1);
                        Delay_1ms(500);

                        Send_Uart1_Str("at+cmgs=\"13538074093\"");        //发送短信AT指令头+接收短信号码    改为你要发送短信的目标手机的号码    //an ning
                        Delay_1ms(500);
                        Send_Uart1_Enter(1);
                        Delay_1ms(900);

                        Send_Uart1_Str("are you ok");
                        Delay_1ms(500);

                        Send_Uart1_Byte(0x1a);
                        Send_Uart1_Enter(1);
                  Delay_1ms(500);

                        i=1;
                        P16=1;
                }




//************************ "my_delay.h"**********************************************************


void Delay_1us(uchar time)        //延时1微秒
{
    unsigned char a,b;
        for(b=time;b>0;b--)
          for(a=1;a>0;a--)
                  _nop_();
}
void Delay_1ms(uchar time)        //延时1毫秒
{
   unsigned char a,b,c;
   for(c=time;c>0;c--)
       for(b=18;b>0;b--)
      for(a=152;a>0;a--)
                    _nop_();
}
void Delay_1s(uchar time)   //延时1秒
{
    uchar i,j;
        for( i=0;i<time;i++ )
          for( j=0;j<5;j++)
                  Delay_1ms(200);
}




//****************************Uart1.c***********************************

bit   Uart1_Flag = 0;            //串口1收到数据标志位
unsigned char Uart1_Data;       //串口1收到数据
/**********************/
unsigned char a = 0;
uchar flag=0;
/***********************/
/*
//串口1初始化       串口1用独立波特率发生器
void Uart1_Init()
{
    SCON    =   0x50;   //0101,0000 8位可变波特率,无奇偶校验位
//   TMOD    =   0x21;   //0011,0001 设置定时器1为8位自动重装计数器
//    TH1   =   RELOAD_COUNT;   //设置定时器1自动重装数
//    TL1   =   RELOAD_COUNT;
//    TR1   =   1;    //开定时器1
//        BRT        =        RELOAD_COUNT;//给定BRT独立波特率发生器的溢出率
    BRT = -SYSCLK/12/32/BAUDRATE1;
//BRTR = 1, S1BRS = 1, EXTRAM = 1 ENABLE EXTRAM
        AUXR        =        0x11; // T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,EXTRAM,S1BRS       
    ES      =   1;    //允许串口中断
    EA      =   1;    //开总中断
}
*/

//串口1初始化       串口1用定时器1波特率发生器
void Uart1_Init()
{
    SCON    =   0x50;   //0101,0000 8位可变波特率,无奇偶校验位
        TMOD    =   0x21;   //0010,0001 设置定时器1为8位自动重装计数器

        /*********************/
        /*
    TH1   =   -SYSCLK/12/32/BAUDRATE1;   //设置定时器1自动重装数
    TL1   =   -SYSCLK/12/32/BAUDRATE1;
        */
        /*******原版改为一下:11.0592M晶振下波特率为9600的TH.TL的值:*********/

        TH1=0XFD;
        TL1=0XFD;

    TR1   =   1;    //开定时器1
    ES      =   1;    //允许串口中断

        ////////设置串口1为中断优先级2--较高优先级/////////////////
        PS=0;            // IP&=0xEF;
        IPH|=0x10;       
   //////////////////////////

    EA      =   1;    //开总中断

}

//串口1发送一个字节
void Send_Uart1_Byte(uchar i)
{
    ES   =   0;//关串口中断
    TI   =   0;//清零串口发送完成中断请求标志
    SBUF   =   i;
    while(TI ==0); //等待发送完成
    TI   =   0;//清零串口发送完成中断请求标志
    ES   =   1;//允许串口中断
}





//**************

//---------------------------------------------------------------
//----打印换行---------------------------------------------------
//---------------------------------------------------------------
void Send_Uart1_Enter(bit a)
{

Send_Uart1_Byte(0xD);               //回车

if(a==1)
        Send_Uart1_Byte(0xA);               //换行

}

//***********************
//----将字符串发送到串口1--------------------------------------
//---------------------------------------------------------------
void Send_Uart1_Str(uchar *s)         //单片机向其他设备发送数据
{
       int len=strlen(s);                  //-1
       int i;

       for(i=0;i<len;i++)
       {               
              if(s=='\n')
               {
                        Send_Uart1_Enter(1);
               }
               else
                       Send_Uart1_Byte(s);
       }
}

/**********************/



//串口1收到一个字节
unsigned char Receive_Uart1_Byte(void)
{
    uchar R1_data = 0;
        while( RI == 0 );
        RI = 0;
        R1_data = SBUF;
        return R1_data;
}
//串口1接收中断
void Uart1_Interrupt_Receive(void) interrupt 4
{


/*        if( RI )
        {
      Uart1_Data = Receive_Uart1_Byte();
                if( Uart1_Data!= 0x5E )
                  goto LOOP;
                while( Uart1_Data != 0x0D )
                {
                        i++ ;
                        if( i == DATA_NUM1 )
                                goto LOOP;
                        Uart1_Data = Receive_Uart1_Byte();
                }
          Uart1_Flag = 1;               
        }
LOOP:
        i = 0;       */
   
        /*****************/
        a=SBUF;
       
        RI=0;
        flag=1;       

        if(flag==1)
        {
          ES=0;
                flag=0;
                SBUF=a;
                while(!TI);                  //等待发送完成,
       
                TI=0;      
                ES=1;
        }
        /********************/
}

yuanbuqi 发表于 2012-9-11 21:58:15

zhanyicai000 发表于 2012-9-11 19:18 static/image/common/back.gif
求教,,你说的是哪个函数啊,,你能帮我看看那呗

Uart1_Init();      //串口1初始化


看了下,有的乱,我还是给份程序你参考下吧,程序也是在其他地方下载的,应该可以用的

zhanyicai000 发表于 2012-9-11 23:03:37

yuanbuqi 发表于 2012-9-11 21:58 static/image/common/back.gif
看了下,有的乱,我还是给份程序你参考下吧,程序也是在其他地方下载的,应该可以用的 ...

恩,,谢谢,,这个UART程序我是参考网上弄的
,,呵呵初学程序还写的很菜

yuanbuqi 发表于 2012-9-12 10:28:27

zhanyicai000 发表于 2012-9-11 23:03 static/image/common/back.gif
恩,,谢谢,,这个UART程序我是参考网上弄的
,,呵呵初学程序还写的很菜 ...

模块的波特率你设好了没?先用串口助手AT+IPR?查查波特率是多少

zhanyicai000 发表于 2012-9-12 15:13:55

哦哦,我试了,,是波特率没改,,但我用串口是时候也没设置它的波特率啊,,也可以你发给,,,你发给我的那个程序我试试了一下,,那个发短信的试了,,是可以,,但就是我复位后好像有时又不行,,不知道是不是SIM300没准备好。。。求指导,,先谢谢你啊,,弄那么就突然下载器下载不了了,,休息吧
页: [1]
查看完整版本: stc12c5a60s2与SIM300的问题啊???