APP下载

基于音频信道无线传输定位数据的软件设计

2016-02-14李园喜杨家成

信息记录材料 2016年3期
关键词:逗号寄存器字符

李园喜 刘 志 杨家成

(91550部队3分队 辽宁 大连 116023)

基于音频信道无线传输定位数据的软件设计

李园喜 刘 志 杨家成

(91550部队3分队 辽宁 大连 116023)

采用单片机为主控核心,以图像传输微波机的音频传输通道为通信手段,对海上图像传输微波机进行实时定位。本文介绍了实现该方案各功能电路的单片机驱动软件设计思想。

功能电路; 驱动软件; 实时定位

海上图像传输微波机没有实时定位功能,在试验中给天线调整和图像接收带来诸多不便,在历次海上图像传输保障中问题暴露最为明显。为了解决此问题,二三O所三室提出了通过双音多频(DTMF)信号调制GPS定位数据的方法,通过图像微波机传输设备的冗余伴音信道,实现图像微波机所在点位进行实时传输的思想,并且设计了一整套的实现硬件方案。本文根据该硬件方案设计了对各功能硬件进行控制的单片机驱动软件。

1.驱动软件的总体组成及设计

1.1总体组成

本软件的硬件平台由海上GPS定位数据发送端和陆上GPS定位数据显示端组成。

海上GPS定位数据发送端需要编写大容量FLASH存储器的驱动软件、DTMF编解码电路的驱动软件、GPS OEM板驱动软件。

陆上GPS定位数据显示端需要编写LCD显示器的驱动软件、触摸屏控制器的驱动软件和DTMF编解码电路的驱动软件。

驱动软件的内容如图1所示。

1.2海上端硬件驱动软件设计

1.2.1 GPS OEM板驱动软件设计

GPS OEM板上电工作后,按照一定的波特率输出NMEA0183语句。方案采用GARMINGPS25LP GPS OEM板,该板出厂时默认波特率为4800bps,输出语句为$GPGGA 、$ GPGSA 、 $GPGSV 、$GPRMC 和 $PGRMT语句,因此GPS OEM板上电工作后就会以4800bps每秒分别输出一帧$GPGGA 、$ GPGSA 、 $GPGSV 、$GPRMC和 $PGRMT语句。可以通过 $PGRMO 语句屏蔽它们。$PGRMO语句格式为:$PGRMO,<1>,<2>,*hh<CR><LF>

根据单片机测量需要,只保留输出$GPRMC语句,通过单片机串口向GPS OEM板输入:

$PGRMO,,2 (屏蔽所有输出语句)

$PGRMO, GPRMC,1 (激活GPRMC语句)

通过以上设置后,GARMINGPS25LP将连续输出$GPRMC数据,波特率为4800bps。

单片机读取$GPRMC语句的程序设计方法如下:

对于图像传输微波机定位来说,只关心GPS OEM板输出的的经纬度和时间。因此在设计读取$GPRMC语句的单片机软件时,只关心四组数据,即:UTC当地时间的时分秒(hhmmss),UTC当地时间,日月年(ddmmyy);纬度ddmm.mmmm,经度dddmm.mmmm。对GARMIN GPS25LP进行设置后,每隔一秒GARMIN GPS25LP将发送一帧$GPRMC数据。$GPRMC语句格式为:

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<1 0>,<11>,<12>,*hh<CR><LF>

·<1> : UTC 当地时间,hhmmss格式。

·<2> :工作状态, A =可用; V =接收器警报,不可用。

·<3> :纬度, ddmm.mmmm格式(前面的 0 也会传送)。

·<4> :纬度半球, N 或者 S。

·<5> :经度,dddmm.mmmm格式(前面的 0 也会传送)。

·<6> :经度半球, E 或者 W 。

·<7> :对地速度,000.0 ~9999.9 节(前面的 0也会传送)。

·<8> :对地航向,000.0º~ 359.9º(前面的 O也会传送)。

·<9> :UTC当地时间, ddmmyy 格式。

·<10>:磁变,磁偏角地球磁场在不同时间、不同地点的偏差,000.0 ~180.0度。

·<11>:磁变方向,E & W 。

·<12>:工作模式,A=自主,D=差分,E=评估,N=数据无效。

从$GPRMC数据格式,可以知道第一个逗号之后的字符属于时间的时、分、秒数据;第三个逗号之后的字符属于纬度数据;第五个逗号之后的字符属于经度数据;第九个逗号之后的字符属于时间的日、月、年数据。因此,从收到第一个字符"$"后,通过判断逗号就可以寻找到设计所关心的数据,具体程序如下:

serial () interrupt 4 using 1 //辅单片机串行口中断程序

{RI=0; //软件清除中断标志位

if (SBUF==0x24) //判断是否收到GPRMC格式语句的第一个字符"$",

{record=1; //其数值为0x24,收到后开始记录数据,并设置记录标志

igps=0; // 记录纬度数据字符数量的变量

numbercoma=0; // 记录逗号数量的变量

}

if (record==1) // 开始处理GPRMC中的数据信息

{ if(SBUF==0x2c) //利用GPRMC数据中的逗号间隔, {numbercoma++; igps=0; //区分接收到的字符处于何种数据中。

}

if (numbercoma==1) // 第一个逗号之后的字符属于时间的

{stringtime1[igps]=SBUF; //时、分、秒数据

igps++;

}

if (numbercoma==3) // 第三个逗号之后的字符属于纬度数据

{stringlat[igps]=SBUF;

igps++;

}

if (numbercoma==5) // 第五个逗号之后的字符属于经度数据

{stringlon[igps]=SBUF;

igps++;

}

if (numbercoma==9) // 第九个逗号之后的字符属于时间的日、月、年数据

{stringtime2[igps]=SBUF;

igps++;

}

if (SBUF=='*') //判断是否收到GPRMC格式语句的字符"*",如果收到, {numbercoma=0; //则结束记录,

record=0;

igps=0;

}

}

}

以上程序将GPS时间的时、分、秒数据存放在stringtime1[] 数组中,共占6个字节;将日、月、年数据存放在stringtime2[]数组中,共占6个字节;将纬度数据存放在stringlat[]数组中,共占10个字节;将经度数据存放在stringlon []数组中,共占10个字节。

1.2.2 FLASH存储器驱动软件设计

FLASH存储器选用三星K9F2808UC0C。该芯片容量为132Mbits,由1024块组成,每块又由32页组成,一页有528字节(512+16)×8bit。对K9F2808UC0C进行读写操作时,必须以页为单位进行操作。对K9F2808UC0C进行擦除操作,必须以块为单位进行操作。从设计方案可知,单片机的P25、P26用于控制74LS245的数据方向。K9F2808UC0C的驱动程序由读数据程序、写数据程序、擦除程序和写命令程序三部分组成。具体程序如下:

//************读FLASH MEMORY 程序*************

void FlashRead(unsigned int pg)

{

unsigned int l; //每个扇区有528个字节

P24=0; //CS=0;选中k9f2808;

WriteCommand(0); //写读命令

P25=0; //74LS245处于输入状态

while(!RB);

P25=1; //74LS245处于输出状态

WriteAddress(0,pg); //确定读地址

P26=0;

for(l=0;l<512;l++) //连续读取一页的数据

{ P0=0xff;

RD=0;

Readdata[l]=P0; //不再读入

RD=1;

}

P26=1;

P24=1; //cs=1;不再选中k9f2808;

}

//***********写FLASH MEMORY 程序*****************************

void FlashPagWrite(void)//页写操作

{

WDI=0;

P24=0; //CS=0;选中k9f2808;

WriteCommand(16); //将数据写入flash 0x10

P25=0; //74LS245处于输入状态

while(!RB);//等待数据写入结束

P25=1; //74LS245处于输出状态

WriteCommand(112); //读状态量

P25=0;while(!RB);

P25=1; //等待数据写入结束

P26=0;

P0=0xff;

RD=0; //准备好读入

ACC=P0;

ACC=ACC&0x01;

RD=1;

P26=1;

if(ACC!=0) //若最后一位不为零FLASH损坏

{Invbadr[j]=FlashPagCount; //记录损坏的FLASH页码

j++;

}

FlashPagCount+=1;//页码加1

FlashAdrCount=0;

WriteCommand(128); //页写命令0x80;

P25=0;while(!RB);P25=1; //等待数据写入结束

WriteAddress(FlashAdrCount,FlashPagCount); //写地址

P25=0;while(!RB);P25=1; //等待数据写入结束

}

//*************FLASH MEMORY擦除程序***************************

void FlashErase(unsigned int a)

{

unsigned int blockcount;

P24=0; //CS=0;选中k9f2808;

for(blockcount=0;blockcount!=a;blockcount++)

{WDI=0;

WriteCommand(96);//块擦除预命令0x60

WriteAdrpage(32*blockcount);

WriteCommand(208);//块擦除确认命令0xD0

P25=0;

while(!RB);P25=1;

WriteCommand(112);//读擦除状态命令0x70

P25=0;while(!RB);P25=1;

P26=0;

RD=0;

dl_us(1);

ACC=P0;

RD=1;

P26=1;

ACC=ACC&0x01;

if(ACC!=0)//擦除失败

{Invbadr[0]=blockcount;

j++;

}

}

P24=1; //Cs=1;不再选中k9f2808;

}

//*********写命令程序*************************

void WriteCommand(unsigned char comd)

{

P26=P25=1;

P20=1;dl_us(1);

P0=comd;

WR=0; dl_us(1);

WR=1; dl_us(1);

P20=0;

}

1.2.3 DTMF编解码电路驱动软件设计

GPS定位数据经过DTMF MT8880编码后,通过图像微波机传输设备的伴音信道传送到陆上的图像微波机端。陆上的图像微波机端接收到DTMF信号的GPS定位数据后,经过DTMF MT8880解码转换成数字信号,由CPU 的INT0中断接收。对MT8880的操作由初始化程序,数据发送程序,数据接收程序组成。具体实现程序如下:

void initialize8880(void) // MT8880初始化

{CS=0;CK=0;

RS=1;RW=1;/*读状态寄存器*/

CK=1; _nop_();//重复赋值起延时作用

CK=0;

//****************

RS=1;RW=0;/*写控制寄存器*/

P10=P11=P12=P13=0;/*控制寄存器清零*/

CK=1; _nop_();

CK=0;

//****************

RS=1;RW=0;/*写控制寄存器*/

P10=0;P11=0;P12=1;P13=1;/*控制寄存器A值为0XD0*/

CK=1; _nop_();

CK=0;

//****************

RS=1;RW=0;/*写控制寄存器*/

P10=1;P11=0;P12=0;P13=0;/*控制寄存器B值为0X01*/

CK=1; _nop_();

CK=0;

//****************

RS=1;RW=1;/*读状态寄存器*/

CK=1; _nop_();

CK=0;

}

//****************************************

void int1(void) interrupt 3 // 89C51中断方式接收MT8880数据

{ uchar abc,A;

Delay(3000);

CS=0; CK=0;

RW=1;RS=1;/*读状态寄存器*/

CK=1; _nop_();

CK=0; _nop_();

CK=1;

P10=1;P11=1;P12=1;P13=1;/*读数据前单片机总线赋F*/

RW=1;RS=0;/*读接收数据寄存器*/

Delay(30);

abc=P1&0x0f; //读入数据

CK=1; _nop_();

CK=0; _nop_();

}

//******************************************* ***************

void mt8880_WriteData(uchar SendData) // mt8880发送数据

{ CS=0; CK=0;

RS=0; RW=0;

CK=1;_nop_();

P1|=SendData;

_nop_();

CK=0;_nop_();

RW=1;RS=1;

CS=1;

CK=0;

}

1.3陆上端硬件驱动软件设计

1.3.1 触摸屏控制器驱动软件设计

本设计中采用触摸屏专用控制芯片ADS7843实现对触摸屏的控制。它是一款具有同步串行接口的12位取样模数转换器。由于89C51没有专门的同步串行接口,因此采用I/O口模拟同步串行接口(SPI)的方式进行设计,触摸屏被按下时产生INT1中断,单片机通过INT1中断服务程序实现触摸点位置的读取。具体驱动程序如下:

//************I/O定义***************************

// DCLK-------P24

// CS7843-----P234

// DIN ---------P22

// BUSY ------P21

// DOUT-------P20

//*********写ads7843**********************

void ads7843_wr(unsigned char num) //SPI写数据

{unsigned char i=0;

DCLK=0;

for(i=0;i<8;i++)

{ num<<=1;

DIN=CY;

DCLK=0;delay(0); //上升沿有效

DCLK=1; delay(0);}

}

//********读ads7843************************

unsigned int ads7843_rd() //SPI 读数据

{unsigned char i=0;

unsigned int Num=0;

for(i=0;i<12;i++)

{ Num<<=1;

DCLK=1; delay(0); //下降沿有效

DCLK=0; delay(0);

if(DOUT) Num++;

}

return(Num);

}

//**********INT0中断服务程序****************************

ext_1() interrupt 2

{delay(10000); //中断后延时以消除抖动,使得采样数据更准确

DCLK=0;

DIN=1;

DCLK=1;

CS7843=0;

while(BUSY); //如果BUSY信号不好使可以删除不用

delay(2);

ads7843_wr(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料

while(BUSY); //如果BUSY信号不好使可以删除不用

delay(2);

DCLK=1; delay(0);

DCLK=0; delay(0);

X=ads7843_rd();

ads7843_wr(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料

DCLK=1;delay(0);

DCLK=0;delay(0);

Y=ads7843_rd();

CS7843=0;

}

1.3.2 LCD显示电路驱动软件设计设计

本设计采用台湾晶采光电科技股份有限公司生产的AG320240A4STCW-T51液晶显示屏,该液晶显示屏内置SED1335 LCD控制器,具有320列240行的显示能力。LCD显示屏与单片机之间通过一片74ls245进行连接。LCD显示屏主要有两个程序,一个是写命令程序,一个是写数据程序,程序如下:

//******************************************* ****

void WLCDCOM(uchar com ) //写LCD控制命令

{

P26=0; //选中LCD显示屏

P34=0;

P35=0;

P0=com;

A0=1;

WD=0;

delay(1);

WD=1;

P26=1;//不选中LCD显示屏

}

//******************************************* *************

void WLCDDATA(uchar ref ) //写LCD参数和显示字符数据

{

P26=0; //选中LCD显示屏

P34=0;

P35=0;

P0=ref;

A0=0;

delay(5);

WD=0;

WD=1;

A0=1;

}

本设计中的USB接口电路不需要特意编写驱动程序,PC机端的驱动程序Silicon公司免费提供,单片机端的驱动程序其实就是UART的收发程序。

2.结束语

本文根据海上图像传输微波机实时定位所设计的的硬件实现方案,设计了相应的驱动软件。论文中所涉及的软件作者工作中都曾经配合相应电路使用过。年初在验证DTMF信号进行数字通信的PCB板上,使用本文所设计的软件成功实现了数字信号的发送和接收。因此可以说,本文所设计的软件是可行的。

[1] 马忠梅等,《单片机的C语言应用程序设计》,北京航空航天大学出版社,2003.

[2] 徐爱钧 彭秀华.单片机高级语言C51 Windows环境编程与应用.电子工业出版社.

The software design of wireless transmission based on audio channel positioning data


LI Yuan-xi, LIU Zhi, YANG Jia-cheng. The People's Liberation Army 91550 Troops 3 division, Liaoning Province, Dalian 116023, China

By single chip microcomputer as the master control core to microwave image transmission machine audio transmission channel for communications, microwave machine image transmission in real time positioning of sea. This paper introduces the realization of the plan each function circuit of single chip microcomputer driver software design thought.

Function circuit; Driver software; Real time positioning

TP311

A

1009-5624-(2016)03-0057-06

猜你喜欢

逗号寄存器字符
逗号
STM32和51单片机寄存器映射原理异同分析
逗号
Lite寄存器模型的设计与实现
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
HBM电子称与西门子S7-200系列PLC自由口通讯
移位寄存器及算术运算应用
自傲的逗号