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

📄 gsm.c

📁 已经测试成功的基于sim300短信收发程序
💻 C
字号:


#define GSM_G
#include "sysincludes.h"



void SendMessage1(uchar *buf)
{

	UartSendString(1,buf);


}

uchar mess_buf_in_end = 0;


// 发送AT指令
void ATCommand(uchar *mess, uchar flag)
{
	mess_buf_in_end = 0;
	Uart1.pIn = 0; 
	SendMessage1(mess);  // 串口发送数据
	if(flag) SendMessage1("\r\n");  
}


// 等待GSM数据
uchar WaitMessageBack(uchar *mess, uchar n)
{
	for(;;)
	{
		if(mess_buf_in_end == 1)
		{
			mess_buf_in_end = 0;
			if(!strncmp(Uart1.buf, mess, n)) 
			{
				return TRUE;
			}
		}
	}
}


// 接收AT指令数据
void Receive_Mess(uchar ch)
{
	switch (ch)
	{
	case 0x0d:  //行结束符	判断是否结束

		Uart1.buf[Uart1.pIn] = '\0';
		Uart1.pIn = 0;
		mess_buf_in_end = 1;

		break;
	case 0x0a:  //不予理睬
		break;
	default:
		Uart1.buf[Uart1.pIn++] = ch ;
		if(Uart1.pIn >= 0xff) Uart1.pIn = 0xff;
		break; 
	}
}

void delay_min(){
	S32 qq=0;
	for (;qq<=700;qq++)
	{
//************************************计时器设定
	rTCFG0=0x00000063;                   //100分频——500k
	rTCFG1=0x00000001;                   //再4分频--125k==0.008ms的倒数
	rTCNTB0=0x30D4; 		     //12500
	rTCMPB0=0x0000; 

	rTCON = (1<<1);			     //更新定时器数据	
	rTCON = (1<<0)|(0<<3);		     //启动定时器,非自动重装

	while(rTCNTO0);                      //等待定时器递减为零

	rTCON = (0<<0);     
	}
}

// 初始化短信息
void SMSInit(void)
{
	ATCommand("ATE0",1);      // 关闭回显
	WaitMessageBack("OK",2);
	ATCommand("AT+CCID",1);  // 查看SIM 卡
	Delay(3000) ;

ATCommand("AT+CSMINS?",1); 
Delay(3000) ;
ATCommand("AT+CSQ",1); 
Delay(3000) ;
ATCommand("AT+CREG?",1); 
Delay(3000) ;

ATCommand("AT+CREG=1",1); 
WaitMessageBack("OK",2);

delay_min();

	
	

ATCommand("AT+CREG?",1); 
Delay(3000) ;

ATCommand("AT+CSQ",1); 
Delay(3000) ;





	ATCommand("AT+CSCA=\"+8613800220500\"",1); // 设置在广州地区的服务中心号码
	WaitMessageBack("OK",2);
	ATCommand("AT+CMGF=1",1);  // 设置为文本方式
	WaitMessageBack("OK",2);
	ATCommand("AT+CNMI=2,1,0,0,0",1);
	WaitMessageBack("OK",2);
}

// 发英文短信
// number 为手机号码
// mess  为短信内容
void SendSMS(uchar *number, uchar *mess)
{
	uchar buf[2]={0x1A, 0x00};
	ATCommand("AT+CMGS=\"", 0);
	ATCommand(number, 0);
	ATCommand("\"", 1);
	Delay(3000) ;
	ATCommand(mess, 0);
	ATCommand(buf, 0);
	WaitMessageBack("+CMGS",5);
}


⌨️ 快捷键说明

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