⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gprs.c

📁 GPRS源程序 基于ARM9底层开发 做毕业设计很有用啊
💻 C
字号:
/****************************************************************************/
//头文件定义
#include "def.h"
#include "44b.h"
#include "44blib.h"
#include "gprs.h"

//***************************************************************************
char AT_BUF[ 1024 ] ;
//***************************************************************************
#define	RX_BUF_SIZE		1024
static char rx_buf[RX_BUF_SIZE];
static U16 rx_buf_head, rx_buf_tail;

#define	RX_BUF_EMPTY()	(rx_buf_head==rx_buf_tail)
#define	RX_BUF_INC()	(rx_buf_head = (rx_buf_head+1)&(RX_BUF_SIZE-1))//孙:去掉了这条和下条语句末尾的分号
#define	RX_BUF_DEC()	(rx_buf_tail = (rx_buf_tail+1)&(RX_BUF_SIZE-1))
//extern  char *number[]={"1","3","5","1","3","3","4","9","7","7","6"};
extern  char number[]={'1','3','0','8','1','8','8','1','6','8','4'};

//extern  char number[]={'1','3','5','8','2','4','0','3','9','6','1'};

/********************************************************************
Function name: isr_uart1_rx
Parameter    : void
Description	 : 串口1接收中断处理程序
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
static void __irq isr_uart1_rx(void)
{
	rI_ISPC = BIT_URXD1;				/* 清除中断标志 */
	//printf("URT1 rx interrupt!\n");
	rx_buf[rx_buf_head] = RdURXH1();
	RX_BUF_INC();
	if(RX_BUF_EMPTY())
		RX_BUF_DEC();
}

/********************************************************************
Function name: Echo_Rx_Data
Parameter    : void
Description	 : 串口回显函数
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
static void Echo_Rx_Data(void)
{
	while(!RX_BUF_EMPTY()) 
	{
		Uart_SendByte(rx_buf[rx_buf_tail]);
		RX_BUF_DEC();
	}
}

/********************************************************************
Function name: GPRS_Cmd
Parameter    : void
Description	 : 串口发送命令字符串并等待回显
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
void GPRS_Cmd( char *pt )
{	
	int i=0;

	while( pt[i] )
	{
		Uart_Select( 1 ) ;		//选择UART通道为串口1
		Uart_SendByte( pt[i] );
		Uart_Select( 0 ) ;		//选择UART通道为串口0
		i++;
	}
   
	Delay(100);
	Echo_Rx_Data();
}

/********************************************************************
Function name: Test_GPRS_Init
Parameter    : void
Description	 : GPRS初始化
Return		 : void
Argument     : void
Autor & date :
孙智涛:不同GPRS模块的初始化应该不会有什么区别
*********************************************************************/
static void Test_GPRS_Init(void)
{
	Uart_Printf("Initialize GPRS modem...\n");
	rx_buf_head = rx_buf_tail = 0;
	
	pISR_URXD1 = (unsigned)isr_uart1_rx;
	
	rINTCON  = 0x5;						/*Non-vect,IRQ enable,FIQ disable   */
	rINTMOD  = 0x0;						/*设置所有中断为IRQ模式*/
	rINTMSK &= ~(BIT_GLOBAL|BIT_URXD1);	/*使能串口1接收中断,屏蔽其他中断*/

	Uart_Printf("Initialize GPRS modem...\n");
	Uart_Init( 0,115200 ) ;

	GPRS_Cmd("AT\r");//测试连接是否正确
	Delay(5000);
	GPRS_Cmd("ATE1\r");//打开回显。使用超级终端测试命令时打开
	Delay(5000);
	GPRS_Cmd("AT+CMGF=1\r");//设置短消息格式为text
	Delay(5000);
	GPRS_Cmd("AT+CNMI=2,1,0,0,0\r");//设置新短消息通知电脑端
	Delay(5000);

}

