毕业设计(论文)单片机与AD9954硬软件的设计_第1页
毕业设计(论文)单片机与AD9954硬软件的设计_第2页
毕业设计(论文)单片机与AD9954硬软件的设计_第3页
毕业设计(论文)单片机与AD9954硬软件的设计_第4页
毕业设计(论文)单片机与AD9954硬软件的设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、dds能有效地实现频率精调,它可以在许多锁相环(pll)设计中代替多重环路。在一个pll中保持适当的分频比关系,可以将dds的高频率分辨率及快速转换时间特性与锁相环路的输出频率高、寄生噪声和杂波低的特点有机地结合起来,从而实现更为理想的ddspll混合式频率合成技术。 在频率粗调时用pll来覆盖所需工作频段,选择适当的分频比可获得较高的相位噪声,而dds被用来覆盖那些粗调增量,在其内实现频率精调。这种方案以其优越的相位稳定性和极低的颤噪效应满足了各种系统对频率源苛刻的技术要求。这也是目前开发应用dds技术最广泛的一种方法。采用这种方案组成的频率合成器已在很高的频率上得以实现。 当然,dds的应

2、用不仅限于这些,它还可用于核磁谐振频谱学及其成像、检测仪表等。随着dds集成电路器件速度的飞速发展,它已成为一种可用于满足系统频率要求的重要而灵活的设计手段本文通过用单片机与ad9954芯片进行通信,使其产生一个稳定的20mhz的频率。从而使人们更多的了解dds及其应用。第一章 单片机的简介一个8位的80c51微处理器,片内256字节数据存储器ram/sfr,用以存放可以读写的数据,如运算的中间结果,最终结果以及欲显示的数据;片内4kb程序存储器flash rom,用以存放程序,一些原始数据和表格;4个8位并行i/o口p0p3,每个端口既可用作输入,也可用作输出;两个16位的定时器/计数器,每

3、个定时器/计数器都可设置成计数方式,用以对外部事件进行计数,也可设置成定时方式,并可以根据计数或者定时的结果实现计算机控制;具有5个中断源,两个中断优先级的中断控制系统;一个全双工uart(通用异步接受发送器)的串行i/o口,用于实现单片机之间或者单片机与pc机之间的串行通信;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接,最高允许震荡频率为24mhz;89c51与80c51相比具有节电工作方式,即休闲方式及掉电方式。11中央处理器(cpu): cpu是单片机内部的核心部件,是一个8位二进制数的中央处理单元,主要由运算器、控制器和寄存器阵列构成。111 运算器:运算器用来完成算术运算和

4、逻辑运算功能,它是 89c51内部处理各种信息的主要部件。运算器主要由算术逻辑单元(alu)、累加器(acc)、暂存寄存器(tmp1、tmp2)和状态寄存器(psw)组成。算术逻辑单元(alu): 89c51中的alu由加法器和一个布尔处理器组成。 累加器(acc):用来存放参与算术运算和逻辑运算的一个操作数或运算的结果。暂存寄存器(tmp1、tmp2):用来存放参与算术运算和逻辑运算的另一个操作数,它对用户不开放。状态寄存器(psw):psw是一个8位标志寄存器,用来存放alu操作结果的有关状态。112控制器:控制器是单片机内部按一定时序协调工作的控制核心,是分析和执行指令的部件。控制器主要

5、由程序计数器pc、指令寄存器ir、指令译码器id和定时控制逻辑电路等构成。程序计数器pc是专门用于存放现行指令的16位地址的。cpu就是根据pc中的地址到rom中去读取程序指令码和数据,并送给指令寄存器ir进行分析。指令寄存器ir用于存放cpu根据pc地址从rom中读出的指令操作码。指令译码器id是用于分析指令操作的部件,指令操作码经译码后产生相应于某一特定操作的信号。定时控制逻辑中定时部件用来产生脉冲序列和多种节拍脉冲。 113寄存器阵列:寄存器阵列是单片机内部的临时存储单元或固定用途单元,包括通用寄存器组和专用寄存器组。通用寄存器组用来存放过渡性的数据和地址,提高cpu的运行速度。专用寄存

