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

📄 gprs_q2403.c

📁 GPS全球定位源码
💻 C
字号:
/****************************************************************************
【文  件  名  称】GPRS_Q2403.c
【功  能  描  述】FS2410XP教学平台实验程序
【程  序  版  本】3.0
【创建及创建日期】优龙公司/2005-XX-XX
【修改及修改日期】2005-5-23
****************************************************************************/
//头文件定义
#include "def.h"
#include "2410addr.h"
#include "config.h"
#include "board.h"


#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));



/********************************************************************
Function name: Uart1RxInt
Parameter    : void
Description	 : 串口1接收中断处理程序
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
static void __irq Uart1RxInt(void)
{
    ClearSubPending(BIT_SUB_RXD1); //rSUBSRCPND = BIT_SUB_RXD0;          //Clear pending bit (Requested)
    ClearPending(BIT_UART1);

	//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()) {
		putch(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;
//	char ch[1];

	while( pt[i] )
	{
		SerialSwitch( 1 ) ;		//选择UART通道为串口1
	
		//if( pt[i]=='\n' )		SerialTxChar('\r');
		SerialTxChar( pt[i] );

		SerialSwitch( 0 ) ;		//选择UART通道为串口0
	
		i++;
	}
	
	Delay(10);
	Echo_Rx_Data();
}


/********************************************************************
Function name: GPRS_KeyUartPoll
Parameter    : void
Description	 : 回显模块送回的信息
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
void GPRS_KeyUartPoll()
{
	char ch[1];

	//while( getkey() != ESC_KEY )
	{
		if(rUTRSTAT1 & 0x1)
		{
			SerialSwitch( 1 ) ;		//选择UART通道为串口1
			//ch[0] = SerialRxChar() ;
			ch[0] = SerialRxKey();
			SerialSwitch( 0 ) ;		//选择UART通道为串口0
			//SerialTxChar( ch[0] );
			if(ch[0])
				printf("%c", ch[0]);
		}
	}
}

/********************************************************************
Function name: Test_GPRS_Init
Parameter    : void
Description	 : GPRS初始化
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
void Test_GPRS_Init()
{ 
	printf("Initialize GPRS modem...\n");
	
	rGPGCON &= ~((3<<4)|(3<<12));
	rGPGCON |= (1<<4)|(1<<12);
	rGPGDAT &= ~(1<<2);
	rGPGDAT &= ~(1<<6);
	
	rGPHCON |= 0xf<<12;		//RTS1, CTS1
    rGPHUP  |= 3<<6;		//Uart port pull-up disable

	SerialChgBaud( 115200 ) ;
		
	rx_buf_head = rx_buf_tail = 0;

   	pISR_UART1 = (U32)Uart1RxInt;		//串口接收数据中断
	ClearSubPending(BIT_SUB_RXD1);
	ClearPending(BIT_UART1);
	EnableSubIrq(BIT_SUB_RXD1);
	EnableIrq(BIT_UART1);

	GPRS_Cmd("AT\n");
	Delay(500);
//	GPRS_Cmd("AT\n");
//	Delay(500);

//下面选择通道1,使用带麦克的耳机
	GPRS_Cmd("AT+SPEAKER=1\n"); //设置通话通道为1
	Delay(500);
	GPRS_Cmd("AT+VGR=255\n");//设置受话器音量最大
	Delay(500);
	GPRS_Cmd("AT+VGT=255\n");//设置通道1的话筒增益
	Delay(500);

}

/********************************************************************
Function name: Test_GPRS_Exit
Parameter    : void
Description	 : GPRS退出
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
static void Test_GPRS_Exit(void)
{
   	DisableSubIrq(BIT_SUB_RXD1);
	DisableIrq(BIT_UART1);
}


/********************************************************************
Function name: GPRS_HOLD
Parameter    : void
Description	 : 发送挂机命令ATH
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
void GPRS_HOLD()
{
	GPRS_Cmd("AT\r");
	Delay(500);
	GPRS_Cmd("ATH\r");
}


/********************************************************************
Function name: GPRS_ANSWER
Parameter    : void
Description	 : 发送接听命令ATA
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
void GPRS_ANSWER()
{
	GPRS_Cmd("AT\r");
	Delay(500);
	GPRS_Cmd("ATA\r");
}


/********************************************************************
Function name: GPRS_CALL
Parameter    : *num:电话号码的指针变量
Description	 : 发送拨打命令ATD
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
void GPRS_CALL(char *number)
{
	GPRS_Cmd("AT\r");
	Delay(500);
	GPRS_Cmd("ATD"); 
	GPRS_Cmd(number);
	GPRS_Cmd(";\r");
}


/********************************************************************
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(500);

	GPRS_Cmd("AT+CMGF=1\r");//发送修改字符集命令,TEXT模式
	Delay(500);
	GPRS_Cmd("AT+CMGS=");	//发送发短信命令
	GPRS_Cmd(number);
	GPRS_Cmd("\n");
	
	GPRS_Cmd(text);
	
	SerialSwitch( 1 ) ;		//选择UART通道为串口1
	SerialTxChar( 26 ); 	//"CTRL+Z"的ASCII码
	SerialSwitch( 0 ) ;		//选择UART通道为串口0
	
	Delay(100);
	Echo_Rx_Data();
}

/********************************************************************
Function name: InputNumber
Parameter    : *num:存放电话号码的指针
Description	 : 输入一组数字用作电话号码
Return		 : 成功返回非0
Argument     : void
Autor & date :
*********************************************************************/
static int InputNumber(char *num)
{
	int key;
	int i=0;
	
	for(i=0; i<20; i++)
		num[i] = 0;
	i = 0;
	
	printf("Please input the number:\n");
	while(1)
	{
		key = getch();
		switch(key)
		{
		    case '0':
		    case '1':
		    case '2':
		    case '3':
		    case '4':
		    case '5':
		    case '6':
		    case '7':
		    case '8':
		    case '9':
		    	num[i++] = key;
				printf("%c",key);
				break;
			case ENTER_KEY:		//数字输入完毕
				//num[i++] = key;
				return i;
				break;
			default:		//数字输入错误!!!
				printf( "输入错误,请重新输入!!!\n");
				return 0;
				break ;		
	    }
	}
}

