论坛的朋友大家好,我是个刚接触
单片机不久的新人~~~遇到了难题希望得到好心人的帮助~~~·
我准备用CC2530
芯片连接西门子公司的GSM模块TC35达到可以发短信的目的,其实就是一个串口的发送与接收,这是小弟写的程序,不能运行囧。。。。。。。希望大家不吝赐教。
(通过检测aa的各位来判断SIM卡是否为注册好的状态,然后再发送指令让GSM发送短信,各个AT指令都是检测正确的)
- #include <ioCC2530.h>
- #include <string.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define MAXCHAR 81
- char aa[MAXCHAR];
- char ATE0[]="ATE0
"; //关闭回显
- char CREG_CMD[]="AT+CREG?
"; //查询网络注册情况
- char SMS_send_Door[]="AT+CMGS=34
";
- char SMS_send_Window[]="AT+CMGS=36
";
- char ATCN[]="AT+CNMI=2,1
"; //短信存入sim卡
- char CMGF[]="AT+CMGF=0
";
- char CMGR[12]="AT+CMGR=1
";
- char CMGD[12]="AT+CMGD=1
";
- char Sms2_Pdu_Door[]="0891683108200805F011000B818102102105F50008A7148B6662A5FF01524D95E867094EBA95EF5165FF01";
- char Sms2_Pdu_Window[]="0891683108200805F011000B818102102113F20008A7168B6662A5FF0153675BA467094EBA95EF5165FF01FF01";
- /********************延时函数******************************/
- void delayms(uint xms) //i=xms 即延时i 毫秒
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=587;j>0;j--);
- }
- /***********************************************************
- 函数名称:void InitUart
- 函数功能:串口初始化
- 入口参数:无 出口参数:无
- ***********************************************************/
- void InitUart(void)
- {
- CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振
- while(CLKCONSTA & 0x40); // 等待晶振稳定
- CLKCONCMD &= ~0x47; // 设置系统主时钟频率为 32MHZ
- PERCFG = 0x00; //位置1 P0口
- P0SEL = 0x3c; //P0_2,P0_3,P0_4,P0_5用作串口,第二功能
- P2DIR &= ~0XC0; //P0 优先作为UART0 ,优先级
- U0CSR |= 0x80; //UART 方式
- U0GCR |= 8; //U0GCR与U0BAUD配合
- U0BAUD |= 59; // 波特率设为9600
- UTX0IF = 0; //UART0 TX 中断标志初始置位1 (收发时候)
- U0CSR |= 0X40; //允许接收
- IEN0 |= 0x84; // 开总中断,接收中断
- }
- /****************************************************************
- 串口发送字符串函数
- ****************************************************************/
- void Uart_Send_String(char *Data,int len)
- {
- {
- int j;
- for(j=0;j<len;j++)
- {
- U0DBUF = *Data++;
- while(UTX0IF == 0); //发送完成标志位
- UTX0IF = 0;
- }
- len=0;
- }
- }
- void clearBuff(void)
- {
- int j;
- for(j=0;j<MAXCHAR;j++)
- {
- aa[j]=0x00;
- }
- j=0;
- }
- void AT(void)
- {
- while(1)
- {
- Uart_Send_String(ATE0,sizeof("ATE0
"));
- delayms(50);
- Uart_Send_String(ATCN,sizeof("AT+CNMI=2,1
"));
- delayms(50);
- Uart_Send_String(CMGF,sizeof("AT+CMGF=0
"));
- delayms(100);
- clearBuff();
- Uart_Send_String(CREG_CMD,sizeof("AT+CREG?
"));
- delayms(50);
- if(((aa[9]=='0')&&(aa[11]=='1'))||((aa[9]=='0')&&(aa[11]=='5')))
- {
- clearBuff();
- break;
- }
- else
- {
- clearBuff();
- delayms(50);
- }
- }
- }
- void main(void)
- {
- InitUart();
- AT();
- delayms(10);
- Uart_Send_String(SMS_send_Door,sizeof("AT+CMGS=34
"));
- delayms(500);
- Uart_Send_String(Sms2_Pdu_Door,sizeof("0891683108200805F011000B818102102105F50008A7148B6662A5FF01524D95E867094EBA95EF5165FF01")); //发送短信内容
- delayms(500);
- Uart_Send_String("0x1A",sizeof("0x1A"));
- delayms(500);
- Uart_Send_String("ATD18200112505;
",sizeof("ATD18200112505;
"));
- while(1);
- }
- #pragma vector = URX0_VECTOR
- __interrupt void UART0_ISR(void)
- {
- int j=0;
- URX0IF = 0; // 清中断标志
- aa[j] = U0DBUF;
- }
复制代码
一周热门 更多>