找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7269|回复: 7
打印 上一主题 下一主题
收起左侧

17年电赛 远程幅频特性测试装置 (H题)基础部分430源程序

[复制链接]
跳转到指定楼层
楼主
(分享资料)17年电赛 远程幅频特性测试装置 (H题)基础部分--  用ADS9834做频率输出-资源有点少 补充补充


单片机源程序如下:
AD9834.h文件:
  1. #define  uint unsigned int
  2. #define  uchar unsigned char
  3. #define  ulong unsigned long

  4. #define   AD_9834_DIR   P3DIR

  5. #define   FSYNC_H   P3OUT |= BIT0//输入数据的帧同步信号,为低时载入新的字节
  6. #define   FSYNC_L   P3OUT &= ~BIT0

  7. #define   SCLK_H    P3OUT |= BIT1//串行时钟输入,每个下降沿写入一位数据
  8. #define   SCLK_L    P3OUT &= ~BIT1

  9. #define   SDATA_H   P3OUT |= BIT2//数据串口输入端
  10. #define   SDATA_L   P3OUT &= ~BIT2  

  11. long freq=1000000;
  12. long kuandu;
  13. long zhongxin;

  14. /**************初始化**************************/
  15. void AD_9834_init()
  16. {
  17.   AD_9834_DIR |= BIT0 + BIT1 +BIT2;//设置为输出
  18.   FSYNC_H;
  19.   SCLK_H;
  20.   SDATA_H;
  21. }

  22. /*********向9834写入16位频率数据***********************/
  23. void write_AD9834(uint dat)
  24. {
  25.     uchar i;
  26.     FSYNC_H;
  27.     SCLK_H;
  28.     _NOP();
  29.     _NOP();
  30.     FSYNC_L;     //FSYNC拉低时,SCLK必须为高
  31.     for(i=0;i<16;i++)//16位数据写入
  32.     {
  33.         SCLK_H; //先置高为下降沿做准备
  34.         if(dat & 0x8000)
  35.         {
  36.             SDATA_H;//写入
  37.         }
  38.         else
  39.         {
  40.             SDATA_L;//不写入
  41.         }
  42.         SCLK_L;     //下降沿向dds写入数据
  43.         dat <<= 1;
  44.     }
  45.     _NOP();
  46.     FSYNC_H;    //传输完数据置高
  47. }

  48. /***********正弦波频率设置******************/
  49. //寄存器为28位,所以分高14位低14位写入
  50. void AD_9834_output(ulong freq)
  51. {
  52.     ulong dds;
  53.     uint dds_l,dds_h;
  54.     //dds = (long)(freq * 1.7895697666);  //150M晶振  **** 2^28/150M=1.7895697666
  55.     //ΔPhase=f×2^28/fMCLK  一共28位所以2的28次方
  56.   //  dds = (long)(freq * 2.147483648); //125m晶振
  57.    dds = (long)(freq * 2.68435456); //100m晶振
  58.      // dds = (long)(freq * 3.579139413);   //75M晶振;   
  59.     //dds = (long)(freq * 11.184810); //24m晶振
  60.     dds_l =(uint)(dds & 0x3fff);     //取出数据的低十四位(LSB)11 1111 1111 1111
  61.     dds = dds >>14;                 //将MSB的高十四位移到低十四位
  62.     dds_h = (uint)(dds &0x3fff);   //取出MSB的十四位数据

  63. /*****16位码的前两位规定频率寄存器的字节写入,在两个连续的写操作是一样的*********************/
  64.     dds_l = dds_l | 0x4000; //对十四位的LSB/MSB加上两位的地址(01),所以变成
  65.     dds_h = dds_h | 0x4000; //了是十六位的数据(地址01是频率寄器0,10是频率寄存器1)

  66.     write_AD9834(dds_l);    //写入低14位
  67.     write_AD9834(dds_h);   //写入高14位
  68. }


复制代码


  1. #include<msp430F5438A.h>
  2. #include"TX2.h"
  3. #include"AD9834.h"
  4. #include"12864.h"
  5. #include"key.h"


  6. #define  uint unsigned int
  7. #define  uchar unsigned char
  8. #define  ulong unsigned long
  9. //void display(void);


  10. void main(void)
  11. {
  12.     WDTCTL = WDTPW + WDTHOLD;
  13.     P9DIR |= 0x0f;            //P9方向寄存器
  14.     P8DIR |= 0xff;            //P9输出寄存器   
  15.     LCD_init();                //液晶初始化
  16.     LCD_display();
  17.     keyscan1_init();
  18.     initclock();
  19.     AD_9834_init();
  20.     write_AD9834(0x2100);//控制寄存器
  21.     write_AD9834(0x2038);//这里很关键!!
  22. /*9834的控制寄存器是16位       0x2000(01 0000 0000 0000)表示bit13为1
  23.   即允许一个完整字节在两个连续的写操作写入频率寄存器。第一次写操作包括
  24.   14LSBs的频率字节,下一个写操作包括14MSBs*/
  25.     AD_9834_output(freq);
  26.         
  27.         
  28.     while(1)
  29.     {  
  30.        KEY_Fun();
  31.        if(flag_key==1)
  32.        {
  33.          
  34.           freq += 1000000;
  35.           delay_ms(1000);
  36.           AD_9834_output(freq);//把频率写入频率寄存器
  37.           if(freq>40000000)
  38.           for(;freq>1000000;)
  39.          {
  40.             freq -= 1000000;
  41.             delay_ms(1000);
  42.             AD_9834_output(freq);//把频率写入频率寄存器
  43.         }
  44.       
  45.        }
  46. ……………………

  47. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
17年电赛 远程幅频特性测试装置 (H题)基础部分.rar (36.85 KB, 下载次数: 99)





评分

参与人数 2黑币 +55 收起 理由
天才小能猫 + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:371171 发表于 2018-7-14 09:31 来自手机 | 只看该作者
楼主,请问你这个程序,只能完成频率输出是啥意思啊?幅度的输出可调吗?
回复

使用道具 举报

板凳
ID:323350 发表于 2018-7-14 16:51 | 只看该作者
挺好的,可以做参考
回复

使用道具 举报

地板
ID:486198 发表于 2019-3-7 13:32 | 只看该作者
挺好的
回复

使用道具 举报

5#
ID:223294 发表于 2019-7-30 10:27 | 只看该作者
倒装的根号 发表于 2018-7-14 09:31
楼主,请问你这个程序,只能完成频率输出是啥意思啊?幅度的输出可调吗?

幅度不可调 通过可调电阻调节
回复

使用道具 举报

6#
ID:597115 发表于 2019-8-7 18:02 | 只看该作者
不错,参考参考
回复

使用道具 举报

7#
ID:461436 发表于 2019-9-12 15:54 来自手机 | 只看该作者
有用DDS实现的吗
回复

使用道具 举报

8#
ID:702028 发表于 2020-7-9 13:36 | 只看该作者
有文档说明 吗 然后你这个是用什么仿真出来的

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表