/********************************************************************
Function name: Test_Q2403A
Parameter    : void
Description	 : GSM/GPRS短信发送等功能
Return		 : void
Argument     : void
Autor & date :
*********************************************************************/
void Test_GPRS_Q2403(void)
{
	U16 key ;
	char number[20];
	char Message[64] = {"Hello! "} ;
	
	
	Test_GPRS_Init();			//GPRS/GSM初始化
	
Test_Again:
	printf( "\nGSM/GPRS TEST, press ESC key to exit !\n" ) ;
	printf(" 1 : Send short message\n");
	printf(" 2 : Call the number\n");
	printf(" 3 : Ring off\n");
	printf(" 4 : Pick up\n");
   
	while(1)
	{
		key = getkey();
		if(key==ESC_KEY)
			break;

		Echo_Rx_Data();
		
		switch( key )
		{
			case '1': printf("Send short message\t\t\n");
				if( !InputNumber(number) )break;
				printf("\nNow send short message...\n");
				GPRS_MGS( number, Message );
		
				goto Test_Again;
      		case '2': printf("Call the number\t\t\n");
                if( !InputNumber(number) )		break;
                printf("\nNow send a call...\n");
                GPRS_CALL(number);
 
                goto Test_Again;
      		case '3': printf("Ring off\t\t\n");
                GPRS_HOLD();
        
                goto Test_Again;
      		case '4': printf("Pick up\t\t\n");
                GPRS_ANSWER();
            
                goto Test_Again;
		}
 	}
	
    Test_GPRS_Exit();				//GPRS/GSM退出
}
/*************************************************************/

⌨️ 快捷键说明

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