微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 微控制器的GPRS无线上网方法

微控制器的GPRS无线上网方法

时间:04-27 来源:互联网 点击:

3软件整体结构

3.1软件层次结构

  程序中的所有代码都是由C语言编写的,并采用分层的结构,从底到上分别为:串口驱动层、GPRS模块驱动层、PPP协议层、IP协议层、UDP协议层与应用层。上层函数的实现需要应用到底层函数,而底层函数的任务就是为上层函数提供服务,最终完成应用层任务——传送数据。各层的主要函数如图2所示。



图2软件层次结构

3.2驱动程序编写

  首先是串行口驱动层。它实现打开串口(OpenComm)、关闭串口(CloseComm)、读串口数据(ReadComm)、写串口数据(WriteComm)等函数。例如WriteComm函数向串口发送一个字节的数据,而transmit函数向串口发送一个字符串的数据:

voidWriteComm(charc){
  ES=0;
  SBUF=c;
  while(TI==0);
  TI=0;
  ES=1;
}
voidtransmit(char*data){
  Delay(250);
  while(*data){
    WriteComm(*data++);
  }
}

  然后,在这些串口函数的基础上编写GPRS模块的驱动函数。微控制器通过串行口控制GPRS模块,进行拨号、设置等操作。控制的方法是采用AT命令。在控制GPRS模块拨打移动梦网GGSN的登录号码“*99***1#”之后,GPRS模块就转入在线模式(On-Line)。此时微控制器向串行口发送的所有数据都透明地传送给了GGSN,同样GGSN的回答也传回单片机的串行口。当数据传送完成后,微控制器需要通知GPRS模块结束会话,并从在线模式转回普通的命令模式,这可以通过置高DTR线完成。同时,如果线路由于异常断开,CD线会回复到平常的低电平,所以处于在线模式下也要不断检测CD线是否处于高电平。根据这些操作,可以编写GPRS驱动函数:初始化GPRS模块函数(GPRSInit)、拨号函数(GPRSDial)、断开连接函数(GPRSHangup)、检测是否处于在线状态函数(GPRSOnline)。其中,GPRS的拨号和挂断代码如下:

BYTEGPRSDial(void){
  signedchardelayCount=80;
  transmit("ATV0\r");//要求返回数字表示的回答
  if(!Waitfor("0",30)){//等待OK回答
    return-1;
  }
  DTR_ON;
  transmit("ATD*99***1#\r");//拨GGSN的号码
  GPRSBuffFlush();//清空buffer
  //等待回答
  while((!GPRSBuffNotEmpty())(--delayCount>0)){
    Delay(250);
  }
  if(delayCount){
    returnGPRSGetch();//返回回答的数字
  }
  return-1;//没有返回,错误
}

voidGPRSHangup(void){
  DTR_ON;//置高DTR
  Delay(40);//保持一定时间
  DTR_OFF;//完成连接的断开
}

  这些底层的驱动函数将会使上层协议的编写很方便,更重要的是,它为我们提供了一个驱动抽象层。当底层硬件做出改动的时候,只需要对底层的驱动函数进行改动,而上层函数的代码不变。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top