2019-07-15 16:32发布
youlikai 发表于 2014-11-13 21:44 我有,而且我之前做过,有些经验可以给你,比如每条AT指令之间最好有几秒的间隔发送 ...
最多设置5个标签!
可以给你QQ我吗??想你学习学习,我的出错了这是我的代码,帮帮我吧
#include<msp430.h>
#include"BoardConfig.h"
char star[]="AT&F ";
char AT[]="AT "; //握手信号//3Chars
char ATCMGF[]="AT+CMGF=1 "; //text格式//10Chars
char ATCMGS[]="AT+CMGS=1392*****0 ";
char Data[]="HHH";
//unsigned char ATCSCA[]="AT+CSCA="+8613010980500" ";
void GsmSend(void);
void UART0_Init (void);
void DelayNS (unsigned int dly);
void uart1Puts( char *s);
void uart1Putc( char c);
unsigned char len;
char gsmRxBuf[88] = {0}; //接收GSM模块数据
char gsmRxLen = 0; //接收数据长度
//主程序
void main()
{
WDTCTL = WDTPW +WDTHOLD;
UART0_Init();
// DelayNS(2000);//等待
P1DIR&=~BIT3;
P1REN=BIT3;
P1OUT=BIT3;
P1DIR|=BIT0;
while(1)
{
if((BIT3 & P1IN)==0)
{
delay_ms(25);
if((BIT3 & P1IN)==0)
{
P1OUT^=BIT0;
GsmSend();
P1OUT^=BIT0;
while(!(BIT3 & P1IN));
}
}
}
}
//uart初始化
void UART0_Init(void)
{
if (CALBC1_1MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSWRST;
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 109; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
// UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0MCTL = 0x10;
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(GIE); // interrupts enabled
}
//时间延迟
void DelayNS(unsigned int dly)
{
unsigned int i;
for(;dly>0;dly--)
for(i=0;i<2000;i++);
}
void GsmSend(void)
{
// uart1Puts(star);
// delay_ms(2000);
uart1Puts(AT);
delay_ms(2000);
// __delay_cycles(1000000);
uart1Puts(ATCMGF);
// __delay_cycles(1000000);
delay_ms(2000);
uart1Puts(ATCMGS);
delay_ms(2000);
// __delay_cycles(1000000);
uart1Puts(Data);
delay_ms(2000);
// __delay_cycles(10000000);
while(!(IFG2 & UCA0TXIFG)); //发送符
UCA0TXBUF=0x1a;
// while(!(IFG2 & UCA0TXIFG));
delay_ms(2000);
}
void uart1Puts( char *s)
{
while (*s != ' ')
{
uart1Putc(*(s++));
}
}
void uart1Putc( char c)
{
while(!(IFG2 & UCA0TXIFG));
UCA0TXBUF= c;
}
/****************************************************************************************
***功能:UART1接收中断服务函数
***参数:无
***返回:无
***说明:如果主函数里一直采集,则串口发送不能顺利读取,因此只在中断函数里采
*****************************************************************************************/
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG));
gsmRxBuf[gsmRxLen++] = UCA0RXBUF;
if (gsmRxLen > sizeof gsmRxBuf -1 )
{
if (gsmRxBuf[0] == 'O' && gsmRxBuf[1] == 'K' ) //如果返回数据为OK,不操作
{
gsmRxLen = 0; //字节长度清空为0
}
if (gsmRxBuf[69] == 'o' &&gsmRxBuf[70] == 'f' &&gsmRxBuf[71] == 'f' && gsmRxBuf[72] == '1' ) //如果返回数据为OK,不操作
{
P1OUT &=~BIT3;
for(len=0;len<gsmRxLen;len++)
{
gsmRxBuf[len]=0;
}
gsmRxLen = 0; //字节长度清空为0
}
}
}
一周热门 更多>