关于CC2530芯片与GSM TC35模块的连接问题

2019-07-15 18:41发布

        论坛的朋友大家好,我是个刚接触单片机不久的新人~~~遇到了难题希望得到好心人的帮助~~~·
        我准备用CC2530芯片连接西门子公司的GSM模块TC35达到可以发短信的目的,其实就是一个串口的发送与接收,这是小弟写的程序,不能运行囧。。。。。。。希望大家不吝赐教。
        (通过检测aa的各位来判断SIM卡是否为注册好的状态,然后再发送指令让GSM发送短信,各个AT指令都是检测正确的)

  1. #include <ioCC2530.h>
  2. #include <string.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define MAXCHAR 81
  6. char  aa[MAXCHAR];
  7. char ATE0[]="ATE0 ";                 //关闭回显
  8. char CREG_CMD[]="AT+CREG? ";          //查询网络注册情况
  9. char SMS_send_Door[]="AT+CMGS=34 ";
  10. char SMS_send_Window[]="AT+CMGS=36 ";
  11. char ATCN[]="AT+CNMI=2,1 ";        //短信存入sim卡
  12. char CMGF[]="AT+CMGF=0 ";
  13. char CMGR[12]="AT+CMGR=1 ";
  14. char CMGD[12]="AT+CMGD=1 ";
  15. char Sms2_Pdu_Door[]="0891683108200805F011000B818102102105F50008A7148B6662A5FF01524D95E867094EBA95EF5165FF01";
  16. char Sms2_Pdu_Window[]="0891683108200805F011000B818102102113F20008A7168B6662A5FF0153675BA467094EBA95EF5165FF01FF01";




  17. /********************延时函数******************************/
  18. void delayms(uint xms)      //i=xms 即延时i 毫秒
  19. {
  20.     uint i,j;
  21.     for(i=xms;i>0;i--)
  22.     for(j=587;j>0;j--);
  23. }


  24. /***********************************************************
  25. 函数名称:void InitUart
  26. 函数功能:串口初始化
  27.           入口参数:无     出口参数:无
  28. ***********************************************************/
  29. void InitUart(void)
  30. {
  31. CLKCONCMD &= ~0x40;        // 设置系统时钟源为  32MHZ晶振
  32. while(CLKCONSTA & 0x40);        // 等待晶振稳定
  33. CLKCONCMD &= ~0x47;        // 设置系统主时钟频率为  32MHZ
  34. PERCFG = 0x00;           //位置1 P0口
  35. P0SEL = 0x3c;           //P0_2,P0_3,P0_4,P0_5用作串口,第二功能
  36. P2DIR &= ~0XC0;           //P0 优先作为UART0 ,优先级
  37. U0CSR |= 0x80;           //UART 方式
  38. U0GCR |= 8;           //U0GCR与U0BAUD配合
  39. U0BAUD |= 59;            // 波特率设为9600
  40. UTX0IF = 0;            //UART0 TX 中断标志初始置位1 (收发时候)
  41. U0CSR |= 0X40;           //允许接收
  42. IEN0 |= 0x84;           // 开总中断,接收中断
  43. }




  44. /****************************************************************
  45. 串口发送字符串函数
  46. ****************************************************************/
  47. void Uart_Send_String(char *Data,int len)
  48. {
  49.     {
  50.         int j;
  51.         for(j=0;j<len;j++)
  52.         {
  53.             U0DBUF = *Data++;
  54.             while(UTX0IF == 0);         //发送完成标志位
  55.             UTX0IF = 0;
  56.         }
  57.         len=0;
  58.     }
  59. }



  60. void clearBuff(void)
  61. {
  62.     int j;
  63.     for(j=0;j<MAXCHAR;j++)
  64.     {
  65.         aa[j]=0x00;
  66.     }
  67.     j=0;
  68. }


  69. void AT(void)
  70. {

  71.     while(1)
  72.     {
  73.        Uart_Send_String(ATE0,sizeof("ATE0 "));
  74.        delayms(50);

  75.        Uart_Send_String(ATCN,sizeof("AT+CNMI=2,1 "));
  76.        delayms(50);

  77.        Uart_Send_String(CMGF,sizeof("AT+CMGF=0 "));
  78.        delayms(100);

  79.        clearBuff();
  80.        Uart_Send_String(CREG_CMD,sizeof("AT+CREG? "));
  81.        delayms(50);


  82.        if(((aa[9]=='0')&&(aa[11]=='1'))||((aa[9]=='0')&&(aa[11]=='5')))
  83.        {
  84.             clearBuff();
  85.             break;
  86.        }
  87.        else
  88.        {
  89.             clearBuff();
  90.             delayms(50);
  91.        }
  92.     }
  93. }
  94. void main(void)
  95. {
  96.     InitUart();
  97.     AT();
  98.     delayms(10);


  99.     Uart_Send_String(SMS_send_Door,sizeof("AT+CMGS=34 "));
  100.     delayms(500);



  101.     Uart_Send_String(Sms2_Pdu_Door,sizeof("0891683108200805F011000B818102102105F50008A7148B6662A5FF01524D95E867094EBA95EF5165FF01"));  //发送短信内容
  102.     delayms(500);



  103.     Uart_Send_String("0x1A",sizeof("0x1A"));
  104.     delayms(500);

  105.     Uart_Send_String("ATD18200112505; ",sizeof("ATD18200112505; "));

  106.     while(1);

  107. }


  108. #pragma vector = URX0_VECTOR
  109. __interrupt void UART0_ISR(void)
  110. {
  111.     int j=0;
  112.     URX0IF = 0;                  // 清中断标志
  113.     aa[j] = U0DBUF;
  114. }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。