完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
下面是我找的一个产生正弦波的程序,但是我不知道如何才能改变输出的频率,不知道程序中“设置频率10MHz:15 55 46 8C 40 00”是怎么来的。还有关于给AD9854提供时钟的晶振该选多大的也是一塌糊涂啊。 跪求大神解答! 正弦波: #include "msp430x24x.h" #include "AD9854.h" #define uchar unsigned char #define us _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP() #define data_out P5OUT #define data_in P5IN #define data_dir P5DIR #define add_out P4OUT #define add_dir P4DIR #define ctrl_out P1OUT #define ctrl_dir P1DIR #define UDCLK BIT6 #define WR BIT5 #define RD BIT4 #define FBH BIT3 #define SK BIT2 #define SP BIT1 #define RST BIT0 void 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_CLK4,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;i>0;i--); } while((IFG1&OFIFG)!=0); } //*****************************************************// //**************主函数***************// int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; init(); 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(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 } //*******************************// //**********初始化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所有模块 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; 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; } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
3044个成员聚集在这个小组
加入小组2950 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3644 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2354 浏览 1 评论
4822 浏览 1 评论
2582 浏览 1 评论
1348浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3645浏览 2评论
2951浏览 1评论
1539浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 01:51 , Processed in 1.278868 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号