6、器组主要用来指示当前要执行指令的内存地址,存放特定的操作数,指示指令运行的状态等。114存储器: 89c51单片机内部有256个字节的ram数据存储器和4kb的闪存程序存储器(flash),当不够使用时,可分别扩展为64 kb外部ram存储器和64 kb外部程序存储器。它们的逻辑空间是分开的,并有各自的寻址机构和寻址方式。这种结构的单片机称为哈佛型结构单片机。程序存储器是可读不可写的,用于存放编好的程序和表格常数。数据存储器是既可读也可写的,用于存放运算的中间结果,进行数据暂存及数据缓冲等。89c51单片机对外部电路进行控制或交换信息都是通过i/o端口进行的。单片机的i/o端口分为并行i/o端

7、口和串行i/o端口,它们的结构和作用并不相同。并行i/o端口: 89c51有四个8位并行i/o端口,分别命名为p0口、p1口、p2口和p3口,它们都是8位准双向口,每次可以并行输入或输出8位二进制信息。 串行i/o端口:89c51有一个全双工的可编程串行i/o端口,它利用了p3口的第二功能,即将p3.1引脚作为串行数据的发送线txd,将p3.0引脚作为串行数据的接收线rxd。 115 定时器/计数器:89c51内部有两个16位可编程定时器/计数器,简称为定时器0(t0)和定时器1(t1),t0和t1分别由两个8位寄存器构成,其中t0由th0(高8位)和tl0(低8位)构成,t1由th1(高8位

8、)和tl1(低8位)构成。th0、tl0、th1、tl1都是sfr中的特殊功能寄存器。t0和t1在tcon和tmod的控制下可工作在定时器模式或计数器模式下,每种模式下又有不同的工作方式。当定时或计数溢出时还可申请中断。116中断系统:单片机中的中断是指cpu暂停正在执行的原程序转而为中断源服务(执行中断服务程序),在执行完中断服务程序后再回到原程序继续执行。中断系统是指够处理上述中断过程所需要的部分电路。89c51的中断系统由中断源、中断允许控制器ie、中断优先级控制器ip、定时器控制器tcon(中断标志寄存器)等构成,ie、ip、tcon均为sfr特殊功能寄存器(见表2.2)。117内部总

9、线:总线是用于传送信息的公共途径。总线可分为数据总线、地址总线和控制总线。单片机内的cpu、存储器、i/o接口等单元部件都是通过总线连接到一起的。采用总线结构可以减少信息传输线的根数,提高系统可靠性,增强系统灵活性。89c51单片机内部总线是单总线结构,即数据总线和地址总线是公用的。118 89c51单片机引脚及其功能:89c51有40条引脚,与其他51系列单片机引脚是兼容的。这40条引脚可分为i/o端口线、电源线、控制线、外接晶体线四部分。其封装形式有两种:双列直插封装(dip)形式和方形封装形式,如图所示。 (a) 双列直插式封装 (b) 方形封装图1 89c51封装和引脚分配图119 8

10、9c51单片机工作方式:单片机在开机时或在工作中因干扰而使程序失控或工作中程序处于某种死循环状态等情况下都需要复位。复位的作用是使中央处理器cpu以及其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。1191 复位原理:89c51单片机的复位靠外部电路实现,信号由reset(rst)引脚输入,高电平有效,在振荡器工作时,只要保持rst引脚高电平两个机器周期,单片机即复位。复位后,pc程序计数器的内容为0000h,其他特殊功能寄存器的复位状态如表2.5所示。片内ram中内容不变。1192 常用复位电路: 一般有上电复位、手动开关复位和自动复位电路三种,如图所示。 (a)上电复位电路;

11、(b) 手动复位电路;(c) 自动复位电路图2 单片机复位电路图1193 89c51时钟电路: 单片机内各部件之间有条不紊的协调工作,其控制信号是在一种基本节拍的指挥下按一定时间顺序发出的,这些控制信号在时间上的相互关系就是cpu时序。而产生这种基本节拍的电路就是振荡器和时钟电路。 89c51单片机内部有一个用于构成振荡器的单级反相放大器,如图所示。 图3 89c51内部振荡器电路图引脚xtal1为反相器输入端,xtal2为反相器输出端。当在放大器两个引脚上外接一个晶体(或陶瓷振荡器)和电容组成的并联谐振电路作为反馈元件时,便构成一个自激振荡器,如下图所示。图4 内部振荡器等效电路图12 单片

