收藏 分销(赏)

用DDS-AD9854产生各种波形程序集.doc

上传人:w****g 文档编号:2645953 上传时间:2024-06-03 格式:DOC 页数:75 大小:279.54KB
下载 相关 举报
用DDS-AD9854产生各种波形程序集.doc_第1页
第1页 / 共75页
用DDS-AD9854产生各种波形程序集.doc_第2页
第2页 / 共75页
用DDS-AD9854产生各种波形程序集.doc_第3页
第3页 / 共75页
用DDS-AD9854产生各种波形程序集.doc_第4页
第4页 / 共75页
用DDS-AD9854产生各种波形程序集.doc_第5页
第5页 / 共75页
点击查看更多>>
资源描述

1、(完整word)用DDS AD9854产生各种波形程序集用DDS AD9854产生各种波形程序集本程序集包含以下波形的程序:正弦波,三角波,AM调制,FM调制,ASK调制,PSK调制,FSK调制最后还有一个包含12864液晶显示、7290键盘控制的可以输出正弦波,三角波,方波(由单片机产生),AM调制,FM调制,ASK调制和PSK调制的一个DDS函数发生器的综合系统.这些程序都是本人写的,单片机用的是TI的msp430f247,这些程序都经过精心调试,并都已调试成功.希望这些程序能给需要的朋友一定的帮助。头文件【AD9854.h】:define PAR1_H 0x00/Phase Adjust

2、 Register#113:8#define PAR1_L 0X01/Phase Adjust Register1define PAR2_L 0X03/Phase Adjust Register#27:0define FTW1_6 0X04/Frequency Tuning Word1#define FTW1_5 0X05/Frequency Tuning Word1define FTW1_4 0X06/Frequency Tuning Word1#define FTW1_3 0X07/Frequency Tuning Word123:16#define FTW1_2 0X08/Frequen

3、cy Tuning Word1#define FTW1_1 0X09/Frequency Tuning Word17:0#define FTW2_6 0X0A/Frequency Tuning Word2#define FTW2_3 0X0D/Frequency Tuning Word2#define FTW2_2 0X0E/Frequency Tuning Word2#define DFW_6 0X10/Delta Frequency Word#define DFW_5 0X11/Delta Frequency Word39:32define DFW_4 0X12/Delta Frequen

4、cy Worddefine DFW_3 0X13/Delta Frequency Word23:16define DFW_2 0X14/Delta Frequency Word15:8#define DFW_1 0X15/Delta Frequency Word#define UDCLK_4 0X16/Update Clock31:24define UDCLK_3 0X17/Update Clock23:16define UDCLK_2 0X18/Update Clock#define UDCLK_1 0X19/Update Clock7:0define RRC_3 0X1A/Ramp Rat

5、e Clock19:16#define RRC_2 0X1B/Ramp Rate Clock15:8define RRC_1 0X1C/Ramp Rate Clock#define PD 0X1D/Power Down:DC,DC,DC,Comp PD,0,QDAC PD,DAC PD,DIG PD#define REFCLK 0X1E/REFCLK:DC,PLL Range,Bypass PLL,RM4,RM3,RM2,RM1,RM0define MOD 0X1F/MOD:CLR ACC1,CLR ACC2,Triangle,SRC QDAC,M2,M1,M0,Int Update Clk#

6、define OSK_S 0X20/OSK&SERIAL COM:DC,Bypass Inv Sinc,OSK EN,OSK INT,DC,DC,LSB First,SDO Activedefine OSKI_2 0X21/Output Shape Key I Mult11:8define OSKI_1 0X22/Output Shape Key I Multdefine OSKQ_2 0X23/Output Shape Key Q Multdefine OSKRR 0X25/Output Shape Key Ramp Rate7:0define QDAC_2 0X26/QDAC11:8#de

7、fine QDAC_1 0X27/QDAC7:0正弦波:include ”msp430x24x。h#include ”AD9854.h”define uchar unsigned chardefine us _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP()define data_out P5OUTdefine data_in P5IN#define data_dir P5DIRdefine add_out P4OUTdefine add_dir P4DIRdefine ctrl_out P1OUTdefine ctrl_dir P1

8、DIRdefine UDCLK BIT6define WR BIT5#define RD BIT4#define FBH BIT3define SK BIT2#define SP BIT1define RST BIT0void init();void init_9854();void send_byte(uchar add,uchar data);uchar read_byte(uchar add);void delayus(int t);uchar FTW1,FTW2,FTW3,FTW4,FTW5,FTW6,P_D,REF_CLK,UD_CLK1,UD_CLK2,UD_CLK3,UD_CLK

