MSP430单片机与SIM800A调试
来源:互联网 发布:惠普企业软件 编辑:程序博客网 时间:2024/06/05 08:52
单片机发送GPRS程序
#include <msp430f5438a.h>
#include <stdlib.h>#include <string.h>
#include "config.h"
//#include "24c64.h"
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
/*****************************************************************************
* 函数声明区
*****************************************************************************/
void Init_RS232(void);
void RS232_SENDstr(char *tx_buf);
/******************************************************************************
* 变量定义区
******************************************************************************/
#define GprsFuse 0x02
#define GprsTure 0x01
uchar GprsState = 0;
unsigned RX_buffer=0;
unsigned RX_at=0;
uchar SendBuff[512] = {0};//12345678901234567890123456789012345678901234567890123456789012345678901234567890
//uchar SendBuff[1024] = {0};
uchar ATBuff[256] = {0};
//uchar DemoBuff[100] = {0};//abcdefghigklmnopqrstuvwxyzabcdefghijklm
//uint bysendpt = 0;
//uint byrecpt = 0;
//char bystartcomm = 0;
//uint byatsendpt =0;
//uint byatrecpt =0;
//char byatcomm = 0;
uint gprsreclen=0;
uint gprssendwritept=0;
uint gprssendreadpt=0;
//***********************************************************************
// 系统时钟初始化,XT1=32.768K晶振,XT2=8M晶振
//***********************************************************************
void Clock_Init_Ex32768()
{
P5SEL |= BIT2 + BIT3; // 端口功能选择振荡器
P7SEL |= BIT0 + BIT1;
UCSCTL6 &= ~XT2OFF+~XT1OFF;
UCSCTL4 |= SELA_0 + SELM_5 + SELS_5; //ACLK为32.768KHZ,MCLK为8MHZ,SMCLK为8MHZ
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志
SFRIFG1 &= ~OFIFG;
}while(SFRIFG1&OFIFG); // 检测振荡器错误标志
}
static unsigned long OpenGprs()//static unsigned long
{
//uchar readdata = 0; //GPRS开机标志,1表示开机成功
P6DIR |= BIT3;
//P4DIR &= ~BIT0;
P6OUT |= BIT3; //GPRS TURN ON
//P4OUT |= BIT2;
delay_ms(1500);
P6OUT &= ~BIT3;
delay_ms(20);
// P4OUT |= BIT1; //GPRS TURN ON
// delay_ms(220);
// P4OUT &= ~BIT1;
//readdata = P4IN;
//readdata = readdata & BIT0;
//return readdata;//(P4IN & BIT0);//readdata;
return 0;
}
void ShutdownGprs()
{
P6DIR |= BIT3;
//P4DIR &= ~BIT0;
P6OUT |= BIT3; //GPRS shout down
//P4OUT |= BIT2;
delay_ms(1500);
P6OUT &= ~BIT3;
delay_ms(20);
}
void SendAtCmd( char const * atcmd)
{
unsigned char len;
len = strlen(atcmd);
memcpy(ATBuff, atcmd, len);
ATBuff[len] = 0x0D;
ATBuff[len+1] = 0x0A;
gprssendwritept = len+2;
UCA0TXBUF = ATBuff[0];
gprssendreadpt = 1;
}
void SendData( char const * atcmd)
{
unsigned char len;
len = strlen(atcmd);
memcpy(ATBuff, atcmd, len);
ATBuff[len] = 0x1A;
//ATBuff[len+1] = 0x0A;
gprssendwritept = len+1;
UCA0TXBUF = ATBuff[0];
gprssendreadpt = 1;
}
static unsigned long ResetGprs()//static unsigned long
{
//uchar readdata = 0; //GPRS开机标志,1表示开机成功
SendAtCmd("AT+CPOWD=1");
delay_ms(10000);
return OpenGprs();
}
///////////////////////////////////////////////////////////////////////////////
uchar strsearch(uchar *ptr2,uchar *ptr1_at)//查字符串*ptr2在*ptr1中的位置
//本函数是用来检查字符串*ptr2是否完全包含在*ptr1中
//返回: 0 没有找到
// 1-255 从第N个字符开始相同
{
//、 uchar max_length;
uchar i,j,k;
//uchar flag;
if(ptr2[0]==0) return(0);
//flag=0;
for(i=0,j=0;i<254;i++)
{
if(ptr1_at[i]==ptr2[j])
{//第一个字符相同
for(k=i;k<254;k++,j++)
{
if(ptr2[j]==0)//比较 正确
return(i+1); //返回值是整数,不含0
if(ptr1_at[k]!=ptr2[j]) break;
}
j=0;
}
}
return(0);
}
/////////////////////////////////////////////////////////////////////////////
static unsigned long GprsSendData(char const * Data )
{
uchar j;
//uchar err=0;
delay_ms(10000);
SendAtCmd("AT");
delay_ms(500);
SendAtCmd("AT");
delay_ms(500);
SendAtCmd("AT");
delay_ms(500);
SendAtCmd("AT");
delay_ms(500);
SendAtCmd("ATE0");
delay_ms(500);
SendAtCmd("AT+CPIN?");
delay_ms(500);
if(strsearch("READY",SendBuff) !=0)
{
GprsState = GprsTure;
}
SendAtCmd("AT+CREG=1");
delay_ms(500);
for(j=0;j<=20;j++)
{
SendAtCmd("AT+CREG?");
delay_ms(500);
if(strsearch("+CREG: 1,5",SendBuff)==0 && strsearch("+CREG: 1,1",SendBuff)==0)
{
GprsState = GprsFuse;
//return GprsState;
//SendAtCmd("AT+CREG?");
}
else
{
GprsState = GprsTure;
break;
}
}
/*if(j>=19)
{
goto at_eer;
}*/
SendAtCmd("AT+CSQ");
delay_ms(500);
SendAtCmd("AT+CGATT=1");
delay_ms(5000);
SendAtCmd("AT+CGREG=1");
delay_ms(500);
for(j=0;j<=20;j++)
{
SendAtCmd("AT+CGREG?");
delay_ms(500);
if(strsearch("+CGREG: 1,5",SendBuff)==0 && strsearch("+CGREG: 1,1",SendBuff)==0)
{
GprsState = GprsFuse;
//return GprsState;
//SendAtCmd("AT+CGREG?");
}
else
{
GprsState = GprsTure;
break;
}
}
/*if(j>=19) //模块有问题
{
at_eer: ResetGprs(); //模块重启 AT+CFUN=1,1
}*/
/*SendAtCmd("AT^SICS=0,conType,GPRS0");
delay_ms(500);
SendAtCmd("AT^SICS=0,user,gprs");
delay_ms(500);
SendAtCmd("AT^SICS=0,passwd,gprs");
delay_ms(500);
SendAtCmd("AT^SICS=0,apn,“cmnet”");
delay_ms(500);
SendAtCmd("AT^SISS=1,ConID,0");
delay_ms(500);
SendAtCmd("AT^SISS=1,srvType,Socket");
delay_ms(500);
SendAtCmd("at^siss=1,address,\"socktcp://218.75.124.157:9400\"");
//AT^SISS=1,address,"Socktcp://218.17.126.193:5003"
//at^siss=1,address,"socktcp://218.75.124.157:9400"
delay_ms(500);
SendAtCmd("at^siso=1");
delay_ms(5000);
if(strsearch("^SISW: 1, 1",SendBuff)==0)
{
GprsState = GprsFuse;
}
else
{
GprsState = GprsTure;
}
SendAtCmd("AT^SISW=1,10");
delay_ms(500);*/
SendAtCmd("AT+CSTT=\"CMNET\"");
delay_ms(500);
SendAtCmd("AT+CIICR");
delay_ms(10000);
SendAtCmd("AT+CIFSR");
delay_ms(500);
SendAtCmd("AT+CIPSTART=\"TCP\",\"218.75.124.157\",\"9400\"");
delay_ms(500);
SendAtCmd("AT+CIPSEND");
delay_ms(1000);
// SendAtCmd("abcdefg");
// delay_ms(10000);
// SendAtCmd(Data);
SendData(Data);
delay_ms(10000);
//SendAtCmd("at^sisc=1");
//delay_ms(500);
//if
SendAtCmd("AT+CIPCLOSE");
delay_ms(500);
SendAtCmd("AT+CPOWD=1");
delay_ms(1000);
// return GprsState;
}
/*********************************系统主函数据********************************/
void main(void)
{
P2DIR |= BIT5;
WDTCTL = WDTPW + WDTHOLD; // 关狗
Clock_Init_Ex32768();
LEDLIGHT; //点亮LED
Init_RS232(); //串口初始化
_EINT(); //开全局中断
GprsState=OpenGprs(); //GPRS开机
//SendAtCmd("AT^SMSO");
//delay_ms(15000);
//GprsState=ResetGprs();
gprsreclen = 0;
gprssendwritept = 0;
gprssendreadpt = 0;
/* SendAtCmd("AT");
delay_ms(500);
SendAtCmd("ATE0");
delay_ms(500);
SendAtCmd("AT+CPIN?");
delay_ms(500);
SendAtCmd("AT+CREG=1");
delay_ms(500);
SendAtCmd("AT+CREG?");
delay_ms(500);
SendAtCmd("AT+CSQ");
delay_ms(500);
SendAtCmd("AT+CGATT=1");
delay_ms(500);
SendAtCmd("AT+CGREG=1");
delay_ms(500);
SendAtCmd("AT+CGREG?");
delay_ms(500);
SendAtCmd("AT^SICS=0,conType,GPRS0");
delay_ms(500);
SendAtCmd("AT^SICS=0,user,gprs");
delay_ms(500);
SendAtCmd("AT^SICS=0,passwd,gprs");
delay_ms(500);
SendAtCmd("AT^SICS=0,apn,“cmnet”");
delay_ms(500);
SendAtCmd("AT^SISS=1,ConID,0");
delay_ms(500);
SendAtCmd("AT^SISS=1,srvType,Socket");
delay_ms(500);
SendAtCmd("at^siss=1,address,\"socktcp://218.75.124.157:9400\"");
//AT^SISS=1,address,"Socktcp://218.17.126.193:5003"
//at^siss=1,address,"socktcp://218.75.124.157:9400"
delay_ms(500);
SendAtCmd("at^siso=1");
delay_ms(30000);
SendAtCmd("AT^SISW=1,10");
delay_ms(500);
SendAtCmd("0123456789");*/
GprsSendData("0123456789");
delay_ms(500);
GprsState=ResetGprs();
//SendAtCmd("AT^SMSO");
//delay_ms(5000);
while(1)
{
LEDLIGHT; //点亮LED
delay_ms(500);
LEDDARK; //熄灭LED
delay_ms(500);
}
}
/******************************************************************************
* 函数名:void Init_RS232(void)
* 功 能:RS232初始化
* 参 数:无
* 返回值:无
******************************************************************************/
void Init_RS232(void)
{
/*P3SEL |= 0x30; // 选择RS232引脚功能
P3DIR |= BIT4;
P3DIR &= ~BIT5;
UCA0CTL1 |= UCSWRST; // 复位UART状态机
UCA0CTL1 |= UCSSEL__SMCLK; // CLK = ACLK
UCA0BR0 = baud_l;// 0x03; // 32kHz/9600=3.41
UCA0BR1 = baud_h;//0x00; //
// UCA0MCTL = UCBRS_3+UCBRF_0; // UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // 启动UART
UCA0IE |= UCRXIE; // 数据接收中断使能
UCA0IE |= UCTXIE; */ // 数据接收中断使能
P3SEL |= 0x30; // 选择RS232引脚功能
P3DIR |= BIT4;
P3DIR &= ~BIT5;
UCA0CTL1 |= UCSWRST; // 复位UART状态机
UCA0CTL1 |= UCSSEL__SMCLK; // CLK = ACLK
UCA0BR0 = atbaud_l;// 0x03; // 32kHz/9600=3.41
UCA0BR1 = atbaud_h;//0x00; //
UCA0MCTL = UCBRS_3+UCBRF_0; // UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // 启动UART
UCA0IE |= UCRXIE; // 数据接收中断使能
UCA0IE |= UCTXIE; // 数据发送中断使能
}
/////////////////////////////////////////////////////////////////////////////////////////
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0: //Vector 0 - no interrupt
break;
case 2: //Vector 2 - RXIFG
RX_at=UCA0RXBUF;
SendBuff[gprsreclen] = RX_at;
gprsreclen++;
if (gprsreclen >=512)
{
gprsreclen = 0;
}
break;
case 4: //Vector 4 - TXIFG
if (gprssendreadpt < gprssendwritept)
{
UCA0TXBUF = ATBuff[gprssendreadpt];
gprssendreadpt++;
}
else //if//(gprssendreadpt >= gprssendwritept)
{
//delay_ms(3);
gprssendreadpt = 0;
}
break;
default: break;
}
}
阅读全文
0 0
- MSP430单片机与SIM800A调试
- MSP430单片机输入与输出
- MSP430单片机
- MSP430单片机
- MSP430单片机全局变量与局部变量
- MSP430单片机网址推荐
- MSP430单片机资料
- msp430单片机定时器
- msp430单片机定时器
- 怎样学习MSP430单片机
- MSP430单片机外部中断
- 单片机MSP430 - 定时器Timer_A
- msp430单片机的复位
- MSP430单片机的端口介绍
- MSP430单片机的框架程序
- msp430单片机 程序升级实例
- 自制BSL编程MSP430单片机
- msp430单片机之时钟模块
- 剖析整数,浮点数在内存中的存储
- socket网络编程ftp
- Can not issue data manipulation statements with executeQuery()
- 浪里个浪 FZU
- HDU 1874 畅通工程续(Floyd)
- MSP430单片机与SIM800A调试
- OAM密码加密传输
- 学习HTML的日子-笔记分享
- POJ 3253
- HttpURLConnection请求json数据加载到ListView上
- poj1386 Paly onWords
- ObjC如何通过runtime修改Ivar的内存管理方式(三)
- WiFiAp探究实录--功能实现与源码分析
- docker私有库管理