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

📄 gprs.c

📁 51单片机实现接收桥梁健康监测数据的代码,主要测量桥梁挠度!!数据通过GPRS传送!
💻 C
字号:
#define RECLEN 128

#define IGT P1_6

#define gx_straindata g_strainData

uchar xdata g_rec[RECLEN];
uchar g_rspoint;

char xdata g_phone[11];

uchar code GPRSCmdAT[] = "AT\r";
uchar code GPRSCmdCMGF[] = "AT+CMGF=1\r";
char xdata GPRSCmdCNMI[] = "AT+CNMI=2,1\r";
char xdata GPRSCmdCMGD[] = "AT+CMGD=1\r";
char xdata GPRSCmdCMGR[] = "AT+CMGR=1\r";
char xdata GPRSCmdCMGS[] = "AT+CMGS=";

char xdata gx_sentdata[8][10];


void change()
{
	uchar i,j;
	char c;

	for(i=0; i<8; i++)
	{
		for(j=0;j<5; j++)
		{
			c = (gx_straindata[i][j] & 0xf0)>>4;
			if (c<=9)
				gx_sentdata[i][j<<1] = c|0x30;
			else
				gx_sentdata[i][j<<1] = (c-9)|0x40;

			c = gx_straindata[i][j] & 0x0f;
			if (c<=9)
				gx_sentdata[i][(j<<1)+1] = c|0x30;
			else
				gx_sentdata[i][(j<<1)+1] = (c-9)|0x40;
		}
	}
}

void testssd()
{
	uchar i,j;

	for(i=0; i<8; i++)
	{
		send_char('1');
		send_char(0x41+i);
		send_char(':');

		for(j=0;j<10;j++)
			send_char(gx_sentdata[i][j]);

		send_char(',');

	}
}

void Serial_INT() interrupt 4 using 3
{
	if(RI)
	{
		RI = 0;
		g_rec[g_rspoint++] = SBUF;
		if (g_rspoint>=RECLEN)
		{
			g_rspoint = 0;
			// todo? set overflow
		}
	}
	
}


void gprs_delay(void)			//delay 1S
{
	unsigned char h,i,j,k;
	for(h=5;h>0;h--)
	for(i=4;i>0;i--)
	for(j=116;j>0;j--)
	for(k=214;k>0;k--);
}

void gprs_start()
{
	gprs_delay();
	gprs_delay();
	gprs_delay();
	gprs_delay();
	gprs_delay();
	gprs_delay();
	
	P1_6=1; 
	P1_6=0; 
	gprs_delay();
	P1_6=1; 
}
void gprs_rec()
{
	uchar prept = 0xff;
	ES=1;
	g_rspoint=0;
	while(prept != g_rspoint)
	{
		prept = g_rspoint;
		delay10ms();
		delay10ms();
		delay10ms();
	}

	ES=0;

//	gprs_delay();
}

void gprs_CNMI()
{
	uchar i, len;

	len = strlen(GPRSCmdCNMI);
	
	 
	for (i=0;i<len; i++)
	{
		send_char(GPRSCmdCNMI[i]);
	}

	gprs_rec();
}

void gprs_CMGF()
{
	uchar i, len;
	
	len = strlen(GPRSCmdCMGF);
	for (i=0;i<len; i++)
	{
		send_char(GPRSCmdCMGF[i]);
	}

	gprs_rec();
}

void gprs_CMGD()
{
	uchar i, len;
	
	len = strlen(GPRSCmdCMGD);
	for (i=0;i<len; i++)
	{
		send_char(GPRSCmdCMGD[i]);
	}

	gprs_rec();
}


void testssd();

void gprs_CMGS()
{
	uchar i, len;
	ES=1;
	g_rspoint  = 0;

	len = strlen( GPRSCmdCMGS);
	for(i=0; i<len; i++)
	{
		delay1ms();
		send_char(GPRSCmdCMGS[i]);
	}

	for(i=0; i<11; i++)
	{
		delay1ms();
		send_char(g_phone[i]);

	}
		delay1ms();
	send_char(0x0d);
//	gprs_rec();

	delay10ms();
	delay10ms();
	delay10ms();

	testssd();

	send_char(0x1a);

	for(i=0;i<10;i++)
	gprs_delay();

//	display(0, g_rec, g_rspoint);
}

bit gprs_CMGR()
{
	uchar i, j, len;
	len = strlen(GPRSCmdCMGR);

//	P1_1=1; 
//	P1_1=0; 
//	gprs_delay();
//	P1_1=1; 

//	display(0, GPRSCmdCMGR, len);
	
	for (i=0; i<len; i++)
	{
		send_char(GPRSCmdCMGR[i]);
	}
		
	gprs_rec();

	// GET PHOTHON
	for (i=0; i<g_rspoint; i++)
	{
		if (g_rec[i] == ',' )
		{
			if (g_rec[i+1] == ',')
			// it is empty message
				return 0;

			if (g_rec[i+2]!='+')
			{
				send_char('a');
				send_char('t');
				send_char('1');
				send_char('\r');
				gprs_CMGD();
				return 0;
			}

			for(j=0; j<11; j++)
				g_phone[j] = g_rec[i+5+j];
			break;
		}
	}
	for(i += 36; i<g_rspoint; i++)
	if (g_rec[i] == '\n')
	{
		// read message content
		if (g_rec[i+1] == 'A' && g_rec[i+2] == 'A' && g_rec[i+3] == 'A') 
		{
			gprs_CMGD();
			return 1;
		}
		else
		{
			send_char('a');
			send_char('t');
			send_char('2');
			send_char('\r');
		}
	}
	gprs_CMGD();
	return 0;

}

bit gprs_Init()
{
    char  i, retry=3;


    while(retry--)
    {

//		display(retry, s, 3);

		for(i=0;i<3;i++)
		{
			send_char(GPRSCmdAT[i]);  
		}

		gprs_rec();

		g_rec[g_rspoint] = 0x30+g_rspoint;
//		CLRSCR();
//		display(0, g_rec, g_rspoint+1);
//        delay500ms();
        
        if (g_rec[5]=='O' && g_rec[6]=='K')
            break;
    }
	if(retry<=0)
		return 0;
    return 1;
}

⌨️ 快捷键说明

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