MSP430驱动DDS模块AD9851

发布者:SereneHeart最新更新时间:2017-09-09 来源: eefocus关键字:MSP430  驱动DDS模块  AD9851 手机看文章 扫描二维码
随时随地手机看文章


  1. #include "msp430x14x.h"  

  2.   

  3. #define ad9581_w_clk   P2DIR|=BIT0  //写时钟信号于P2.0口  

  4. #define ad9581_w_clk_H P2OUT|=BIT0  //P2.0输出高电平  

  5. #define ad9581_w_clk_L P2OUT&=~BIT0 //P2.0输出低电平  

  6.   

  7. #define ad9851_fq_up   P2DIR|=BIT1  //写频率值于P2.1口  

  8. #define ad9851_fq_up_H P2OUT|=BIT1  //P2.1输出高电平  

  9. #define ad9851_fq_up_L P2OUT&=~BIT1 //P2.1输出低电平  

  10.   

  11. #define ad9851_rest    P2DIR|=BIT2  //写复位信号P2.1口  

  12. #define ad9851_rest_H  P2OUT|=BIT2  //P2.2输出高电平  

  13. #define ad9851_rest_L  P2OUT&=~BIT2 //P2.2输出低电平  

  14.   

  15. #define ad9851_bit_data    P4DIR|=BIT7  //写数据于P4.7口  

  16. #define ad9851_bit_data_H  P4OUT|=BIT7  //P4.7输出高电平  

  17. #define ad9851_bit_data_L  P4OUT&=~BIT7 //P4.7输出低电平  

  18.   

  19. //***************************************************//  

  20. //              ad9851复位(并口模式)                 //  

  21. //---------------------------------------------------//  

  22. void ad9851_reset()  

  23. {  

  24.   ad9581_w_clk;  

  25.   ad9581_w_clk_L;  

  26.   ad9851_fq_up;  

  27.   ad9851_fq_up_L;  

  28.   //rest信号  

  29.   ad9851_rest;  

  30.   ad9851_rest_L;  

  31.   ad9851_bit_data_H;  

  32.   ad9851_bit_data_L;  

  33. }  

  34. //***************************************************//  

  35. //              ad9851复位(并口模式)                 //  

  36. //---------------------------------------------------//  

  37. void ad9851_reset_serial()  

  38. {  

  39.   ad9581_w_clk;  

  40.   ad9581_w_clk_L;  

  41.   ad9851_fq_up;  

  42.   ad9851_fq_up_L;  

  43.   //rest信号  

  44.   ad9851_rest;  

  45.   ad9851_rest_L;  

  46.   ad9851_bit_data_H;  

  47.   ad9851_bit_data_L;  

  48.   //w_clk信号  

  49.   //ad9581_w_clk;  

  50.   ad9581_w_clk_L;  

  51.   ad9581_w_clk_H;  

  52.   ad9581_w_clk_L;  

  53.   //fq_up信号  

  54.   //ad9851_fq_up;  

  55.   ad9851_fq_up_L;  

  56.   ad9851_fq_up_H;  

  57.   ad9851_fq_up_L;  

  58. }  

  59. //***************************************************//  

  60. //          向ad9851中写命令与数据(并口)             //  

  61. //---------------------------------------------------//  

  62. void ad9851_wr_parrel(unsigned char w0,double frequence)  

  63. {  

  64.   unsigned char w;  

  65.   long int y;  

  66.   double x;  

  67.   //计算频率的HEX值  

  68.   x=4294967295/180;//适合180M晶振/180为最终时钟频率(或30M六倍频)  

  69.   //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!  

  70.   frequence=frequence/1000000;  

  71.   frequence=frequence*x;  

  72.   y=frequence;  

  73.   P4DIR  |= 0xFF;  

  74.   //写w0数据  

  75.   w=w0;     

  76.   P4OUT  |=w;//w0  

  77.   ad9581_w_clk_H;  

  78.   ad9581_w_clk_L;  

  79.   //写w1数据  

  80.   w=(y>>24);  

  81.   P4OUT  |=w;//w1  

  82.   ad9581_w_clk_H;  

  83.   ad9581_w_clk_L;  

  84.   //写w2数据  

  85.   w=(y>>16);  

  86.   P4OUT  |=w;//w2  

  87.   ad9581_w_clk_H;  

  88.   ad9581_w_clk_L;  

  89.   //写w3数据  

  90.   w=(y>>8);  

  91.   P4OUT  |=w;//w3  

  92.   ad9581_w_clk_H;  

  93.   ad9581_w_clk_L;  

  94.   //写w4数据  

  95.   w=(y>>=0);  

  96.   P4OUT  |=w;//w4  

  97.   ad9581_w_clk_H;  

  98.   ad9581_w_clk_L;  

  99.   //移入始能  

  100.   ad9581_w_clk_H;  

  101.   ad9581_w_clk_L;  

  102. }  

  103. //***************************************************//  

  104. //          向ad9851中写命令与数据(串口)             //  

  105. //---------------------------------------------------//  

  106. void ad9851_wr_serial(unsigned char w0,double frequence)  

  107. {  

  108.   unsigned char i,w;  

  109.   long int y;  

  110.   double x;  

  111.   ad9851_bit_data;  

  112.   //计算频率的HEX值  

  113.   x=4294967295/180;//适合180M晶振/180为最终时钟频率(或30M六倍频)  

  114.   //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz  !!!  

  115.   frequence=frequence/1000000;  

  116.   frequence=frequence*x;  

  117.   y=frequence;  

  118.   //写w4数据  

  119.   w=(y>>=0);  

  120.   for(i=0;i<8;i++)  

  121.   {  

  122.     ad9851_bit_data_H|((w>>i)&0x01);  

  123.     ad9581_w_clk_H;  

  124.     ad9581_w_clk_L;  

  125.   }  

  126.   //写w3数据  

  127.   w=(y>>8);  

  128.   for(i=0;i<8;i++)  

  129.   {  

  130.     ad9851_bit_data_H|((w>>i)&0x01);  

  131.     ad9581_w_clk_H;  

  132.     ad9581_w_clk_L;  

  133.   }  

  134.   //写w2数据  

  135.   w=(y>>16);  

  136.   for(i=0;i<8;i++)  

  137.   {  

  138.     ad9851_bit_data_H|((w>>i)&0x01);  

  139.     ad9581_w_clk_H;  

  140.     ad9581_w_clk_L;  

  141.   }  

  142.   //写w1数据  

  143.   w=(y>>24);  

  144.   for(i=0;i<8;i++)  

  145.   {  

  146.     ad9851_bit_data_H|((w>>i)&0x01);  

  147.     ad9581_w_clk_H;  

  148.     ad9581_w_clk_L;  

  149.   }  

  150.   //写w0数据  

  151.   w=w0;     

  152.   for(i=0;i<8;i++)  

  153.   {  

  154.     ad9851_bit_data_H|((w>>i)&0x01);  

  155.     ad9581_w_clk_H;  

  156.     ad9581_w_clk_L;  

  157.   }  

  158.   //移入始能  

  159.   ad9851_fq_up_H;  

  160.   ad9851_fq_up_L;  

  161. }  

  162. int main( void )  

  163. {  

  164.   // Stop watchdog timer to prevent time out reset  

  165.   WDTCTL = WDTPW + WDTHOLD;  

  166.   //---------------------------------------------------//  

  167.   //并行写1000Hz程序  

  168.   ad9851_reset();  

  169.   ad9851_wr_serial(0x01,1000);  

  170.   //0X01为开六备频  

  171.   //ad9851_wr_parrel(0x00,1000);  

  172.   //0X00为不开六备频  

  173.   //---------------------------------------------------//  

  174.   //---------------------------------------------------//  

  175.   //串行写1000Hz程序  

  176.   //ad9851_reset_serial();  

  177.   //ad9851_wr_serial(0x01,1000);  

  178.   //0X01为开六备频  

  179.   //ad9851_wr_serial(0x00,1000);  

  180.   //0X00为不开六备频  

  181.   //---------------------------------------------------//  

  182.   while(1)  

  183.   {  

  184.   }  

  185.   return 0;  

  186. }  