9、4,OSKS,MD;/*系统整体时钟设定*/void time_set() char i; BCSCTL1&=(XT2OFF+XTS); /启动xt2,ACLK为LFXT1 BCSCTL2|=SELM1; /MCLK为XT2 BCSCTL2&=SELS; /SMCLK为DCO do IFG1&=OFIFG; for(i=0xFF;i0;i-); while((IFG1&OFIFG)!=0); /*/*主函数*/int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; in

10、it(); init_9854(); send_byte(PD,0x00); /turn on I DAC and DIG,but still off Q DAC,PD: DC,DC,DC,COMP, 0,QDAC,DAC,DIG/ send_byte(FTW1_6,0x15); /设置频率10MHz:15 55 46 8C 40 00 send_byte(FTW1_5,0x55); send_byte(FTW1_4,0x46); send_byte(FTW1_3,0x8C); send_byte(FTW1_2,0x40); send_byte(FTW1_1,0x00);/ send_byte

11、(FTW1_6,0x02); /设置频率1MHz:02 22 22 22 22 22 send_byte(FTW1_5,0x22); send_byte(FTW1_4,0x22); send_byte(FTW1_3,0x00); send_byte(FTW1_2,0x00); send_byte(FTW1_1,0x00);/*/*单片机初始化*/void init() time_set(); data_dir=0xFF; add_dir=0xff; ctrl_dir=0xff; ctrl_out=0x32; /CP,UDCLK,F/B/H,SK,RST=0;WR,RD,S/P=1/*/*初始化

12、AD9854*/void init_9854() ctrl_out=RST; delayus(1); ctrl_out=RST; /1F为默认值,即Triangle=0,QDAC为内部输入,模式0,内部刷新时钟 send_byte(REFCLK,0x04); /PLL小于200MHz,不旁路PLL,4倍频 delayus(4); /延时4us,以保证数据写入 send_byte(UDCLK_1,0x20); /将刷新周期改为600多ns,保证发送1字节数据的周期大于刷新周期 delayus(2); /延时1us,以保证数据写入 send_byte(PD,0x17); /power down所有

13、模块 send_byte(OSK_S,0x00); /不旁路Inv Sinc,不使能OSK EN/*/ /*发送1字节数据*/void send_byte(uchar add,uchar data) data_dir=0xff; ctrl_out=WR; add_out=add; /送地址 _NOP(); ctrl_out&=WR; /拉低WR data_out=data; /送数据 _NOP(); ctrl_out=WR; /拉高WR delayus(1);/*/*读取一个字节的数据*/uchar read_byte(uchar add) uchar dat; data_dir=0x00;

14、ctrl_out=RD; add_out=add; ctrl_out&=RD; _NOP(); dat=data_in; ctrl_out=RD; return dat;/*/ /*1us延时*/void delayus(int t) while(t)us;三角波:#include ”msp430x24x.h#include AD9854.hdefine uchar unsigned chardefine us _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP()#define data_out P5OUT#define data_in

15、 P5IN#define data_dir P5DIRdefine add_out P4OUT#define add_dir P4DIR#define ctrl_out P1OUTdefine ctrl_dir P1DIR#define UDCLK BIT6#define WR BIT5#define RD BIT4#define FBH BIT3#define SK BIT2#define SP BIT1define RST BIT0void init();void init_9854();void init_TA();void send_byte(uchar add,uchar data)

16、;uchar read_byte(uchar add);void delayus(int t);/*系统整体时钟设定*/void time_set() char i; BCSCTL1=(XT2OFF+XTS); /启动xt2,ACLK为LFXT1 BCSCTL2|=SELM1; /MCLK为XT2 BCSCTL2|=SELS+BIT2+BIT1; /SMCLK为XT2,8分频 do IFG1=OFIFG; for(i=0xFF;i0;i-); while(IFG1&OFIFG)!=0); /*/*主函数*/int main( void ) / Stop watchdog timer to pr

17、event time out reset WDTCTL = WDTPW + WDTHOLD; init(); init_9854(); init_TA(); send_byte(PD,0x10); /turn on I DAC and DIG,but still off Q DAC,PD: DC,DC,DC,COMP, 0,QDAC,DAC,DIG CCR0=18; /18 CCR1=9; /16 send_byte(OSKRR,0X03); /幅度扫描时间设为最大-8。7381ms TACTL=0X0010; /开始增计数模式 while(1);/*/*单片机初始化*/void init()

18、 time_set(); data_dir=0xFF; add_dir=0xff; ctrl_dir=0xff; P1SEL|=0X04; /P1。2为TA1输出 ctrl_out=0x36; /UDCLK,F/B/H,RST=0;WR,RD,SK,S/P=1/*/*初始化AD9854*/void init_9854() ctrl_out=RST; delayus(1); ctrl_out=RST; /1F为默认值,即Triangle=0,QDAC为内部输入,模式0,内部刷新时钟 send_byte(REFCLK,0x04); /PLL小于200MHz,不旁路PLL,4倍频 delayus(4

19、); /延时4us,以保证数据写入 send_byte(UDCLK_1,0x20); /将刷新周期改为600多ns,保证发送1字节数据的周期大于刷新周期 delayus(2); /延时1us,以保证数据写入 send_byte(PD,0x17); /power down所有模块 send_byte(OSK_S,0x30); /不旁路Inv Sinc,使能OSK EN,选择内部配置ramp/*/*Timer_A初始化*/void init_TA() TACTL=0X0204; /选择子系统时钟,不分频,停止计数,清除定时器,禁止中断,清溢出标志 CCTL1=OUTMOD_7; /禁止捕获,输出模

20、式7(复位/置位模式) /*发送1字节数据*/void send_byte(uchar add,uchar data) data_dir=0xff; ctrl_out=WR; add_out=add; /送地址 _NOP(); ctrl_out=WR; /拉低WR data_out=data; /送数据 _NOP(); ctrl_out=WR; /拉高WR delayus(1);/*/*读取一个字节的数据*/uchar read_byte(uchar add) uchar dat; data_dir=0x00; ctrl_out|=RD; add_out=add; ctrl_out=RD; _

21、NOP(); dat=data_in; ctrl_out=RD; return dat;/*/ /*1us延时*/void delayus(int t) while(t)us;AM调制:include ”msp430x24x.h”include AD9854。h”#define uchar unsigned chardefine us _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP()#define data_out P5OUT#define data_in P5INdefine data_dir P5DIR#define add_o

22、ut P4OUTdefine add_dir P4DIR#define ctrl_out P1OUT#define ctrl_dir P1DIR#define UDCLK BIT6#define WR BIT5#define RD BIT4define FBH BIT3define SK BIT2#define SP BIT1#define RST BIT0void init();void init_9854();void init_adc12();void send_byte(uchar add,uchar data);uchar read_byte(uchar add);void dela

23、yus(int t);int samp=0,ATW; float A=0.5,dc,ac; /A:调制指数,dc:直流量,ac:交流量/*系统整体时钟设定*/void time_set() char i; BCSCTL1&=(XT2OFF+XTS); /启动xt2,ACLK为LFXT1 BCSCTL2=SELM1; /MCLK为XT2 BCSCTL2&=SELS; /SMCLK为DCO do IFG1=OFIFG; for(i=0xFF;i0;i-); while(IFG1&OFIFG)!=0); /*/*主函数*/int main( void ) / Stop watchdog timer

24、to prevent time out reset WDTCTL = WDTPW + WDTHOLD; init(); init_9854(); init_adc12(); send_byte(PD,0x10); /turn on I DAC and DIG,but still off Q DAC,PD: DC,DC,DC,COMP, 0,QDAC,DAC,DIG send_byte(FTW1_6,0x2a); /设置频率10MHz:15 55 46 8C 40 00 send_byte(FTW1_5,0xaa); send_byte(FTW1_4,0x8d); send_byte(FTW1_

25、3,0x18); send_byte(FTW1_2,0x80); send_byte(FTW1_1,0x00); ADC12CTL0 = 0x01; /开始转换 while(1);/*/*单片机初始化*/void init() time_set(); data_dir=0xFF; add_dir=0xff; ctrl_dir=0xff; ctrl_out=0x32; /CP,UDCLK,F/B/H,SK,RST=0;WR,RD,S/P=1/*/*初始化AD9854*/void init_9854() ctrl_out|=RST; delayus(1); ctrl_out=RST; /1F为默认

26、值,即Triangle=0,QDAC为内部输入,模式0,内部刷新时钟 send_byte(REFCLK,0x04); /PLL小于200MHz,不旁路PLL,4倍频 delayus(4); /延时4us,以保证数据写入 send_byte(UDCLK_1,0x20); /将刷新周期改为600多ns,保证发送1字节数据的周期大于刷新周期 delayus(2); /延时1us,以保证数据写入 send_byte(PD,0x17); /power down所有模块 send_byte(OSK_S,0x20); /不旁路Inv Sinc,使能OSK EN,使用OSK寄存器/*/*初始化ADC12*/v

27、oid init_adc12() P6SEL = 0XFF; ADC12CTL0 &= ENC; ADC12CTL0=0X03f0; /07采样保持时间为ADC12时钟的32倍(4us),多次采样,2.5V参考源,参考源开,ADC12内核开,溢出中断等关闭 ADC12CTL1=0X0214; /首地址从ADC12MEM0开始,输入信号源为ADC12SC,采样由SAMPCON触发,输入信号同向输入,不分频,时钟源选择MCLK,单通道多次转换 ADC12MCTL0=0X10; /通道0选择内部参考源-2。5V ADC12IE=0X0001; /使能通道0转换完成后中断 _EINT(); ADC12

