我用msp430f149控制GSM模块TC35收短信。程序如下(非常简单,我只发送了AT指令,想收到OK,GSM模块在收到AT后有回应,则由P2控制的LED发光。):
#include <msp430x14x.h>
#include "BoardConfig.h"
#define uint unsigned int
#define uchar unsigned char
uchar i_receive,TC35_RE[80],TC35_MAX,i_TC35_RECE;
void delay(uint i)
{
uint i_delay,j_delay;
for(i_delay=0;i_delay<i;i_delay++)
{
for(j_delay=0;j_delay<100;j_delay++)
{;}
}
}
void send_uart( uchar ch)
{
while (UTXIFG0==0);//如果UTXIFG0 为0 就卡在这里
TXBUF0=ch;//一旦把字符发送给发送缓存,UTXIFG0 会自动被置成0
}
void AT_TEST()
{
send_uart('A');
send_uart('T');
send_uart(0X0D);
send_uart(0x0A);
}
/********************主函数********************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P3SEL |= 0x30; // 选择P3.4 和P3.5 做UART 通信端口
P3DIR |= BIT4;
ME1 |= UTXE0 + URXE0; // 使能USART0 的发送和接受
UCTL0 |= CHAR; // 选择8 位字符
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x03; // 波特率9600
UBR10 = 0x00; //
UMCTL0 = 0x4A; // Modulation
UCTL0 &= ~SWRST; // 初始化UART 状态机
IE1 |= URXIE0; // 使能USART0 的接收中断,也即一旦有数据出现在串口上,就会产生中断
delay(1000);
P2OUT=0XFF;
P2DIR=0XFF;
_EINT(); //打开全局中断
TC35_MAX=0;
AT_TEST();
while(1)
{
if(TC35_MAX>0)
P2OUT=0XF0;
}
}
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
i_receive=RXBUF0;//一旦你从缓存中读取数据,URXIFG0 会自动置0
TC35_RE[i_TC35_RECE]=i_receive;
i_TC35_RECE=i_TC35_RECE+1;
if(i_TC35_RECE>TC35_MAX)
{
TC35_MAX=i_TC35_RECE;//TC35_MAX 最后就是回应信息的长度
}
}
我在计算机上用串口调试助手测试GSM模块是没问题的。我把AT命令发给GSM模块,然后记录下它的返回信息。并且用其他手机发短信到GSM模块上的卡,其返回信息也没问题!!
我又把单片机的串口与电脑相连,发现单片机的串口可以正常工作。我发送给单片机一个数据,它能够通过串口再发到电脑上。
但是,当我把单片机和GSM模块连接在一起使用的时候,就是不行……没有反应……。
我单片机和GSM都是通过232通信的。
就这部分,至少苦思冥想十几个小时了,,依然没有任何进展……求高手帮忙分析下是为什么呢。。非常感谢
如果可以的话,加我QQ584030790或邮箱584030790@qq.com联系,非常感谢!! |