关键字:MSP430  驱动DDS模块  AD9851 引用地址:MSP430驱动DDS模块AD9851

上一篇:MSP430F449的时钟问题
下一篇:MSP430中继通讯协议

推荐阅读最新更新时间:2024-03-16 15:36

基于MSP430F1611中AD采样不准确与分压电阻问题的详细解答
Q: 学生正在做电源题目,AD检测电源输出电压时发现一系列问题,请各位老师帮忙解答一下,谢谢啦。 一、4个疑问 1. MSP430F1611的AD是什么类型的? (SAR型、开关电容、Flash、双积分型、etc) 2. MSP430F1611分压电阻接多少合适?(输出直流电压为10~20V) 3.AD输入端接跟随器误差能降低一些,但效果不明显,且用AD817做的更随器,要高于1.1V才能更随,有没有一款运放芯片,能在0.5V以上开始跟随呢? 4.有没有什么方法不用分压电阻测量高于AD基准电压的输出电压值? 二、AD采样问题的发现 1.发现分压电阻不是线性的 背景:分压电阻300K、100K,接不同负载输出具有压降,负载变
[单片机]
基于<font color='red'>MSP430</font>F1611中AD采样不准确与分压电阻问题的详细解答
基于MSP430F149单片机的发控时序检测系统设计
由于火箭炮发射的是简易控制火箭弹,因此其定向管与火箭弹之间的电气信号接口除了与普通无控火箭弹一样具有点火信号接口外,还另有一个32芯参数装定信号接口。在发射程序中,如果火控系统计算的火箭弹的飞行控制参数能够准确地装定至火箭弹的控制系统中,则火箭弹按照简易控制方式飞行,否则按照无控方式飞行,导致火箭弹的射击精度大大下降。为了确保火箭弹能够顺利发射以及射击的准确性,在技术阵地进行装填之前,需要对火箭炮上的点火信号线路以及参数装定线路进行严格检测,确保信号线路处于良好的工况。 对于发控系统的检测,在火箭炮配套的机电检测维修车上有发控时序检测装置,用于定性检查定向管的发控时序。该检测装置不能对检测结果进行量化处理与显示,检测时只能通过
[单片机]
基于<font color='red'>MSP430</font>F149单片机的发控时序检测系统设计
总结MSP430学习经验(4)
4.经常有人会问这个语句的MOV.B #LPM0,0(SP)的作用。假如你在进入中断函数之前,430是在LPM0下待机,若要求执行完中断函数之后进入LPM3待机,在中断函数里写MOV.B #LPM3,SR是无效的。因为在进入中断时430会把PC,SR压栈,( SR内保存着低功耗模式的设置)即使你写了MOV.B #LPM3,SR,在退出中断出栈时SR会被重新设置成低功耗0,要达到这样的目的,只能更改堆栈内SR的设置:MOV.B #LPM0,0(SP)。 5中断向量: 430的中断向量是FFE0H—FFFFH,一共32个字节也就是FLASH的最后一段,430的FLASH有大有小,但是最后地址肯定是FFFFH(大FLASH超过6
[单片机]
基于单片机的多路数据采集系统的设计
1 引 言 数据采集是从一个或多个信号获取对象信息的过程。随着微型计算机技术的飞速发展和普及,数据采集监测已成为日益重要的检测技术,广泛应用于工农业等需要同时监控温度、湿度和压力等场合。数据采集是工业控制等系统中的重要环节,通常采用一些功能相对独立的单片机系统来实现,作为测控系统不可缺少的部分,数据采集的性能特点直接影响到整个系统。本文设计的多路数据采集系统采用MSP430系列单片机作为MCU板的核心控制元件。MSP430系列单片机是由TI 公司开发的16位单片机,其突出特点是强调超低功耗,非常适合于各种功率要求低的场合。该系统采样电路采用MSP430单片机内部12位的A/D,使系统具有硬件电路得以简单化,功耗低的特点。由于
[单片机]
基于单片机的多路数据采集系统的设计
MSP430G2253 产生占空比可调的PWM
最近刚刚做了一个用430驱动白光LED的代码 其中用到了以前用到的ADC和PWA这些常用的外设 发现对片子掌握的还是太基础 现在复习一下 以后用到的时候也算有个参考 今天就只学习一点最基本的功能 用430产生一个占空比可调的PWM 先说一下步骤: 1:首先我们要知道那个引脚可以作为定时PWM的输出引脚 如果不太熟悉引脚 就去查阅册 2:配置这个IO 这种情况下 无论那个系列的片子 基本作为PWM输出的时候 IO配置为输 出 选择其端口复用功能 详细配置 看手册 3:设置PWM的周期 TACCR0 或者CCR0 貌似是一个冬冬吧 这里面的数值决定了你PWM的 周期 举个简单的例子 比如你使用1MHZ的时钟频率 CCR0
[单片机]
[MSP430] 3.UART
这一节我们将会看到如何在 MSP430 Launchpad 上使 用 UART 进行通信。我们的程序将会实现通过 UART 从 PC 读入一个字节的数据,然后发送相应的反馈字节给 PC。通信 模式为 115200 波特率,全双工,8 位数据,无奇偶校验,1 位停止位。 MSP430 G2553(Launchpad 使用的芯片)是 MSP430 家 族中比较给力的芯片,它集成了硬件 UART 模块。 UART 通信在处理/调试传感器的时候尤为有用,举一个简单的 例子,我们可以用温度传感器采集数据,经过 AD 转换之后通过 UART 发送给 PC,传送的方式可以是有线,也可以使用无线例如蓝牙。 让我们直接进入正题吧。
[单片机]
[<font color='red'>MSP430</font>] 3.UART
MSP430F169(二)——UART波特率
串口通信 1. 什么叫串口 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。 与并行接口相比,其优点也非常明显: 成本低,最少需要一根线就可以完成传输; 没有数据的相互干扰,误码率相对较低; 缺点:传输速率相对较低。 2. 串口如何建立通信 对单片机有所了解的人都应该知道,串口通信是通过调配单片机内部的寄存器来控制速率。而MSP430F169内部最重要的几个配置无非是波特率的设置和多机通信。 2.1什么是波特率 在讲波特率之前我们要区分两个概念:波特率和比特率。 比特率: 比特率是指每秒传送
[单片机]
<font color='red'>MSP430</font>F169(二)——UART波特率
MSP430单片机在水声应答释放器中的应用
水声应答释放器是合作目标定位导航系统的关键控制单元之一。应答释放器长时间布放在水下,接收水上系统的控制指令,通过单脉冲的接收和发射完成测距。水声应答释放器的功能通常还包括深度(压力)遥测、状态自检和自主释放回收等。 海上应用条件恶劣,使用要求复杂,应答释放器往往需要在满足规定的应答工作时间之外,具有很长的待机等待时间。为此,实用的应答释放器除了器件的选型和电路低功耗设计外,往往都采用值更和工作两种状态来进一步降低功耗;在工作状态下,开启DSP运算电路实现可靠的高精度应答测距;在值更状态下,关闭一切不必要的电路,仅仅检测水上系统的控制指令,并给出回复。 由于应答释放器长时间工作在值更状态下,所以值更电路的功耗成为了首要问题
[单片机]
<font color='red'>MSP430</font>单片机在水声应答释放器中的应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved