




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于NRF905无线收发电路的设计无线收发系统发送控制设计摘要无线数据传输系统主要由无线数据终端、主接收器和主监控器组成,在我的毕业设计中主监控器是PC机,PC机将会运行由VC编程的软件通过25线并行口模拟SPI接口去控制基于NRF905芯片的无线收发模块进行发送数据的操作,主接收器和无线数据终端分别是另外一块基于NRF905的无线收发模块和另一台PC机,接收到的数据通过并行口传到PC终端上显示出来。同时,在并口与模块之间有电平转换和保护电路,以保证模块正常工作。在这次毕业设计中,我主要负责发送控制程序的编写。关键词:NRF905芯片 25线并行口 SPI接口The design of NRF905 based on the receive and dispatch circuit of wirelesses ABSTRACTWireless date transmission system is composed of wireless data terminal, transceiver and controller. PC runs the controlling code to control the communication between the two terminals. The controlling code is compiled by VC. The transmiting and receiving data are through the SPI-port of PC to perform communication. The receiver is another wireless transceiver, and the wireless data terminal is another PC. Received data is transmitted through the parallel port, and then is displayed on the PC terminal. At the meanwhile, there are level switch and protective circuit between the parallel port and model to ensure the model works normally. In the designing course , I mainly take charge of writting the contronlling code of transmitting.Keywords: NRF905-Chip 25 pin parallel portNRF905 SPI -port II目 录中文摘要I外文摘要II绪 论1(一) 课题研究的背景和意义(二) 本课题研究的热点及发展现状一、NRF905芯片及其应用电路的介绍2二、PC并口模拟SPI控制无线收发模块5(一)无线收发模块接口以及工作模式的介绍(二)无线收发模块工作流程(三)并口的介绍(四)VC并口发送模块编程三、无线收发系统的上电实验24结论26参考文献27附录28后记30中国传媒大学本科毕业论文绪 论一个无线双向通讯系统是收发共一体的装置。无线数据传输的特点是使用RF来发送和接收数据包。无线数据传输主要由无线数据终端、主接收器和主监控器组成,主监控器PC与主接收器PC间用并行口通信。整个系统的各个部分都是服务于无线数据传输这个目的。所以,在整个系统的软件设计中,无线数据的传输为最主要部分。在本毕业设计中,PC机通过并口通讯控制无线收发模块实现发送接收数据的功能。(一) 课题研究的背景和意义当代科学技术日益向高速化、智能化、信息化、网络化发展,各种各样的制造业和通信业设备除了可以与计算机联机外,还可以互相联机,而实现设备间相互联机的最具发展潜力的方式就是无线通信。与有线通信方式相比,无线通信具有一系列优点,特别适用于手持现场设备、电池供电设备、遥控遥测设备、水文气象监控设备、生物信号采集系统、工业数据采集系统等。在上述无线通信技术应用实际中,无线通信协议起着至关重要的作用,直接关系到无线通信系统的安全性和误码率以及系统运行的速度。本文基于挪威NordicVLSI公司最新推出的单片无线收发一体芯片nRF905设计出多功能无线数传模块:具有标准RS232C和RS485接口通信模块,设计的多功能无线数传模块由基于nRF905的高频头和标准通信接口模块组成。nRF905适用于无线数据通信、无线报警及安全系统、无线开锁、无线监测、家庭自动化和玩具等诸多领域1。(二) 本课题研究的热点及发展现状本课题主要研究使用并口通讯控制基于NRF905的无线收发模块,这种收发系统它能应用于PC机短距离无线收发数据,省去了网线等物理连接设备。无线系统安装方便、可固定可移动,没有接线,不用改变原有室内装饰。一、 NRF905芯片及其应用电路的介绍nRF905是挪威Nordic VLSI公司推出的单片射频收发器,工作电压为1.93.6V,32引脚QFN封装(55mm),工作于433/868/915MHz三个ISM(工业、科学和医学)频道,频道之间的转换时间小于650us。芯片结构:nRF905片内集成了电源管理、晶体振荡器、低噪声放大器、频率合成器功率放大器等模块,曼彻斯特编码/解码由片内硬件完成,无需用户对数据进行曼彻斯特编码,因此使用非常方便。nRF905由频率合成器、接收解调器、功率放大器、晶体振荡器和调制器组成2,不需外加声表滤波器, ShockBurstTM工作模式,自动处理字头和CRC(循环冗余码校验),使用SPI接口与微控制器通信,配置非常方便。此外,其功耗非常低,以-10dBm的输出功率发射时电流只有11mA,工作于接收模式时的电流为12.5mA,内建空闲模式与关机模式,易于实现节能。NRF905结构框图如下图(1-1)3:图(1-1)NRF905结构框图NRF905快速参考数据请见附录中表(1)。封装的NRF905芯片管脚视图请见附录中图(1)。NRF905极限参数请见附录中表(2)。NRF905常用术语表请见附录中表(3)。NRF905管脚说明如下图(1-2) :图(1-2)NRF905管脚说明由于基于NRF905的无线收发应用电路已比较成熟,我们更关注于nRF905芯片外围环形天线的设计。无线环形天线的工作原理4:环形天线和人体非常相似,有普通的单极或多级天线功能。再加上小型环形天线的体积小、高可靠性和低成本,使其成为微小型通信产品的理想天线。典型的环形天线由电路板上的铜走线组成的电回路构成,也可能是一段制作成环形的导线。其等效电路相当于两个串连电阻与一个电感的串连。在经过天线等效电路的电阻值,损耗电阻值,电感值等参数计算后,我们进行了电路设计,本设计使用天线在900Mhz左右的频率上工作。本设计采用的是ASK方式。采用的芯片是nRF905,为了使天线达到发射电磁波的目的,必须对其参数进行匹配,使天线回路发生震荡。在回路中加入电容,使得天线回路阻抗值最小2。在计算电容值和品质因素后,天线结构大概如下图(1-3):图(1-3)天线结构图二、PC并口模拟SPI控制无线收发模块(一)无线收发模块接口、寄存器以及工作模式的介绍由nRF905组成的高频头用户接口即无线收发模块,该接口由10个数字输入/输出I/O组成,按照工作可分为三组,如图(2-1)5图(2-1)无线收发模块接口图NRF905芯片有两种工作模式和两种节能模式。节能模式有掉电和SPI编程模式,待机和SPI编程模式;工作模式有发射模式,接收模式。由TRX_CE、TXEN、PWR三个模式控制接口控制这4种模式,如下表(2-1):表(2-1)工作模式表SPI接口由SCK、MISO、MOSI以及CSN组成。(1)在配置模式下单片机通过SPI接口配置高频头的工作参数;(2)在发射/接收模式下单片机SPI接口发送和接收数据。3个状态输出接口:提供载波检测输出CD,地址匹配输出AM,数据就绪输出DR。器件配置:NRF905的所有配置都通过SPI接口进行。SPI接口由5个寄存器组成,一条SPI指令用来决定进行什么操作。SPI接口只有在掉电模式和待机模式是激活的。SPI寄存器配置:SPI接口由5个内部寄存器组成。执行寄存器的回读模式来确认寄存器的内容。见图(2-2)图(2-2)SPI接口和内部寄存器图状态寄存器(Status-Register):此寄存器包含数据就绪(DR)和地址匹配(AM)状态。RF配置寄存器(RF-Configuration Register):此寄存器包含收发器的频率,输出功率等配置信息。发送地址寄存器(TX-Address):此寄存器包含目标器件地址,字节长度由配置寄存器设置。发送有效数据寄存器(TX-Payload):此寄存器包含发送的有效ShockBurst数据包数据,字节长度由配置寄存器设置。接受有效数据寄存器(TX-Payload):寄存器包含接受到的有效ShockBurst数据包数据,字节长度由配置寄存器设置。在寄存器中的有效数据由数据准备就绪(DR)指示。SPI指令设置:用于SPI接口的有用命令如下表(2-2)。当CSN为低时,SPI接口开始等待一条指令,任何一条新指令均由CSN的由高到低的转换开始。表(2-2)SPI串行接口指令SPI读操作时序如下图(2-3)图(2-3)SPI读操作时序图SPI写操作时序如下图(2-4)图(2-4)SPI写操作时序图RF配置寄存器说明如下表(2-3)和表(2-4):表(2-3)配置寄存器表表(2-4)配置寄存器表各寄存器的内容见下表(2-5)表(2-6)表(2-5)各寄存器内容表表(2-6)各寄存器内容表所有寄存器的长度都是固定的。可是,用在ShockBurstRX/TX模式TX_PAYLOAD,RX_PAYLOAD,TX_ADDRESS,RX_ADDRESS中的字节数在配置寄存器中设置。寄存器中的内容在进入任何一种节电模式时均不丢失。器件的模式切换时间如下表(2-7)表(2-7)模式切换时间表ShockBurst TX模式时序如下图(2-5)图(2-5)TX模式时序图当一个数据包传输完成时,器件自动进入待机模式,并等待下一个TRX_CE脉冲。如果自动重发功能被允许,数据包江连续不断地传输,直到TRX_CE变低。ShockBurst RX模式时序如下图(2-6)图(2-6)RX模式时序图数据就绪(DR)信号被置高后,一个有效的数据包已经存在于接收寄存器中。数据包可以在接收模式、待机模式或掉电模式下被读出。数据包被读出后,数据就绪(DR)信号和地址匹配信号(AM)被复位为低。(二)无线收发模块收发流程发射模式:当PC有数据需要发往规定节点时,接收节点的地址(TX-address)和有效数据(TX-payload)通过SPI接口传送给高频头。应用协议或PC设置接口速度。PC设置TRX_CE,TXEN为高来启动传输。高频头内部处理:(1)无线系统自动上电;(2)数据包完成(加前导码和CRC校验码);(3)数据包发送(100kbps,GFSK,曼切斯特编码);如果AUTO_RETRAN被设置为高,高频头将连续地发送数据包,直到TRX_CE被设置为低。当TRX_CE被设置为低时,高频头结束数据传输并将自己设置成待机模式。ShockBurst工作模式确保一个传输包发送开始后,总是能够完成;不管在发送过程中TRX_CE,TRX_EN如何被设置。当发送结束后,新的模式被激活。为了测试,如天线调谐和测量发射功率,可以让发射机发射不变的载波。为此,必须让TRX_CE保持为高,而不是一个脉冲。另外,自动重发必须禁止。当数据脉冲被发射完成后,发射机将连续发射未调制的载波。发射模式流程图见图(2-7)图(2-7)发射模式流程图接收模式:通过设置TRX_CE高,TXEN低来选择RX模式。650us以后,高频头监测空中的信息。当高频头发现和接收频率相同的载波时,载波检测(CD)被置高。当高频头接收到有效的地址时,地址匹配(AM)被置高。当高频头接收到有效的数据包(CRC校验正确)时,高频头去掉前导码,地址和CRC位,数据准备就绪(DR)被置高。PC设置TRX_CE低,进入standby模式(待机模式)。PC可以以合适的速率通过SPI接口读出有效数据。当所有的有效数据被读出后,高频头将AM和DR置低。NRF905将准备进入ShockBurst RX,ShockBurst TX或Powerdown模式。如果在引入数据时TRX_CE或TRX_EN的状态改变,NRF905将立刻改变模式,并且数据包丢失。尽管如此,如果PC已经感觉到AM信号,PC就知道NRF905正在接收数据,然后决定是等待DR信号还是改变模式接收模式流程图见图(2-8)图(2-8)接收模式流程图(三)并口的介绍电脑并口2 5针,形状作用详见表(2-8)6:表(2-8)25针并口功能表D0-D7为数据线, S0-S7为状态线, 但是S0,S1,S2是看不见的(从图中你也可以看出), 状态线是用来读取数据的, 但S0却不同, 它是超时标志位, 其他的状态线从第10-11-12-13-15针是用来发送数据的(可以看出是5位). 那么我们怎么能得到这些数据端口呢? 很简单: 每一个并口都有一个地址. 在Windows2000中, 你可以在打印机端口(LPT1)的属性中看到他们. 比如:我的是0378-037F, 如果是10进制, 那么就是888. 同样你也可以看到你的COM端口的地址. 让我以打印机为例解释一下这些针位的意义:S0: 在EPP(增强的串口)模式下, 如果超时的话, 这位置1。S1: 没用(估计是装饰)。S2: 大多数情况下没有使用.S3: 如果打印机发生了错误则置0。它通常被叫做nError或者nFault。S4: 如果数据达到, 则置1.我们通常叫做Select.S5: 如果没有打印纸了则置1.通常叫做PaperEnd或者PaperEmpty或者Perror。S6: 如果打印机得到了一个字节的数据则此位置0, 通常叫做nAck或者nAcknowledge。S7: 如果打印机处于繁忙的状态则此位置0, 通常叫做Busy。控制线:这些线通常用来输出,但有时也可以用于输入。他们占用C0-C7(如图), 但是在接口上C4, C5, C6, C7是不可见, 他们占用的端口地址是0x37A。C0: 这一针脚是保留的. 他发送命令去读取端口上的数据(D0-D7)。 当计算机启动的时候,这一位被置1,通常叫做nStrobe。C1: 保留.通过他发送命令给打印机, 可以得到下一条打印线。(LF)C2: 重置打印机并且清空数据缓冲区。(nInitialize)C3: 保留.置高电平打开数据输入.启动计算机时置0。(nSelectIn)地线:从G0-G7的针是接地用的, 他们一般是用来完善电路的。综上所述,在我的应用程序里使用数据线而不是具有保留位的控制线或者状态线作为数据传输。原因显而易见:我们可以发送任何数据到数据线上,比如00000000,这样8根针就没有任何电压(0伏特);当然也可以发送11111111(255),这样每根针都有5伏特的电压。但是如果我们使用控制线,他有C0,C1和C3是保留,当我们发送0000000的时候,他却只能是0100,所以这样数据就不正确了。表(2-8)中带*号的管脚,当管脚的电平为低时,相应的寄存器中bit的值为1。表(2-8)中带n号的管脚是低有效,意味着通常情况下,它们的值为高电平,当它们需要发送一些指示时它们的值为低。默认状态下,数据端口是作为输出端口,要想打开端口双向的属性,我们需要把控制寄存器的第五位C3置高。一般数据,控制,地址这三个寄存器在电脑中有其相应的地址,我们在编程中会用到这些地址,见表(2-9) 表(2-9)端口地址表(四)VC并口发送模块编程基于nRF905的高频头的无线通信软件设计:由于与RF协议相关的高速信号处理部分已经嵌入在模块内部,高频头可与各种低成本单片机配合使用,也可以与DSP等高速处理器配合使用;高频头提供一个SPI接口,速率由微控制器自己设定的接口速度决定。在RX模式中,地址匹配(AM)和数据准备就绪(DR)信号通知PC一个有效的地址和数据包已经各自接收完成,微控制器即可通过SPI读取接收的数据。在TX模式中,高频头自动产生前导码和CRC校验码,数据准备就绪(DR)信号通知PC数据传输已经完成。这意味着降低PC的存储器需求也就是降低PC成本,同时缩短软件开发时间。配置编程:上电以后PC首先配置高频头模块。先将PWR、TXEN、TRX_CE设为配置模式,PC通过SPI将配置数据移入高频头模块;在掉电和待机模式工作后,配置内容仍然有效。配置数据只有当电源撤除后才会丢失。根据无线收发模块的四个SPI口(SCK,CSN,MOSI,TRX_CE)存在时钟、使能控制,需要同步进行传输数据的特点,我们不能再用传统常见的串口通讯进行控制,考虑到并口八根数据线传输数据同步的特点,我选用了并口通讯来控制此无线收发模块。根据以上两节关于基于NRF905无线收发模块的工作流程的介绍,本次毕业设计决定采用VC软件来进行编程,通过并口来模拟SPI通讯。根据并口的特性,本次毕设中决定选用pin2,pin3,pin4这3根数据线与SPI接口的CSN(使能端),SCK(时钟,对应图(2-10)中CLK端口),MOSI(数据输入,对应图(2-10)的DIN端口)三个相连,而pin5与TRX_CE相连,pin6代表TXEN与高电平相连,芯片的PWR端口接稳压电源,这四对对应端口不能直接相连,其间还需加如图(2-10)7所示的电平转换电路和整形电容。如图(2-9)所示为数字输入脚和数字输出脚所要求的电压值,其中VDD为芯片电源电压3V。这个电路中当pin2(与pin3,pin4相连的接口情况与此相同)为低电平时,考虑到接口内部的CMOS电路9,根据两个电阻560和4700的比值,可以得到此时SCK时钟接口的电平为低,但此低电平值比pin2处低电平值略高,当pin2处为高电平时,SCK接口的电平为高,且值介于V+与pin2处电压值之间。图(2-9)数字输入输出要求电压值图图(2-10)电平转换电路图在编程前,我们需要了解自己PC机上并口寄存器的存储地址,我们可以通过以下方法查看寄存器地址:右键“我的电脑”,进入“属性”性选项,选择“硬件”中“设备管理器”选项,此时会出现一个关于设备的树状图,找到“Ports(Com1 & LPT)”选项,双击“LPT1”,此时你能得到LPT1端口的细节。确定“使用这个设备(启用)”被选择。然后进入“资源”这一栏,你可以看到端口的地址范围8。本毕业设计中建立一个对话框形式的控制界面,其中DATA复选框有八个,分别对应着并口的2到9脚这8个数据口,STATUS状态复选框5个,分别对应着并口的相应端口,CONTROL控制复选框4个,分别对应着并口的相应端口,但在本次毕设中,只用到pin2,pin3,pin4,pin5,pin6五个端口即可实现并口控制无线收发模块进行发送操作。下面介绍VC并口控制发送模块的具体编程步骤:首先,我们打开VC,新建一个“MFC AppWizard (exe)”的工程,取名为ParallelPort,然后选择“基本对话框”模式,然后进入所建的工程,往对话框上添加17复选框和3个SET按钮以及一个start发送按钮,如图(2-11)所示图(2-11)发送对话框图然后在每个复选框和按钮的属性选项中,给它们设置好相应的标题和ID,如pin2复选框的ID就叫IDC_Pin2,标题叫pin2,然后在“建立类向导”中为每个ID设置好对应的一个BOOL型的变量,如pin2的变量名叫m_pin2,然后在CparallelPortDlg类中添加成员函数和代码,现添加一个void UpdatePins()的函数具体代码如下:void CParallelPortDlg:UpdatePins()int reg; reg=_inp(STATUS); if(reg & 0x40)=0) m_pin10=0; else m_pin10=1; if(reg & 0x80)=0) m_pin11=0; else m_pin11=1; if(reg & 0x20)=0) m_pin12=0; else m_pin12=1; if(reg & 0x10)=0) m_pin13=0; else m_pin13=1; if(reg & 0x08)=0) m_pin15=0; else m_pin15=1; / reg=_inp(DATA); if(reg & 0x01)=0) m_pin2=0; else m_pin2=1; if(reg & 0x02)=0) m_pin3=0; else m_pin3=1; if(reg & 0x04)=0) m_pin4=0; else m_pin4=1; if(reg & 0x08)=0) m_pin5=0; else m_pin5=1; if(reg & 0x10)=0) m_pin6=0; else m_pin6=1; if(reg & 0x20)=0) m_pin7=0; else m_pin7=2; if(reg & 0x40)=0) m_pin8=0; else m_pin8=1; if(reg & 0x80)=0) m_pin9=0; else m_pin9=1; reg = _inp(CONTROL); if(reg & 0x01)=0) m_pin1=0; else m_pin1=1; if(reg & 0x02)=0) m_pin14=0; else m_pin14=1; if(reg & 0x04)=0) m_pin16=0; else m_pin16=1; if(reg & 0x08)=0) m_pin17=0; else m_pin17=1; UpdateData(FALSE);并在CparallelPortDlg类定义的顶部添加LPT端口地址的宏定义,代码如下:#define DATA 0x378#define STATUS 0x379#define CONTROL 0x37a其中函数_inp(PORT)的作用是返回参数所代表的端口处当前的数据,相反地,_outp(PORT, DATA)函数的作用事把数据DATA发送到相应的PORT端口上。函数void UpdatePins()的作用是把并口上的数据传给相应变量m_pin等,并在对话框显示数据。接下来,我们做的是初始化对话框的工作,在BOOL C ParallelPortDlg:OnInitDialog()函数中,我们可以根据要求把相应的变量赋初值。如初始化要传输的数据m_pin4(即 数据输入端)为0,初始化m_pin2(即CLK端)为0,初始化m_pin3(CS使能端)为1,并调用_outp(CONTROL, _inp(CONTROL) & 0xDF);UpdatePins();使控制端的低4位的值与对应寄存器低4位的值相同,把并口上的数据传给相应变量m_pin由于我们要不断更新端口的值,所以需要添加WM_TIMER时钟,设置时钟的函数为SetTimer(1,1,NULL),第一个参数是选择标号为1的时钟,第二个参量设置的是更新周期,此处我们设置的是1毫秒。接着我们在类CparallelPortDlg中选择Add Windows Message Handler,并在New Windows messages/events中选择WM_TIMER,并且点击Add and Edit一项,接着我们就可以进入OnTimer(UINT nIDEvent)函数中编写每次更新时所进行的操作,这是整个编程的关键,在此函数中我们将完成对时钟的设置,即时钟周期为2毫秒,1毫秒时钟跳变一次,同时做到在一个时钟周期内发送一位BIT 的数据,DIN发送循环原理图见图(2-12),不同的SET函数代表通过SPI口写不同的命令,(此处假设DIN为32bit的输入数据),具体代码如下:void CParallelPortDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call default int status_reg; status_reg=_inp(STATUS); if(status_reg & 0x40)=0) m_pin10=0; else m_pin10=2; if(status_reg & 0x80)=0) m_pin11=0; else m_pin11=1; if(status_reg & 0x20)=0) m_pin12=0; else m_pin12=1; if(status_reg & 0x10)=0) m_pin13=0; else m_pin13=1; if(status_reg & 0x08)=0) m_pin15=0; else m_pin15=1;m_pin2=0x1;/时钟是一个TIMER翻转一次,两个TIMER一个周期,一个周期发送一个bit的数据switch(grade)/grade为全局变量,代表按下了哪一个SET按钮,如点击SET1则grade为1Case1:if(m_pin2=1)m_pin4=(DIN(31-i)&0x1);i+;/其中 DIN的值是在SET1的响应函数中所初始化的值,而i是在SET按钮的按键响应函数中设置,其值为从0到DIN_length-1,即每个周期发送DIN一位bit发送的顺序是从左到右发送if(i=DIN_length-1) m_pin3=1;Delete_Timer(1);/当数据发送完毕抬高CS电平,使SPI输入失去作用,中止定时器工作,即跳出OnTimer函数循环,并将此时变量的值赋给寄存器break;case2: if(m_pin2=1)m_pin4=(DIN(31-i)&0x1);i+;/i是在SET按钮的按键响应函数中设置,其值为从0到DIN_length-1,即每个周期送DIN一位bit,发送的顺序是从左到右发,但是不同的SET函数中,赋给DIN的值和DIN_LENGTH的值不同if(i=DIN_length-1) m_pin3=1;Delete_Timer(1);/同理break;case3: if(m_pin2=1)m_pin4=(DIN(31-i)&0x1);i+;/同理if(i=DIN_length-1) m_pin3=1;Delete_Timer(1);/同理break;UpdateData(FALSE);CDialog:OnTimer(nIDEvent);DIN数据8bit56473210i=0时将DIN右移7位后和0x1进行与运算,可将此bit传给m_pin4i=4时将DIN右移3位后和0x1进行与运算,可将此bit传给m_pin4i=7时不用移位直接和0x1进行与运算,可将此bit传给m_pin4图(2-12)DIN发送循环原理图为了让复选框中的打勾打叉能与相应的变量的值10变化对应起来,我们在函数中添加代码如下:BEGIN_MESSAGE_MAP(CParallelPortDlg, CDialog) /AFX_MSG_MAP(CParallelPortDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() /AFX_MSG_MAP /Code added by me from here. ON_COMMAND_RANGE(IDC_Pin2, IDC_Pin9, ChangePin) ON_COMMAND(IDC_Pin14, ChangeControl) ON_COMMAND(IDC_Pin16, ChangeControl) ON_COMMAND(IDC_Pin17, ChangeControl) ON_COMMAND(IDC_Pin1, ChangeControl) /Code added by me till here END_MESSAGE_MAP()在上面的相应函数代码中我调用了ChangeControl和 ChangePin,于是我在类CparallelPortDlg中添加两个成员函数void ChangePin() 和 void ChangeControl()编写代码如下void CParallelPortDlg:ChangePin(int pin) int data_register, new_register;UpdateData(TRUE);data_register=_inp( DATA );new_register=0;if( m_pin2=TRUE ) new_register |= 0x01;if( m_pin3=TRUE ) new_register |= 0x02;if( m_pin4=TRUE ) new_register |= 0x04;if( m_pin5=TRUE ) new_register |= 0x08;if( m_pin6=TRUE ) new_register |= 0x10;if( m_pin7=TRUE ) new_register |= 0x20;if( m_pin8=TRUE ) new_register |= 0x40;if( m_pin9=TRUE ) new_register |= 0x80;_outp(DATA, new_register);void CParallelPortDlg:ChangeControl() int control_register, new_register;UpdateData(TRUE);control_register = _inp( CONTROL );new_register = control_register;if( m_pin1= 0 ) new_register &= 0xFE; else new_register |= 0x01; if( m_pin14=0 ) new_register &= 0xFD; else new_register |= 0x02; if( m_pin16=0 ) new_register &= 0xFB; else new_register |= 0x04; if( m_pin17=0 ) new_register &= 0xF7; else new_register |= 0x08; _outp(CONTROL, new_register); UpdateData(TRUE)和UpdateData(FALSE)是两个重要的函数,前者把复选框中的打勾赋值给对应的变量,后者把变量的值显示为复选框上的打勾或没打勾。然后我们要编写SET1,SET2,SET3 按钮的响应函数void CParallelPortDlg:OnSet1()void CParallelPortDlg:OnSet2()void CParallelPortDlg:OnSet3()中的代码。int i=0;初始化一些用以控制循环的全局变量i为0。然后初始化DIN即要传输数据的值。然后m_pin3=0;把CSN的值置低,因为当CSN为低时,SPI接口开始等待一条指令,任何一条新指令均由CSN的由高到低的转换开始。我们再根据DIN的值用计算长度的函数计算出它的长度DIN_length,然后再启动一毫秒为周期的定时器SetTimer(1,1,NULL)函数,执行OnTimer(UINT nIDEvent)里的循环操作。其中SET1代表写配置寄存器的命令,SET2代表写TX地址的命令,SET3代表写TX有效数据的命令。接着我们还要编写start按钮的响应函数,由于start按钮代表的是开始发送,故在此函数void CParallelPortDlg:Onstart()中,我们需要将m_pin5和m_pin6的值均置高,即m_pin5=1,m_pin6=1;这样就将发送模块的工作模式置于发射状态,芯片便自动开始发送数据。到此软件编写基本完成。但是发现在WINXP以及WIN2000以上的系统不能直接访问端口,需要在ParallelPortDlg.cpp顶部添加如下代码short _stdcall Inp32(short portaddr);void _stdcall Out32(short portaddr, short datum);要在工程的存储的文件夹中加入inpout32.dll 和 inpout32.lib这两个文件,同时原来的_inp和_outp函数要相应改为Inp32和Out32函数。这样此发送模块控制软件即可在XP系统下运行了。三、无线收发系统的上电实验 无线收发系统的框图如图(3-1)所示PC机nRF905PC机nRF905发送端接收端图(3-1)无线收发系统图当软件准备就绪后,我们开始硬件的整合,首先我们准备好了两台PC,一根并口线,以及稳压电源,一些必要的电阻电容,将PC并口经由电平转换电路与无线收发模块对应的三个接口相连,连接方法主要采用焊锡,然后我们要针对不同得SET函数给长整型数据DIN赋具体值,并设计好如何连接好无线收发模块的另外3个输入接口TXEN,TRX_CE,PWR三个接口,我们可选用并口的另外2个数据口控制TXEN和TRX_CE,用稳压电源接PWR 。然后让无线发送模块处于待机模式,令CSN为低,根据本论文第三部分第一节关于无线模块工作以及SPI口命令的介绍,当我点SET1时,我们需要初始化的DIN输入的数据是“0x00”这代表写配置寄存器命令,并从第0字节开始,接着是“0x6C0E440101E7E7E7E7DE”这段数据的意思是:将频段设置为433.2MHZ,输出功率为10DB,不重发,节电为正常模式,地址宽度设置为4字节,接收发送有效数据长度为1字节,接收地址为E7E7E7E7,CRC被允许,16位CRC校验,外部时钟信号使能,16M晶振10。当我点SET2时,我们需要输入的初始化DIN数据是“00100000”,这代表写TX有效数据的命令,接着我们写一个字节的任意数据如“00101010”。当我点SET3时,我们需要输入的初始化DIN数据时“00100010”,这代表写TX地址的命令,后面跟着4个字节的代表发送模块本身地址的数据。当SET1,SET2,SET3都完成后,我们点击“start”按钮进入发送模式,即将TRX_CE和TXEN都置1,同时将另一块基于NRF905的无线收发模块置于接收模式,即将TRX_CE置1,TXEN置0,将接受模块的MISO输出端口经由电平转换电路后与并口的m_pin4相连,其他的2个SPI接口与PC并口的接法和发送模块与PC并口的接法一样,即CLK接m_pin2,CSN接m_pin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高校退休管理岗招聘考试重点题
- 2025年机关财务招聘面试模拟试卷
- 2025年无机化工生产工考试重点题及答案集解析集集解析集
- 2025年社会福利会计能力题集
- 课件APP介绍教学课件
- 2025年宠物销售代表面试题及答案
- 2025年风险管理师职业素质评估试题及答案解析
- 2025年快递企业安全实务题及答案
- 2025年志愿服务基金会笔试模拟考试试卷
- 机电专业班长培训知识课件
- 第五讲中日关系课件
- 一年级上册语文全册课件
- 消防安全检查记录表(完整详细版)1
- (完整)动画运动规律动物ppt
- 光伏电站项目监理旁站方案
- 2022年家用空调安装合同范本
- 二手车鉴定评估的报告书
- 教学课件 金属学与热处理-崔忠圻
- 多智能体系统教材课件汇总完整版ppt全套课件最全教学教程整本书电子教案全书教案课件合集
- 艺术欣赏完整版课件全套ppt教程(最新)
- 北师大版五年级数学上册全册教案含反思
评论
0/150
提交评论