12、机的应用领域121 在智能仪器仪表的应用: 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。122在家用电器中的应用:可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。123在工业控制中的应用:

13、 用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。124在计算机网络和通信领域中的应用:现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机、电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。125单片机在医用设备领域中的应用: 单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病

14、床呼叫系统等等。 此外,单片机在工商、金融、科研、教育、国防航空等领域都有着十分广泛的用途。 13单片机的发展趋势 单片机现在可以说是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流c51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供了广阔的天地。纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:131微型单片化: 现在常规的单片机普遍都是将中央处理器(cpu)、随机存取数据存储(ram)、只读程序存储器(rom)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强

15、型的单片机集成了如a/d转换器、pmw(脉宽调制电路)、wdt(看门狗)、有些单片机将lcd(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。 此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中smd(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。132低功耗cmos化:mcs-51系列的8031推出时的功耗达630mw,而现在的单片机普遍都在100mw左右,随着对单片机功耗要求越来

16、越低,现在的各 个单片机制造商基本都采用了cmos(互补金属氧化物半导体工艺)。像80c51就采用了hmos(即高密度金属氧化物半导体工艺)和chmos(互补高密度金属氧化物半导体工艺)。cmos虽然功耗低,但由于其物理特征决定其工作速度不够高,而chmos则具备了高速和低功耗的特点,这些特征,更适合于要求低功耗像电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。133主流与多品种共存: 现在虽然单片机的品种繁多,各具特色,但仍以80c51为核心的单片机占主流,兼容其结构和指令系统的有philips公司的产品,atmel公司的产品和中国台湾的winbond系列单片机。所以8

17、0c51占据了半壁江山。而microchip公司的pic精简指令集合(risc)也有着强劲的发展势头,中国台湾的holtex公司近年的单片机产量与日俱增,与其底价质优的优势,占据一定的市场份额。此外还有motorola公司的产品,日本几大公司的专用单片机。在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补、相辅相成、共同发展的道路。 九十年代以后,单片机在结构上采用双cpu或内部流水线,cpu位数有8位、16位、32位,时钟频率高达20mhz,片内带有pwm输出、监视定时器wdt、可编程计数器阵列pca、dma传输、调制解调器等。芯片向高度集成化、低功耗方

18、向的发展,使得单片机在大量数据的实时处理、高级通信系统、数字信号处理、复杂工业过程控制、高级机器人以及局域网等方面得到大量应用。这类单片机有nec公司的mpd7800,mitsubishi公司的m337700,revkwell公司的r6500。第二章 ad9954简介21 ad9954的内部结构ad9954的内部结构如图1所示,其主要特性如下: 内置400msps时钟; 内含l4位dac;相位、幅度可编程;有32位频率转换字;可用串行io控制;内置超高速模拟比较器可自动线性和非线性扫频内部集成有1024 x 32位ram;采用18v电源供电;可4 20倍倍频;支持大多数数字输入中的5、,输入电

19、平;可实现多片同步。 22引脚说明ad9954采用48脚tqfpep封装,其引脚排列如图2所示,各引脚定义如下:i0 update:在该引脚的上升沿可把内部缓冲存储器中的内容送到io寄存器中。引脚电平的建立和保持与sync-clk输出信号有关;dvdd和avdd:数字与模拟电源引脚,电压值为18v;dgnd和agnd:数字地与模拟地;oscreclk和oscrefclk:参考时钟或振荡输入端;限srai。out:振荡器输出端;clkmodesetect:振荡器控制端,为1时使能振荡器,为0时不使能振荡器;loopfilter:该引脚应与avdd间串联一个1kq电阻和一个01ttf电容;iout

20、和iout:dac输出端,使用时应接一个上拉电阻;dacbp:dac去耦端,使用时应接一个001ttf的旁路电容;dacr鲫:dac复位端,使用时应通过一个392kq的电阻接至agnd端;co out:比较器输出端,可以输出方波或脉冲信号;comp_in和compin:比较器输入端;pwrdwnctl:外部电源掉电控制输入引脚;砒蕊r:芯片复位端;iosync:异步串行端口控制复位引脚;为1时,当前io操作立即停止;为0时开始新的io操作;不用时,此引脚必须接地;sdo:采用3线串口操作时,sdo为串行数据输出端。采用2线串口操作时,sdo不用,可以不连;cs:片选端,低电平有效,允许多芯片共

21、用io总线;sclk:io操作的串行数据时钟输入端;sd10:采用3线串口操作时,sdo为串行数据输入端,采用2线操作时,sdo为双向串行数据端;dvdd_io:i0电源,可以是18v或33v;syncin:同步多片ad9954的输入信号,使用时与主ad9954的syncclk的输出相连;syncclk:时钟输出脚,为内部时钟的14,可用作外围硬件同步;osk:在编程操作时可用该脚来控制幅度与时间斜率,与sync-clk同步;当osk不能被编程时,此脚接dgnd;ps1和ps0:可用来选择4个ram段控制字区中的一个。23 ad9954的串行操作在ad9954的串行操作中,指令字节用来指定读写

22、操作和寄存器地址。由于串行操作是在寄存器级别上发生的,因此串行端口控制器应能识别指令字节寄存器地址和自动产生适当的寄存器字节地址。在串行操作指令阶段和通信阶段,一般先传送指令阶段的指令字,指令阶段对应于sclk的前8个上升沿,其对应的指令字(8比特)包含了以下信息:其中rw位用于决定指令字后的操作是读还是写,高电平为读出,低电平为写入;6、5位的电平高低与操作无关;40位则对应于a4a0,表示操作串行寄存器地址,该地址信息同时包含了与该指令字所在指令段对应的通信段的传送字节数。指令阶段后接着是通讯阶段,传送对应于字节数的几个通信周期。通信周期完成后,ad9954的串口控制器即认为接下来的8个s

23、clk的上升沿对应的是下一个通信周期的指令字。iosync引脚为高时将立即终止当前的通信周期,而当iosync引脚状态回到低电平时,ad9954串口控制器即认为接下来的8个系统时钟的上升沿对应的是下一个通信周期的指令字,从而保持通信的同步。ad9954的串行操作有两种数据传送方式,即从最高位开始传送和从最低位开始传送,这是由控制寄存器0的第8位来决定的。默认状态为低电平,此时先传送最高位,若为高电平则先传送最低位。串行操作 的读写时序如图3所示。24 ad9954的ramad9954内部的102432静态ram具有双向单一人口,对它进行的读写操作不能同时进行,写操作优先。ram的使能位是cfr

24、 (控制功能寄存器的31位),此位为低时,对ram的操作只能通过串行端口;此位为高且cfr 为逻辑0时,ram的输出为相位累加器的输入,此时给芯片提供的是频率转换字;此位为高且cfr 为逻辑1时,ram的输出可作为相位偏移加法器的输入给芯片提供相位偏移控制字。写ram的操作首先通过控制psi、pso来选择ram段,然后再对相应的ram控制寄存器写ram操作的地址变化率、起始地址、终止地址、模式控制和停留方式位。ram段控制寄存器的5、6、7位可用来指示ram操作的5种模式,即直接转换模式、上斜坡模式、双向斜变模式、连续双向斜变模式和连续循环模式。其中连续循环模式是使能ram,ram模式控制字为

25、100,这种模式可提供自动、连续、单向的扫频,地址发生器从起始地址开始,当其增加到终止地址后会自动回到起始地址重新开始下次循环。ram段控制寄存器的39 24位可定义ram控制器在每个地址停留的sync-cik的周期数取值范围是165535;9、8、2316位用于定义10位终止地址;30、1510位则用于定义10位起始地址。寄存器表1。25 如下为dds的基本原理第三章 单片机与ad9954通信31硬件原理 ad9954发射出信号电平转换单片机8051at89s5232 程序图主函数写入频率将浮点型频率值mhz转换成频率控制字频率控制字写入ad9954发出频率此程序的关健是单片机与ad9954

26、进行通信,只须看懂时序图就可以了。第四单 调试下面用keil uvision与 porteus仿真软件介绍数字计算器的仿真与调试。41keil c51单片机软件开发系统411 系统的整体结构:c51工具包的整体结构中,其中uvision与ishell分别是c51 for windows和for dos的集成开发环境(ide),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用ide本身或其它编辑器编辑c或汇编源文件。然后分别由c51及a51编译器编译生成目标文件(.obj)。目标文件可由lib51创建生成库文件,也可以与库文件一起经l51连接定位生成绝对目标文件(.abs)。ab

27、s文件由oh51转换成标准的hex文件,以供调试器dscope51或tscope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如eprom中。412 采用keil 开发的89c51单片机应用程序步骤:.在uvision 集成开发环境中创建新项目(project),扩展文件名为.uv2,并为该项目选定合适的单片机cpu器件(本设计采用atmel 公司下的at89c51).用uvision 的文本编辑器编写源文件,可以是汇编文件(.asm),也可以使c语言文件(扩展名.c),并将该文件添加到项目中去。一个项目文件可以包含多个文件,除了源程序文件外,还可以是

28、库文件、头文件或文本说明文件。.通过uvision 2 的相关选择项,配置编译环境、连接定位器以及debug调试器的功能。.对项目中的源文件进行编译连接,生成绝对目标代码和可选的hex文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。.对没有语法错误的程序进行仿真调试,调试成功后将hex文件写入到单片机应用系统的rom中。第五章 结束语毕业设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。

29、因此作为自动化专业的学生来说掌握单片机的开发技术是十分重要的。 我的题目是单片机与ad9954硬软件的设计,对于我们这些工科学生来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次毕业设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次毕业设计使我懂得了理论与实际相结合是很重要的,只有

30、理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次毕业设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成了。参考文献:1 侯玉宝, 陈忠平,,李成群. 基于proteus的51系列单片机设计与仿真 北京 电子工业出版社,20082 沈德金,陈粤初mcs-51系列单片机接口电路与应用程序实例北京航空航天大学出版社,19903 胡汉才.单片机原理及接口技术.清华大学出

31、版社,19964 何立民mcs-51系列单片机应用系统设计北京航空航天大学出版社,199015 张毅刚、彭喜元、姜守达、乔立岩新编mcs-51系列单片机应用设计哈尔滨工业大学出版社,2003.66 康万新,谢维成,杨加国.毕业设计指导及案例剖析,清华大学出版社, 2007年7 马忠梅等单片机c语言应用程序设计北京航空航天大学出版社,1997:201-2118 付家才,单片机控制工程实践技术,化学工业出版社,2004年9 及力,马东升.protel 99se原理图与pcb设计教程,电子工业出版社,2007年10 黄智伟.全国大学生电子设计竞赛系统设计,北京航空航天大学出版社,2006年附表一:附

32、表二:#include /#includead9954.hunsigned long cfr1 =0;unsigned long cfr1slave=0x00800000;unsigned long cfr2 =0;unsigned long asf;unsigned long arr;unsigned long ftw0;unsigned long pow0;unsigned long ftw1;unsigned long nlscw=0xff000053e2;unsigned long plscw=0xff000053e2;unsigned long multfreq=0xffffffff

33、;/计算频率控制字的系数unsigned long cs2,pwr,ret,clkms;sbit ps1=p10;sbit ps0=p11; /ram部分先择控制sbit sdio=p13;/当做为3线口操作时做为串行数据输入,采用2线时,为双向数据口sbit sclk=p14;/串行数据时钟输入端sbit cs=p15;/片选项,允许多个芯片共用i/o总线 sbit osk=p12;/编程操作时用来控制幅度与时间的斜率sbit io_update=p21;/在上升沿将buffer中的数据送到i/o寄存器中sbit io_sync=p17;/异步串行端口复位控制,为高停止,为0时继续开始新的i

34、/o操作sbit sdo=p16;/sbit jiak=p23;/sbit youyik=p22;/sbit zuoyik=p21;/sbit jiank=p20;/*函数名称:端口操作*功能描述:ad9954端口基本操作*输入:无*输出:无*全局变量:无*调用模块:无*/void sclk_0(void) sclk=0;void sclk_1(void) sclk=1;void sdio_0(void) sdio=0;void sdio_1(void) sdio=1;void cs_enable(void) cs=0; void cs_disable(void) cs=1;void cs2_

35、enable(void)cs2=0;void cs2_disable(void)cs2=1;void io_update_0(void)io_update=0;void io_update_1(void)io_update=1;void io_sync_1(void)io_sync=1;void io_sync_0(void) io_sync=0;void ps0_set_high(void)ps0=1;void ps0_set_low(void)ps0=0;void ps1_set_high(void)ps1=1;void ps1_set_low(void)ps1=0;/*函数名称:io99

36、54_init*功能描述:io_init*输入:无*输出:无*全局变量:无*调用模块:无*/void io9954_init() pwr=0; ret=0; cs2=0; clkms=0; io_update=0; io_sync=0; sdio=0; sclk=0; cs=0; sdo=0;/*函数名称:nnop*功能描述:us级软件延时(不精确)*输入:延时参数,值越大时延时越久*输出:无*全局变量:无*调用模块:无*/void nnop(unsigned long nvalue)unsigned long i;for(i=nvalue;i0;i-);/*函数名称:writebyte*功能

37、描述:向ad9954发送一字节数据msb first*输入:unsigned char data发送的数据*输出:无*全局变量:无*调用模块:端口操作nnop*/void writebyte(unsigned char data)unsigned char k;for(k=0;k8;k+)sclk_0();nnop(4);/延时很重要if(data&0x80)=0x80)sdio_1();elsesdio_0();data=data1;nnop(2);/延时很重要sclk_1();nnop(4);/延时很重要/*函数名称:readbyte*功能描述:从ad9954读取一字节数据msb firs

38、t* 输入:无*输出:unsigned char读回的数据*全局变量:无*调用模块:端口操作*/unsigned char readbyte(void)unsigned char data=0;unsigned char k;sdio=0;for(k=0;k8;k+)sclk_0();nnop(1);nnop(1);sclk_1();nnop(1);nnop(1);data=data1;if(sdio)data|=0x01;sdio=1;return data;/*函数名称:rw_reg*功能描述:ad9954读写寄存器操作*输入:unsigned char addr寄存器地址*unsigne

39、d char *buf写寄存器:指向发送数据的指针*读寄存器:指向读回数据的指针*unsigned char num发送或读回的数据长度 num byte*unsigned char rw读写选择1 读0写*输出:无*全局变量:无*调用模块:readbyte writebyte*/void rw_reg(unsigned char addr,unsigned char*buf,unsigned char num,unsigned char rw)unsigned char ins;if(rw=1)ins=addr|0x80;writebyte(ins);dobufnum-1=readbyte(

40、);num-;nnop(5);while(num);elseins=addr;writebyte(ins);dowritebyte(bufnum-1);num-;nnop(5);while(num);/*函数名称ad9954_write_reg*功能描述:ad9954写寄存器操作*输入:unsigned long command写入寄存器的指令*unsigned char num发送或读回的数据长度num byte*unsigned char addr寄存器地址*输出:无*全局变量:无*调用模块:rw_reg*/void ad9954_write_reg(unsigned long comma

41、nd,unsigned char num,unsigned char addr)unsigned char temp_com5=0,0,0,0,0;unsigned char i;unsigned long temp;temp=command;for(i=0;i8;rw_reg(addr,temp_com,num,0);/*?*函数名称:ftw_float*功能描述:将浮点型频率值mhz转换成频率控制字*输入:float freqfloat浮点型频率值mhz*输出:unsigned long4 byte频率控制字*全局变量:无*调用模块:无*/unsigned long ftw_float(f

42、loat freqfloat)unsigned long temp=0; float freqf=0;freqf=freqfloat/20;/ad9954主频20mhztemp=(freqf*multfreq);return(temp);/*?*函数名称:更新数据操作*功能描述:每次更新寄存器的固定操作*输入:无*输出:无*全局变量:无*调用模块:无*/void ad9954_updata_first(void) io9954_init(); cs_enable(); io_sync_1(); nnop(40); io_sync_0(); io_update_0();void ad9954_u

43、pdata_final(void)cs_disable();nnop(20);io_update_1();/*single-tone mode*/*函数名称:ad9954_singletone_init*功能描述:ad9954 single-tone mode初始化*输入:无*输出:无*全局变量:cfr1 cfr2 ad9954功能控制寄存器*调用模块:ad9954_write_reg*/void ad9954_singletone_init(void)cfr1=0x00000000;ad9954_updata_first();ad9954_write_reg(cfr1,4,0x00);/控制寄存器1ad9954_write_reg(cfr2,3,0x01);/控制寄存器2ad9954_updata_final();/*函数名称:ad9954_si

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论