📄 main.c
字号:
/*
* Filename: main.c
*/
#include "c8051F020.h"
#include "main.h"
#include <string.h>
extern void Init_Device(void);
char const code AT_GPRS[] = "AT";
char const code ATplus_GPRS[] = "AT+";
char const code Text_GPRS[] = "CMGF=1";
char const code Read_GPRS[] = "CMGR=";
char const code Erase_GPRS[] = "CMGD=";
char const code Define_GPRS[] = "CGDCONT=";
char const code Active_GPRS[] = "CGATT=1";
char const code Set_GPRS[] = "CIPCSGP=";
char const code Connect_GPRS[] = "CIPSTART=";
char const code Send_GPRS[] = "CIPSEND";
char const code Close_GPRS[] = "CIPCLOSE";
char const code Shut_GPRS[] = "CIPSHUT";
char const code AT_OK[] = "OK";
#define MAXSIZE 512
char xdata UartFIFO[MAXSIZE];
char xdata Buf[MAXSIZE];
unsigned char pIndex_In;
unsigned char pIndex_Out;
unsigned char *p=NULL;
unsigned char xdata GateData[27]="07P000000301200804211123118";
unsigned char xdata Powerdata[70]="0301200804251818181003220422041003220322031002220222032501506711110000";
//unsigned char xdata Powerdata[70]="0301111112341111123411111234111112341111123411111234111111111111";
void info_init(void) //信息初始化
{
unsigned int i;
pIndex_In = 0;
pIndex_Out = 0;
for (i=0; i<MAXSIZE; i++)
{
UartFIFO[i] = 0;
}
RTS_Set();
}
unsigned char get_CTS(void) //得到CTS引脚的状态
{
unsigned char dat;
CTS_Set();
dat = P4;
dat &= CTS;
return dat;
}
void gprs_sendbyte(char dat) //发送字符
{
bit es0=ES0;
ES0=0;
TI0=0;
SBUF0 = dat;
while(!TI0);
TI0 = 0;
ES0=es0;
}
void gprs_sendstr(char const *str) //发送字符串
{
if (!str) return;
while (1)
{
if (*str == '\0') break;
RTS_Clr();
while (get_CTS());
gprs_sendbyte(*str++);
}
}
void clrBuf(void) //清空缓冲区
{
int i;
for (i=0; i<MAXSIZE; i++)
{
Buf[i] = 0;
}
}
/* 发送AT联机命令 */
void Send_AT(void)
{
info_init();
do
{
gprs_sendstr(AT_GPRS);
gprs_sendbyte(OVER);
delay(50);
p=strstr(UartFIFO,AT_OK);
}while (p == NULL);
}
/* 设置短信文本 */
void SetText(void)
{
unsigned char *p=NULL;
info_init();
do
{
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Text_GPRS);
gprs_sendbyte(OVER);
delay(50);
p=strstr(UartFIFO,AT_OK);
}while(p==NULL);
}
/* 删除短信 */
unsigned char EraseMsg(unsigned char index)
{
info_init();
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Erase_GPRS);
gprs_sendbyte(index);
gprs_sendbyte(OVER);
delay(200);
while(1)
{
p=strstr(UartFIFO,AT_OK);
if(p!=NULL)
{
return 1;
}
}
return 0;
}
/* 读取短信内容 */
char const code Ask_No[]="+CMGR:0,0";
char const code ERROR[]="ERROR";
char const code Ask_Gprs[]="AA55";
unsigned char ReadMsg(unsigned char index)
{
int i=0;
info_init();
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Read_GPRS);
gprs_sendbyte(index);
gprs_sendbyte(OVER);
delay(300);
p=strstr(UartFIFO,ERROR);
if(p!=NULL)
{
gprs_sendstr(AT_GPRS);
return 0;
}
p=strstr(UartFIFO,Ask_No);
if(p!=NULL)
{
return 0;
}
p=strstr(UartFIFO,Ask_Gprs);
if(p==NULL)
{
return 0;
}
for(i=0;i<sizeof(Buf);i++)
{
Buf[i]=*p++;
}
if(EraseMsg(index)==0)
{
return 0;
}
return 1;
}
void Init_GPRS(void)
{
Send_AT();
SetText();
//p=NULL;
}
/* 首先定义PDP移动场景 */
unsigned char ip[] = "1,\"IP\",\"CMNET\"";
void Define(unsigned char *mode)
{
info_init();
do
{
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Define_GPRS);
gprs_sendstr(mode);
gprs_sendbyte(OVER);
delay(50);
p=strstr(UartFIFO,AT_OK);
}while (p == NULL);
}
/* 激活PDP,获得IP地址 */
void Active(void)
{
unsigned char *p=NULL;
info_init();
do
{
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Active_GPRS);
gprs_sendbyte(OVER);
delay(50);
p=strstr(UartFIFO,AT_OK);
}while(p==NULL);
}
/* 设置模块连接方式为GPRS连接,接入点为“CMNET” */
unsigned char CMNET[] = "1,\"CMNET\"";
void SetGprs(unsigned char *mode)
{
info_init();
do
{
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Set_GPRS);
gprs_sendstr(mode);
gprs_sendbyte(OVER);
delay(50);
p=strstr(UartFIFO,AT_OK);
}while (p == NULL);
}
/* 建立连接 */
unsigned char SetConnect[] = "\"UDP\",\"218.199.82.13\",\"5000\"";
char const code AT_ALREADY[] = "ALREADY";
void ConnectGprs(unsigned char *mode)
{
unsigned char *q = NULL;
info_init();
do
{
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Connect_GPRS);
gprs_sendstr(mode);
gprs_sendbyte(OVER);
delay(200);
p=strstr(UartFIFO,AT_OK);
q=strstr(UartFIFO,AT_ALREADY);
}while (p == NULL && q == NULL);
}
void Init_Send(void)
{
Define(ip);
Active();
SetGprs(CMNET);
ConnectGprs(SetConnect);
}
char const code AT_CMD[] = ">";
char const code SEND_OK[] = "SEND OK";
void SendData_GPRS(unsigned char *str)
{
unsigned char *p=NULL;
info_init();
do
{
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Send_GPRS);
gprs_sendbyte(OVER);
delay(150);
p=strstr(UartFIFO,AT_CMD);
}while(p==NULL);
info_init();
do
{
p=NULL;
gprs_sendstr(str);
//delay(200);
gprs_sendbyte(SEND);
delay(300);
p=strstr(UartFIFO,SEND_OK);
}while(p==NULL);
}
/* 关闭GPRS连接 */
char const code Close_OK[] = "CLOSE OK";
char const code Shut_OK[] = "SHUT OK";
void CloseConnect(void)
{
unsigned char *p=NULL;
info_init();
do
{
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Close_GPRS);
gprs_sendbyte(OVER);
delay(50);
p=strstr(UartFIFO,Close_OK);
}while(p==NULL);
}
void ShutConnect(void)
{
unsigned char *p=NULL;
info_init();
do
{
gprs_sendstr(ATplus_GPRS);
gprs_sendstr(Shut_GPRS);
gprs_sendbyte(OVER);
delay(50);
p=strstr(UartFIFO,Shut_OK);
}while(p==NULL);
}
void CloseGPRS(void)
{
CloseConnect();
ShutConnect();
}
void main(void)
{
EA = 0;
WDTCN = 0xDE; // 关看门狗
WDTCN = 0xAD;
Init_Device();
info_init();
EA = 1;
Init_GPRS();
while(1)
{
int i;
unsigned char id[1];
do
{
delay(300);
p=strstr(UartFIFO,"SM");
}while(p==NULL);
ReadMsg('1');
p=strstr(Buf,Ask_Gprs);
if(p!=NULL)
{
p=p+4;
for(i=0;i<2;i++)
{
id[i]=*p++;
}
clrBuf();
}
if(id[0]=='0'&&id[1]=='1')
{
//RTC();
break;
}
if(id[0]=='0'&&id[1]=='3')
{
Init_Send();
SendData_GPRS(GateData);
CloseGPRS();
//UPimage();
}
if(id[0]=='0'&&id[1]=='7')
{
//GetGatedata();
Init_Send();
//SendData_GPRS(GateData);
SendData_GPRS(Powerdata);
CloseGPRS();
// UPdata();
}
}
}
void UART0(void) interrupt 4 using 1
{
if (RI0)
{
RI0 = 0;
UartFIFO[pIndex_In] = SBUF0;
pIndex_In = (pIndex_In + 1)%MAXSIZE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -