图21 数码显示电路
3.9 完整的数据采集系统电路
综上所诉,把各部分外围电路与AT91SAM7S64相连,得到完整的数据采集电路图如图22所示。其中拐角63的PLL滤波器用于稳定, 拐角62 XIN的主时钟振荡器输入外接晶振XTAL,VDDFLASH和VDDIO均为3.3V电压 ,UDP和UDM 分别为USB端口的正负端口 ,VDDCORE内核电源接1.8V ,NRST处理器复位为上拉电阻 ,19和20拐角分别为发送时钟和发送帧同步 ,PA0到PA2为3线-8线译码器74LS138的输入端 , P24到P31为8D锁存器74LS373的输入端。
图22 完整的数据采集电路图
4 软件设计与仿真
4.1 keil简介
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可文护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
4.1.1 keil的特点
1.Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更新体现高级语言的优势。
2.与汇编相比,C语言在功能上、结构性、可读性、可文护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
4.1.2 软件调试方法
软件开发环境使用的是keil for arm。keil默认的输出文件是.hex格式,而ISP软件只支持.bin格式的文件,这就需要进行文件格式的转换,转换工具为hex2bin.exe文件。然而,keil生成的.hex文件是从地址0x100000开始的(这是因为这个芯片的FLASH地址在0x100000),如果直接转换,得到的.bin文件将有1M多,无法下载到目标板上。解决方法是修改.hex文件,将.hex文件的第一行内容:020000040010EA改为:020000040000FA,其中0010指高16位地址为0x0010,将其改为0000,后面的EA为校验和,改为0xFA,否则转换时会因校验和不对而失败。先将Options中的Output标签页中的Create HEX File前的复选框打勾,然后编译,再修改.hex文件,然后将Create HEX File前的勾去掉,在下面After Make一栏中选中Run User Program #1,命令格式为“hex2bin.exe的绝对路径+空格+文件名.hex+空格+文件名.bin+空格+参数”,再编译,就可以得到对应的.bin文件了。
4.2 程序框图的设计
软件程序框图如图23所示
图23 软件程序框图
程序开始先进行初始化,经由系统时钟、ADC、定时器的初始化,紧接着等待起始信号,即发送信号,然后进行信号16位预采样,预采样结束后进行回波的判定,若无回波就进行采样计数,一旦检测到回波就开始由采样得到的计数进行时间和距离的计算和显示,最后程序结束。
4.3 初始化
首先进行系统时钟初始化,禁用所有PMC中断,由于我们需要使用到系统时钟,处理器时钟和USB器件端口时钟,所有我们就要开始这3个时钟的使能。同时我们使用了外部晶振,所以我们开启主振荡器的同时开启主振荡器旁路,当然时钟发生器主振荡器寄存器也必须被开启,我们将主振荡器启用时间开到最大,即FF。当主振荡器开始判定为稳定时,我们开始设置PLL寄存器数据。晶振采用外部无缘晶振,频率为18.432MHz,DIV=14,MUL=72,USBDIV=2,PLL输出频率为PLL输入频率与(MUL+1)的乘积,即18.432/14×(72+1)=96.11MHz,USB时钟为96.11/2=48.055MHz,即48.055MHz。当PLL锁定,主机时钟就绪下,我们选择慢时钟,频率为PLL时钟的二分频。在此等待主机时钟就绪,选择锁相环时钟,等待主机时钟就绪,选择外设时钟完成系统时钟的初始化。程序详见附录A系统时钟初始化部分 雷达测距信号的RAM实现+源代码(9):http://www.751com.cn/tongxin/lunwen_2095.html