28、CTL0 = ENC; /使能AD转换/*/ /*发送1字节数据*/void send_byte(uchar add,uchar data) data_dir=0xff; ctrl_out|=WR; add_out=add; /送地址 _NOP(); ctrl_out&=WR; /拉低WR data_out=data; /送数据 _NOP(); ctrl_out|=WR; /拉高WR delayus(1);/*/*读取一个字节的数据*/uchar read_byte(uchar add) uchar dat; data_dir=0x00; ctrl_out|=RD; add_out=add;

29、ctrl_out&=RD; _NOP(); dat=data_in; ctrl_out=RD; return dat;/*/ /*1us延时*/void delayus(int t) while(t-)us;pragma vector=ADC12_VECTOR_interrupt void adc12() samp=ADC12MEM0; dc=(1-A)0XFFF/(1+A); ac=2*A*samp/(1+A); ATW=dc+ac; send_byte(OSKI_2,ATW/0x100); send_byte(OSKI_1,ATW0x100);FM调制:include msp430x24x

30、。hinclude AD9854。h”define uchar unsigned chardefine us _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP()define data_out P5OUT#define data_in P5IN#define data_dir P5DIR#define add_out P4OUTdefine add_dir P4DIRdefine ctrl_out P1OUT#define ctrl_dir P1DIRdefine UDCLK BIT6#define WR BIT5define RD B

31、IT4define FBH BIT3define SK BIT2#define SP BIT1#define RST BIT0void init();void init_9854();void init_adc12();void send_byte(uchar add,uchar data);uchar read_byte(uchar add);void delayus(int t);int samp=0,pp=75; /pp:频偏uchar ftw1,ftw2,ftw3,ftw4,ftw5,ftw6;unsigned int am,per,pp1,pp2,pp3,spp1,spp2,spp3

32、,ftw11,ftw12,ftw13,ftw14,ftw15,ftw16,c,i;long int scal;uchar rd=0;/*系统整体时钟设定*/void time_set() char i; BCSCTL1=(XT2OFF+XTS); /启动xt2,ACLK为LFXT1 BCSCTL2|=SELM1; /MCLK为XT2 BCSCTL2=SELS; /SMCLK为DCO do IFG1=OFIFG; for(i=0xFF;i0;i-); while(IFG1&OFIFG)!=0); /*/*主函数*/int main( void ) / Stop watchdog timer to

33、 prevent time out reset WDTCTL = WDTPW + WDTHOLD; init(); init_9854(); init_adc12(); send_byte(PD,0x10); /turn on I DAC and DIG,but still off Q DAC,PD: DC,DC,DC,COMP, 0,QDAC,DAC,DIG send_byte(FTW1_6,0x02); /设置频率1MHz:02 22 20 a7 a0 00 send_byte(FTW1_5,0x22); send_byte(FTW1_4,0x20); send_byte(FTW1_3,0

34、xa7); send_byte(FTW1_2,0xa0); send_byte(FTW1_1,0x00); ftw1=0x00; ftw2=0xa0; ftw3=0xa7; ftw4=0x20; ftw5=0x22; ftw6=0x02; switch(pp) case 15:pp3=0x0008;pp2=0x3156;pp1=0x544E;break; case 20:pp3=0x000A;pp2=0xEC2C;pp1=0x5000;break; case 25:pp3=0x000D;pp2=0xA746;pp1=0xA640;break; case 30:pp3=0x0010;pp2=0x

35、6251;pp1=0xBA40;break; case 35:pp3=0x0013;pp2=0x1D5C;pp1=0xCE40;break; case 40:pp3=0x0015;pp2=0xD867;pp1=0xE240;break; case 45:pp3=0x0018;pp2=0x9345;pp1=0x2F80;break; case 50:pp3=0x001B;pp2=0x4E6E;pp1=0xC800;break; case 55:pp3=0x001E;pp2=0x0998;pp1=0x6080;break; case 60:pp3=0x0020;pp2=0xC4C1;pp1=0xF

36、900;break; case 65:pp3=0x0023;pp2=0x7FEB;pp1=0x9180;break; case 70:pp3=0x0026;pp2=0x3A7C;pp1=0x9380;break; case 75:pp3=0x0028;pp2=0xF5A6;pp1=0x2C00; ADC12CTL0 |= 0x01; /开始转换 while(1); /*/*单片机初始化*/void init() time_set(); data_dir=0xFF; add_dir=0xff; ctrl_dir=0xff; ctrl_out=0x32; /CP,UDCLK,F/B/H,SK,RST=0;WR,RD,S/P=1/

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服