/********************************************************************
Function name: Test_GPRS_Exit
Parameter    : void
Description	 : GPRS退出
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
static void Test_GPRS_Exit(void)
{
	rINTMSK |= BIT_URXD1;				/*禁止串口1接收中断*/
}


/********************************************************************
Function name: GPRS_MGS
Parameter    : *num:电话号码的指针变量
			   *text:要发送的文本信息
Description	 : 输入一组数字用作电话号码
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
static void GPRS_MGS(char *number, char *text)
{    
    
	GPRS_Cmd("AT\r");
	Delay(5000);
	
	//GPRS_Cmd("AT+CSCA="); //短消息中心号码。孙:例程无
	//GPRS_Cmd("+8613010180500\r"); //孙:例程无
    //Delay(5000);  //孙:例程无


	GPRS_Cmd("AT+CMGF=1\r");//发送修改字符集命令,TEXT模式
	Delay(5000);
	GPRS_Cmd("AT+CMGS=");	//发送发短信命令
    GPRS_Cmd(number);
	
	GPRS_Cmd("\n");
	
	Delay(5000);  //孙:例程无

	
	GPRS_Cmd(text);
	
	Uart_Select( 1 ) ;		//选择UART通道为串口1
	Uart_SendByte( 26 ); 	//"CTRL+Z"的ASCII码
	Uart_Select( 0 ) ;		//选择UART通道为串口0
	
	Delay(10000);
	Echo_Rx_Data();
}


/********************************************************************
Function name: Send_AT_Command
Parameter    : *comm:字符串指针
Description	 : 发送AT指令集
Return		 : 成功返回0
Argument     : void
Autor & date :
*********************************************************************/
/*U16 Send_AT_Command( char *comm )
{
	U16 m ;
	U32 timeout = 50000 ;
	char data ;
	
	for( m = 0; m < 1024; m++ )		AT_BUF[m] = 0 ;
	
   	Uart_Select( 1 ) ;
	while( *comm )
	{
		while( !(rUTRSTAT1 & 0x2) ) ; //Wait until THR is empty.
		WrUTXH1( *comm++ ) ;

		if((rUTRSTAT1 & 0x1)) //Receive data ready
		{
			while(!(rUTRSTAT0 & 0x2));  //Wait until THR is empty.
			WrUTXH0( RdURXH1() );
		}
	}
	
	while( !(rUTRSTAT1 & 0x2) ) ;		//回车确认字符
	WrUTXH1( 0x0d ) ;
	if((rUTRSTAT1 & 0x1)) //Receive data ready
	{
		while(!(rUTRSTAT0 & 0x2));  //Wait until THR is empty.
		WrUTXH0( RdURXH1() );
	}

	while( !(rUTRSTAT1 & 0x2) ) ;		//回车确认字符
	WrUTXH1( 0x0a ) ;
	if((rUTRSTAT1 & 0x1)) //Receive data ready
	{
		while(!(rUTRSTAT0 & 0x2));  //Wait until THR is empty.
		WrUTXH0( RdURXH1() );
	}

	m = 0 ;
	while( timeout-- )
	{
		if((rUTRSTAT1 & 0x1)) //Receive data ready
		{
			while(!(rUTRSTAT0 & 0x2));  //Wait until THR is empty.
			data = RdURXH1() ;
			WrUTXH0( data );
			AT_BUF[m++] = data ;
		}
	}
	
	return 0 ;
}*/


/********************************************************************
Function name: Test_Q2403A
Parameter    : void
Description	 : GSM/GPRS短信发送,打电话
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
void Test_Q2403A(void)
{
	//char number[20];
	char Message[64] = {"Your car has been stolen! "} ;
	
	Test_GPRS_Init();				//GPRS/GSM模块初始化
	
	Uart_Printf("  Send short message\n");
   
	while(1)
	{
         Uart_Printf("\nNow send short message...\n");
		 GPRS_MGS( number, Message );
         Delay(300000) ;  
 	}
	
    Test_GPRS_Exit();			//GPRS退出程序
}
/********************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -