本帖最后由 512826028 于 2015-1-25 22:55 编辑
还有另外一个乱码的原因,可能我的发送频率太快了导致的。所以,我尽可能的都在中间间隔了1S。
我把我改良后的代码贴在这里吧。希望可以帮到有类似困惑的朋友。
/*******************************************************************************
*描 述: 此文件包含操作GSM的所有函数
*GSM 模块:SIM900A
*控制芯片:MSP430F149
*
*******************************************************************************/
#include "include.h"
extern uchar USART1BUFF[];//重新声明一下其他函数中定义的USART1BUFF数组
extern void UART_Clear_BUFF(void);
//外部声明过的函数 0 UART1,1 UART2,str为字符串指针
extern void UART_PutStr(uchar uartx, char *str);
extern void UART_PutChar(uchar uartx, char ch);
extern void DelayNms(unsigned char n);
extern void DelayNs(unsigned char n);
extern void led(int i);
extern void GPIO_OUT(uchar px, uchar data8);
extern void UART_Init(uchar uartx);
/*******************************************************************************
*SIM900初始化函数
*
*返回值:无
*测试通过时间:2015年1月22日22:58:54
*******************************************************************************/
void SIM900(void)
{
//第一步 握手
/*******************************************************
*不握手,GSM模块会一直向串口发送
* RDY
* +CFUN: 1
* +CPIN: READY
*会搞乱串口中断,和数据缓冲区。
*******************************************************/
UART_Clear_BUFF();
UART_PutStr(0,"AT\r\n\r\n");
DelayNs(1);
while(strstr((char const*)USART1BUFF,"OK")==NULL)
{
UART_Clear_BUFF();
//注意:此处必须为\R\N\R\N!!!
UART_PutStr(0,"AT\r\n\r\n");
led(1);
}
//GPIO_OUT(P2,0Xf7);//点亮一个LED灯,代表握手成功
DelayNs(1);
UART_Clear_BUFF();//
//第二步 检查SIM卡是否存在
UART_PutStr(0,"AT+CPIN?\r\n\r\n");
DelayNs(1);
while(strstr((char const*)USART1BUFF,"OK")==NULL)
{
UART_Clear_BUFF();
//注意:此处必须为\R\N\R\N!!!
UART_PutStr(0,"AT+CPIN?\r\n\r\n");
led(2);
//DelayNs(1);
}
GPIO_OUT(P2,0Xfe);
DelayNs(1);
UART_Clear_BUFF();//
//第三步 设置短信格式为GSM方式
UART_PutStr(0,"AT+CSCS=\"GSM\"\r\n\r\n");
DelayNs(1);
while(strstr((char const*)USART1BUFF,"OK")==NULL)
{
UART_Clear_BUFF();
//注意:此处必须为\R\N\R\N!!!
UART_PutStr(0,"AT+CSCS=\"GSM\"\r\n\r\n");
led(3);
}
GPIO_OUT(P2,0Xfb);
DelayNs(1);
UART_Clear_BUFF();//
//第四步 设置短信各式为 文本方式
UART_PutStr(0,"AT+CMGF=1\r\n\r\n");
DelayNs(1);
while(strstr((char const*)USART1BUFF,"OK")==NULL)
{
UART_Clear_BUFF();
//注意:此处必须为\R\N\R\N!!!
UART_PutStr(0,"AT+CMGF=1\r\n\r\n");
led(4);
}
GPIO_OUT(P2,0Xf7);
DelayNs(1);
UART_Clear_BUFF();//
}
/*******************************************************************************
*SIM900发送短信程序
*
*返回值:无
*测试通过时间:2015年1月22日22:58:54
*******************************************************************************/
void SIM900_Send_MSG()
{
DelayNs(3);
UART_PutStr(0,"AT+CMGS=\"10086\"\r\n\r\n");
DelayNs(1);
GPIO_OUT(P2,0Xef);
DelayNs(3);
UART_PutStr(0,"Hello World!");
GPIO_OUT(P2,0Xbf);
DelayNs(3);
UART_Clear_BUFF();//
UART_PutChar(0,0X1A);//发送短信
GPIO_OUT(P2,0X3c); //正在发送短信!!!!!
DelayNs(3);//等待发送结束
while(strstr((char const*)USART1BUFF,"CMGS")==NULL)
{
//UART_Clear_BUFF();
UART_PutChar(0,0X1A);
GPIO_OUT(P2,0X7f);
DelayNs(1);
GPIO_OUT(P2,0Xff);
DelayNs(1);
GPIO_OUT(P2,0X7f);
DelayNs(1);
}
}
|