1、第第7章章 数字频率合成器的设计数字频率合成器的设计 第第7章章 数字频率合成器的设计数字频率合成器的设计 7.1 设计任务设计任务 7.2 设计方案论证设计方案论证7.3 系统硬件设计系统硬件设计7.4 系统软件设计系统软件设计 7.5 系统设计总结系统设计总结第第7章章 数字频率合成器的设计数字频率合成器的设计 7.1 7.1 设计任务设计任务设计一个数字频率合成器,该数字频率合成器的输出信号波形为正弦波,输出信号的频率为f0=01 MHz,频率最小步进间隔为0.08 Hz,输出电压峰峰值为Up-p=0.35 V,供电电源为+5 V。第第7章章 数字频率合成器的设计数字频率合成器的设计 7
2、.2 7.2 设计方案论证设计方案论证7.2.1 MCU和锁相环路相结合的实现方案MCU和锁相环路相结合的实现方案如图7.1所示。图中,在基本锁相环路的反馈支路中接入了具有高分频比的可变分频器,用MCU控制分频器的分频比就可得到若干个标准频率输出。为了得到所需的频率间隔,往往在电路中还加入一个前置分频器。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.1 MCU和锁相环路相结合的实现方案电路框图晶体振荡器前置分频器M鉴相器环路压控振荡器frfr/Mf0可变分频器MCUf0/N第第7章章 数字频率合成器的设计数字频率合成器的设计 1.前置分频器分频比的确定 由得 ,故 f=f0(N+
3、1)-f0(N)=式中f为频率间隔。由 得 ,若f0的范围为f0 minf0 max,则N对应有NminNmax。7.2.2 MCU和DDS芯片相结合的实现方案DDS的基本原理是利用采样定理,通过查表法产生波形。DDS的结构有很多种,其基本的电路原理可用图7.2表示。NfMfr0rrrfMfMNfMN11NfMfr0MffNr0第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.2 DDS 的原理框图相位累加器波形存储器D/A转换器低通滤波器kff0第第7章章 数字频率合成器的设计数字频率合成器的设计 相位累加器由N位加法器与N位累加寄存器级联构成。每来一个时钟脉冲fs,加法器将频率控
4、制字k与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。第第7章章 数字频率合成器的设计数字频率合成器的设计 用相位累加器输出的数据作为波形存储器(ROM)的相位取样地址,这样就可把存储在波形存储器内的波形抽样值(二
5、进制编码)经查表查出,完成相位到幅值的转换。波形存储器的输出送到D/A转换器,D/A转换器将数字量形式的波形幅值转换成所要求合成频率的模拟信号。低通滤波器用于滤除不需要的取样分量,以便输出频谱纯净的正弦波信号。利用 MCU和DDS芯片相结合的实现方案如图7.3所示。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.3 MCU和DDS芯片相结合的电路框图晶体振荡器DDS键盘MCULED显示f0第第7章章 数字频率合成器的设计数字频率合成器的设计 7.3 系统硬件设计系统硬件设计 7.3.1 单片机与AD9835接口电路设计1.AD9835原理及结构1)DDS工作原理第第7章章 数字频率
6、合成器的设计数字频率合成器的设计 AD9835 中使用的DDS 技术从连续信号的相位出发,将一个余弦信号取样、量化、编码,形成一个余弦函数表存储在ROM 中。合成时改变相位增量,由于相位增量不同,一个周期内的取样点数也不同,这样产生的正弦信号频率也就不同,从而达到频率合成的效果。在这里,余弦波信号本身是非线性的,而其相位是线性的(如图7.4 所示)。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.4 余弦波信号及其相位幅度相位1012 0第第7章章 数字频率合成器的设计数字频率合成器的设计 因此,每隔一段时间t(时钟周期),有对应的相位变化P,即P=t=2ft (7.1)从式(7.
7、1)可得合成信号的频率f为 (7.2)式中,fmt为固定时钟频率,fmt1t。因此,通过改变相位值P,就可以改变合成信号的频率f。2mtfPf第第7章章 数字频率合成器的设计数字频率合成器的设计 DDS 芯片AD9835的原理框图如图7.5 所示。其中,相位累加器为32位,取其高12位作为读取余弦波形存储器的地址。当时钟使相位累加器的输出也即余弦ROM 寻址地址每递增频率设定为K时,对应的波形相位变化为3222 KP(7.3)第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.5 AD9835的原理框图参 考 频 率 源相 位累 加 器余 弦 波存 储 器数/模转 换 器频 率 设 定
8、 数 据输 出 余 弦 波 形第第7章章 数字频率合成器的设计数字频率合成器的设计 因此,改变相位累加器设定值K,就可以改变相位值,从而改变合成信号频率f。经简化,合成信号频率可由下式决定:式中,fmt=50 MHz,由高稳定度晶体振荡器获得,K值在1K232之间,最低频率fmin=fmt/232,为0.0116 Hz,这就是频率合成器的频率分辨率。根据Nyquist采样定律可知,重建信号频率最高可达fmt/2,但通常取最高频率fmax=fmt/3。322mtKff(7.4)第第7章章 数字频率合成器的设计数字频率合成器的设计 2)AD9835芯片内部结构AD9835内部结构框图如图7.6所示
9、,它有一个32位相位累加器,两个32位频率寄存器F0和F1(用于设定K值),四个12位相位寄存器P0、P1、P2、P3。程控切换F0、F1时,可实现相位PSK调制。余弦函数表存储在ROM中。32位相位累加器的输出值截取高12位后与12位相位寄存器Pi值相加,构成12位的相位地址,去寻址余弦ROM表,寻址得到的幅度值经10位的高速D/A转换后成为合成余弦信号。输出信号总谐波分量的畸变量与时钟频率和输出信号频率之比m=fmt/f有关,m值愈大,谐波畸变愈小;m值最小时,谐波畸变最大。为消除m值较小时的谐波畸变,输出端采用LC高阶低通滤波器滤除高次谐波。在设计中采用5阶Butterworth低通滤波
10、器,可以将50 MHz以上的高次谐波功率降低60 dB,可完全满足高精度信号源的要求。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.6 AD9835内部结构框图在板基准满度控制10 位D/ACOSROMREFINFS ADJUSTREFOUTAGNDAVDODGNDDVDDSELSRCSYNCFSELECTBITMCLKFSELECT32 位相位累加器MUX频率寄存器F0频率寄存器F1相位寄存器P0相位寄存器P1相位寄存器P2相位寄存器P3MUXSYNC16 位数据寄存器8 MSB8 LSB解码逻辑串行寄存器控制寄存器FSELECT/PSEL寄存器12AD9835SYNCPSEL
11、1BITPSEL 1SYNCPSEL0BITPSEL 0SELSRC缓发寄存器SDATASCLKFSYNC COMP IOUT第第7章章 数字频率合成器的设计数字频率合成器的设计 3)引脚说明AD9835引脚功能说明如表7.1所示。第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.1 AD9835引脚功能说明 第第7章章 数字频率合成器的设计数字频率合成器的设计 4)命令及控制寄存器说明 AD9835的命令及控制寄存器说明见表7.2表7.8。第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.2 控制寄存器 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.3 控制
12、寄存器地址 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.4 命令 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.5 控制AD9835 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.6 写数据到寄存器 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.7 设置SYNC、SELSRC 第第7章章 数字频率合成器的设计数字频率合成器的设计 表7.8 开关、复位、清零 第第7章章 数字频率合成器的设计数字频率合成器的设计 引脚PSELSCT、PSEL0、PSEL1是外加调制信号,可用于对DDS进行直接位控调制,实现数字二值调频(FSK)和数字四值调
13、相(PSK)。引脚FSYNC、SCLK、SDATA用来对DDS进行程控工作模式设定。数据传输方式为同步串行方式。AD9835可以设定为SLEEP、RESET工作方式。在SLEEP工作方式下,功耗为1.75 mW。第第7章章 数字频率合成器的设计数字频率合成器的设计 2.AD9835的典型应用电路如图7.7所示,REFIN与REFOUT相连接,则参考电压为1.21 V。在引脚REFIN接一个10 nF电容到地。时钟电路由U2构成,U2为50 MHz晶体振荡信号源。SCLK、SDATA、FSYNC与单片机的P1.0、P1.1、P1.2引脚相连,为AD9835提供命令和频率寄存器中的数据,以便实现信
14、号频率的设 置 和 初 相 位 的 设 置。信 号 输 出 端 I O U T 接 5 阶Butterworth LC低通滤波器,通带截止频率为12 MHz,阻带截止频率为25 MHz,阻带衰减大于60 dB。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.7 AD9835 应用电路图SCLKP1.0SDATA789FSYNCP1.1P1.2PSEL1PSEL0PSELECTMCLK1112106R3SW8765VCCR110k50 MHzDVDDOUTDGND3VCCU212DVDDAVDDC110 FVCC4VCCC210 F15COMPU1C316REFINREFOUT231
15、0 FC410 nFFSADJUSTAD98351R43.9kIOUT14R5300 DGNDAGND135(150300 nH)C539 pFL1L2L3L4L5C668 pFC775 pFC891 pFC9100pFC1031 pFUo10kR210k1234第第7章章 数字频率合成器的设计数字频率合成器的设计 7.3.2 单片机及按键电路设计1.AT89C2051的主要性能及引脚功能说明AT89C2051的引脚如图7.8所示。AT89C2051的性能如下:(1)和MCS-51产品兼容。(2)2K字节可重编程闪速存储器。(3)1000写/擦除周期。(4)2.76 V的操作范围。(5)全静态
16、操作:024 MHz。(6)两级加密程序存储器。第第7章章 数字频率合成器的设计数字频率合成器的设计 1RST/VPP2(RXD)P3.03(TXD)P3.14XTAL25XTAL16(INT0)P3.27(INT1)P3.38(T0)P3.49(T1)P3.510GND20VCC19P1.718P1.617P1.516P1.415P1.314P1.213P1.1(AIN1)12P1.0(AIN0)11P3.7图7.8 AT89C2051的引脚图第第7章章 数字频率合成器的设计数字频率合成器的设计(7)1288位内部RAM。(8)两个16位定时器/计数器。(9)六个中断源。(10)编程串行UA
17、RT通道。(11)直接LED驱动输出,I/O引脚缓冲器可吸收20 mA电流。(12)一个片内模拟比较器。(13)低功耗空载和掉电方式。(14)15根可编程I/O引线。第第7章章 数字频率合成器的设计数字频率合成器的设计 2.单片机按键电路设计如图7.9所示,单片机采用Atmel公司的89C2051。在XTAL.1和XTAL.2之间并联12MHz晶振,XTAL.1和XTAL.2分别与地之间接27 pF电容,为单片机提供12 MHz时钟。单片机的机器周期为1s。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.9 单片机及按键电路图RST1P3.02P3.711P1.012P1.113P
18、1.214P1.315P1.416P1.517P1.618P1.719VCC20P3.13XTAL24XTAL15P3.26P3.37P3.48P3.59GND10U289C2051VCCX112 MHzC727 pFP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.7VCCCS1SO2WP3VSS4SISCKRESETVCCU20X5045R1010 kP1.3P3.0P3.2P3.1S1P1.5P1.7P1.4P1.6RESETCOM1R12R23R34R45R56R67R78R89RP1810 kP3.2P3.3P3.4P3.5P3.0P3.1C627 pF5678S
19、3S2S4第第7章章 数字频率合成器的设计数字频率合成器的设计 复位电路采用X5045芯片。当程序“跑飞”时,看门狗芯片X5045将单片机复位,从而保证系统能够正常运行。4个按键中,S1为上键,S2为下键,S3为左键,S4为右键。系统通过4个按键对信号输出频率进行设定。上键S1增大频率步进间隔,下键S2减小频率步进间隔,左键S3按照所设定的频率步进间隔减小信号的输出频率,右键S4按照所设定的频率步进间隔增大信号的输出频率。平时引脚在上拉电阻作用下保持高电平,当按键按下时,把引脚拉为低电平,通过程序来判断按键并实现相应的功能。频率间隔与对应值如表7.9所示。第第7章章 数字频率合成器的设计数字频
20、率合成器的设计 表7.9 频率间隔与对应值表 第第7章章 数字频率合成器的设计数字频率合成器的设计 7.3.3 显示电路设计1.PS7219基本原理PS7219是一个高性能、低价格的多位LED显示驱动器。PS7219是武汉力源公司的产品,它在性能上完全兼容国外的产品MAX7219,并且还增添了位闪等功能。其接口采用流行的同步串行外设接口(SPI),可与任何一种单片机方便地接口,并可同时驱动八位共阴极LED数码管或64只独立LED发光二极管。PS7219A型内置一个可靠的P监控电路,可为外部提供一个脉宽大于140 ms、触发门限典型值为4.63 V的高电平复位信号。第第7章章 数字频率合成器的设
21、计数字频率合成器的设计 图7.10 PS7219引脚图RST1LOAD2DIN3CLK4DIG7DIG6DIG5DIG4DIG3DIG2DIG1GND56789101112V24SASBSCSDSESFSGSDPDOUTDIG8CON2322212019181716151413第第7章章 数字频率合成器的设计数字频率合成器的设计 PS7219内部具有158 bit RAM功能控制寄存器,可方便寻址,对每位数字可单独控制,刷新不需重写整个显示器。显示亮度可数字控制,每位都具有闪烁使能控制位,引脚CON置高电平,可禁止所有显示,达到降低功耗的效果,但同时并不影响对控制寄存器的修改。PS7219还有
22、一个掉电模式、一个允许用户选择从1位数显示到8位数显示的扫描界限寄存器和一个强迫所有LED接通的测试模式。N个PS7219级联,可实现N8位LED数码管的显示。PS7219的应用很广泛,例如条形图显示、7段显示、工业控制、仪表控制面板、LED模型显示等。PS7219是共阴极显示驱动器,采用脚和两种封装,其引脚排列如图7.10所示。第第7章章 数字频率合成器的设计数字频率合成器的设计 2.显示部分电路设计 如图7.11所示,PS7219与AT89C2051的连接为:RST、LOAD、DIN、CLK分别与单片机的RESET、P3.3、P3.4、P3.5相连,通过串行连接方式,单片机把命令和要显示的
23、数据传送给PS7219。八位数码管用来显示信号发生器的输出频率,其中六位为整数部分,两位为小数部分。即频率最小显示分辨率为0.01Hz,最大输出频率为999 999.99 Hz。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.11 显示电路原理图RSTLOADDINCLKDIG7DIG6DIG5DIG4DIG3DIG2DIG1GNDCONDIG8DOUTSDPSGSFSESDSCSBSAV+U2PS72195 VRESETLOADDINCLKC410 F1234567891011121314151617181920212223241234567abcdefg8dp9GNDabfcg
24、dedpLED2DIG21234567abcdefg8dp9GNDabfcgdedpLED3DIG31234567abcdefg8dp9GNDabfcgdedpLED4DIG41234567abcdefg8dp9GNDabfcgdedpLED5DIG51234567abcdefg8dp9GNDabfcgdedpLED6DIG61234567abcdefg8dp9GNDabfcgdedpLED7DIG71234567abcdefg8dp9GNDabfcgdedpLED8DIG81234567abcdefg8dp9GNDabfcgdedpLED1DIG10.1 FC5第第7章章 数字频率合成器的设
25、计数字频率合成器的设计 7.3.4 系统总体电路图系统总体电路图如图7.12所示。图中,运放AD817构成输出信号幅度调节电路。第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.12 系统整体电路图RSTP3.0P3.711P1.012P1.113P1.214P1.315P1.416P1.517P1.618P1.719VCC20P3.1XTAL2XTAL1P3.2P3.3P3.4P3.5GND10U289C2051VCCC727 pFP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.2P3.3P3.4P3.5P3.7VCCCSSOWPVSSSISCKRESETVC
26、CU20X5045R1010 kP1.3P3.0P3.2P3.1S1P3.0P3.1RESETCOMR1R2R3R4R5R6R7R8RP1810 kRST1LOAD2DIN3CLK4DIG75DIG66DIG57DIG48DIG39DIG210DIG111GND12CONDIG8DOUTSDPSGSFSESDSCSBSAV+U2PS72191234567abcdefg8dp9GNDabfcgdedpLED85 VRESETLOADDINCLK10 FC4DIG8SCLKSDATAFSYNCDVDD4AVDD15COMP16REFIN2REFOUT3FSADJUST1IOUT14DGND5AGN
27、D13U1AD9835DVDD1DGND2OUT3U250 MHzVCC1234SWVCCC4C310 FC1C20.1 FVCCVCCR1R310 kR43.9 kR5300 3261574U11AD817VCCVCCR131R141 kC120.01 FC130.01 FC113.3 FC14RP110 k输出Uo1C1031 pF(150300nH)5131415161718192021222324C5 0.1F1234567abcdefg8dp9GNDabfcgdedpLED7DIG71234567abcdefg8dp9GNDabfcgdedpLED6DIG61234567abcdef
28、g8dp9GNDabfcgdedpLED3DIG31234567abcdefg8dp9GNDabfcgdedpLED4DIG4567812340.1 F789P1.0P1.1P1.210 k10 k8765PSEL1PSEL0PSELECTMCLK111210610 F123456789123456789X112 MHzC627 pFP1.5P1.7P1.4P1.6S2S3S4Uo3.3 FL5C9100 pFL4C891 pFL3C775 pFL2C668 pFL1C539 pFR2第第7章章 数字频率合成器的设计数字频率合成器的设计 7.4 7.4 系统软件设计系统软件设计7.4.1 概述
29、整个软件采用模块化程序设计,用C语言编程,便于移植,可读性强,主要分为显示模块disp.c、dds模块ad9835.c、看门狗模块x5045.c及主模块mainpr.c。改变频率时,仅需要改变FREGO寄存器的值,就可以改变输出频率,输出频率32322502MPhasefAPHASEfMCLK(7.5)第第7章章 数字频率合成器的设计数字频率合成器的设计 因此寄存器值为通过按键S1、S2、S3、S4可改变输出信号频率,结合软件设计完成按键的功能。7.4.2 程序主模块程序主模块负责键扫描及其他模块的调用,其框图如图7.13所示。程序主模块(mainpr.c)的源代码如下。32250MfPhas
30、e(7.6)第第7章章 数字频率合成器的设计数字频率合成器的设计 图7.13 程序主模块框图开始20 ms到?键扫描有键按下?100 ms到?调用看门狗键盘处理初始化AD9835、PS7219初始化看门狗,设定中断NNYYNY第第7章章 数字频率合成器的设计数字频率合成器的设计#include#include intrins.h#define uchar unsigned char#define uint unsigned int#define ushort unsigned short#define ulong unsigned long第第7章章 数字频率合成器的设计数字频率合成器的设计
31、uchar data ms_10;uchar data ms_20;uchar data ms_100;uchar data mdelay;uchar keyolddata;ulong data frqvalue;uchar data frqstepvalue;/*设置数码管显示0,1,2,3,4,5,6,7,8 9,-(中),-(上),_(下)对应数据 */uchar code led_buf14=0X7e,0 x30,0 x6d,0 x79,0 x33,0 x5b,0 x5f,0 x70,0 x7f,0 x7b,0 x01,第第7章章 数字频率合成器的设计数字频率合成器的设计 0 x40,
32、0 x08,0 x00;void start_prg();void interrupt_set(void);void delay(uint x);void Key_Handle();uint binarytobcd(uint x);uint bcdtobinary(uint x);extern initad9835();extern open_watchdog();extern watch_dog();extern disp_data(void);/*=第第7章章 数字频率合成器的设计数字频率合成器的设计 TIMER 0 interrupt;20ms=*/void timer0()interr
33、upt 1 using 1TH0=256-(20000/256);TL0=256-(20000%256);ms_10+;ms_20+;if(ms_10+=10)ms_10=0;ms_100+/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 main()start:ms_10=0;ms_20=0;ms_100=0;frqvalue=0 x897;frqstepvalue=1;keyolddata=0 xf0;第第7章章 数字频率合成器的设计数字频率合成器的设计 sclk=0;dio=1;rst=0;start_prg();interrupt_set();delay(100);ope
34、n_watchdog();delay(100);watch_dog();/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 for(;)if(ms_20=2)Key_Handle();ms_20=0;if(ms_100=1)/*100ms*/ms_100=0;watch_dog();第第7章章 数字频率合成器的设计数字频率合成器的设计/*=*/void delay(uint x)uchar i;while(x-0)for(i=0;i125;i+);第第7章章 数字频率合成器的设计数字频率合成器的设计 void start_prg()Init_Led();initad9835();/
35、*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 void interrupt_set()TMOD=0 x21;SCON=0 x50;TH0=256-(10 000/256);TL0=256-(10 000%256);TR0=1;ET0=1;EA=1;第第7章章 数字频率合成器的设计数字频率合成器的设计 void Key_Handle()uchar data keydata;keydata=P1&0 xf0;if(keydata=0 xf0)&(keyolddata=0 xf0)return;else if(keydata=0 xf0)&(keyolddata!=0 xf0)/*有
36、键按下*/第第7章章 数字频率合成器的设计数字频率合成器的设计 switch(keyolddata)case 0 x70:upaddfrq();break;第第7章章 数字频率合成器的设计数字频率合成器的设计 case 0 xb0:downsubfrq();break;case 0 xd0:upstep();break;case 0 xe0:downstep();break;default:keyolddata=0 xf0;第第7章章 数字频率合成器的设计数字频率合成器的设计 else keyolddata=keydata;void upaddfrq()uchar disp_buf8;swit
37、ch(frqstepvalue)case 0:if(frqvalue0 xffffffff-0 xdc)第第7章章 数字频率合成器的设计数字频率合成器的设计 frqvalue=frqvalue+0 xdc;disp_buf0=0;disp_buf1=0;disp_buf2=0;disp_buf3=0;disp_buf4=0;disp_buf5=0;disp_buf6=0;disp_buf7=0;/*显示缓冲区放待显示数据*/disp_data();第第7章章 数字频率合成器的设计数字频率合成器的设计 case 1:if(frqvalue0 x897)frqvalue=frqvalue-0 x8
38、97;disp_buf0=0;disp_buf1=0;disp_buf2=0;disp_buf3=0;disp_buf4=0;disp_buf5=0;disp_buf6=0;disp_buf7=0;disp_data();第第7章章 数字频率合成器的设计数字频率合成器的设计 p()if(frqstepvalue7)frqstepvalue+;disp_data();downstep()if(frqstepvalue0)frqstepvalue-;disp_data();第第7章章 数字频率合成器的设计数字频率合成器的设计 7.4.3 显示模块 显示模块完成对PS7912的控制。显示模块(dis
39、p.c)的源代码如下。#include#include intrins.hsbit din=P34;sbit clk=P35;sbit cs=P33;extern uchar disp_buf8;extern uchar code led_buf13;/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计/*FUNCTION define*/*=*/void Init_Led(void);void Test_led(void);void WriteLed(uchar combyte,uchar data0);void WriteLe(uchar combyte,uchar data0)
40、;void WriteLed0(uchar data1);void WriteLedx0(uchar data1);void disp_data(void);uchar bcd_byte(uchar x);uchar byte_bcd(uchar x);第第7章章 数字频率合成器的设计数字频率合成器的设计/*初始化数码管显示=*/void Init_Led(void)uchar combyte,data0;combyte=0 xff;data0=0 x00;WriteLe(combyte,data0);/*控制显示测试为正常方式*/combyte=0 xfc;data0=0 x01;Write
41、Le(combyte,data0);/*控制关闭模式为正常方式*/第第7章章 数字频率合成器的设计数字频率合成器的设计 combyte=0 xfb;data0=0 x07;WriteLe(combyte,data0);/*控制为8位数码管显示*/combyte=0 xfa;data0=0 x00;WriteLe(combyte,data0);/*控制显示强度为1/32*/combyte=0 xf9;data0=0 x00;WriteLe(combyte,data0);/*控制显示为非编码方式*/第第7章章 数字频率合成器的设计数字频率合成器的设计/*=*/void Test_Led(void)
42、uchar i,combyte,data0;combyte=0 xf1;data0=1;for(i=1;i=8;i+)WriteLed(combyte,led_bufdata0);combyte+;data0+;/*=*/第第7章章 数字频率合成器的设计数字频率合成器的设计 void WriteLed(uchar combyte,uchar data0)WriteLed0(combyte);WriteLedx0(data0);cs=1;void WriteLe(uchar combyte,uchar data0)WriteLed0(combyte);WriteLed0(data0);cs=1;
43、第第7章章 数字频率合成器的设计数字频率合成器的设计/*=*/void WriteLedx0(uchar data1)cs=0;ACC=data1;din=a3;clk=1;_nop_();clk=0;din=a4;clk=1;_nop_();clk=0;din=a7;clk=1;_nop_();clk=0;din=a2;clk=1;_nop_();clk=0;din=a1;clk=1;_nop_();clk=0;din=a0;clk=1;_nop_();clk=0;din=a5;clk=1;_nop_();clk=0;din=a6;clk=1;_nop_();clk=0;第第7章章 数字频率
44、合成器的设计数字频率合成器的设计/*=*/void WriteLed0(uchar data1)cs=0;ACC=data1;din=a7;clk=1;_nop_();clk=0;din=a6;clk=1;_nop_();clk=0;din=a5;clk=1;_nop_();clk=0;din=a4;clk=1;_nop_();clk=0;din=a3;clk=1;_nop_();clk=0;din=a2;clk=1;_nop_();clk=0;din=a1;clk=1;_nop_();clk=0;din=a0;clk=1;_nop_();clk=0;第第7章章 数字频率合成器的设计数字频率合
45、成器的设计/*/void disp_data(void)uchar i,combyte;combyte=0 xf1;for(i=0;i4)&0 x0f;y=y*10;x=z&0 x0f;y=y+x;return(y);第第7章章 数字频率合成器的设计数字频率合成器的设计 uchar byte_bcd(uchar x)uchar y,z;z=x;y=x/10;y=y4;x=(z%10)&0 x0f;y=y|x;return(y);第第7章章 数字频率合成器的设计数字频率合成器的设计 7.4.4 看门狗模块 看门狗模块完成对x5045的控制。看门狗模块(x5045.c)的源代码如下。#includ
46、e#include intrins.h#define uchar unsigned char#define uint unsigned int#define ushort unsigned short第第7章章 数字频率合成器的设计数字频率合成器的设计 sbit SO=P30;/*used for serial output*/sbit SI=P32;/*used for serial input*/sbit SCK=P31;/*used for serial clock*/sbit CS=P13;/*used for serial choice*/#define WREN_INST 0 x0
47、6 /*Write enable latch instruction(WREN)*/#define WRDI_INST 0 x04 /*Write disable latch instruction(WRDI)*/第第7章章 数字频率合成器的设计数字频率合成器的设计#define WRSR_INST 0 x01 /*Write status register instruction(WRSR)*/#define RDSR_INST 0 x05 /*Read status register instruction(RDSR)*/#define WRITE_INST 0 x02 /*Write m
48、emory instruction(WRITE)*/#define READ_INST 0 x03 /*Read memory instruction(READ)*/第第7章章 数字频率合成器的设计数字频率合成器的设计#define STATUS_REG 0 x00 /*status register*/#define MAX_POLL 0 x99 /*Maximum number of polls*/*=sending a byte to EEPROM=*/void outbyt(uchar aadata)uchar x;for(x=0;x8;x+)SCK=0;if(aadata&0 x80
49、)=0)SI=0;第第7章章 数字频率合成器的设计数字频率合成器的设计 else SI=1;_nop_();SCK=1;aadata=aadata1;SI=0;/*=;*Name:WREN_CMD;*Description:Set write enable latch;*Function:This routine sends the command to enable writes to;*the EEPROM memory array or status register第第7章章 数字频率合成器的设计数字频率合成器的设计=*/void wren_cmd(void)SCK=0;/*Bring
50、 SCK low*/CS=0;/*Bring/CS low*/outbyt(WREN_INST);SCK=0;/*Bring SCK low*/CS=1;/*Bring/CS high*/*=第第7章章 数字频率合成器的设计数字频率合成器的设计;*Name:RDSR_CMD;*Description:Read Status Register;*Function:This routine sends the command to read the status register;*Calls:outbyt,inbyt=*/uchar rdsr_cmd()第第7章章 数字频率合成器的设计数字频率合