找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机AD9833正弦波方波和三角波程序

  [复制链接]
跳转到指定楼层
楼主
ID:471909 发表于 2019-5-4 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC89C51控制AD9833产生正弦波,频率可调

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define BITB 0x08000
  4. sbit fsync=P1^4;//引脚定义
  5. sbit sdata=P1^6;//引脚定义
  6. sbit sclk=P1^2;

  7. #define DDS_SCLK_UP sclk=1                 //串行时钟 上升
  8. #define DDS_SLCK_DOWN sclk=0        //
  9. #define DDS_SDATA_UP sdata=1        //串行数据 上升
  10. #define DDS_SDATA_DOWN sdata=0        //
  11. #define DDS_FSYNC_UP  fsync=1        //控制输入 上升
  12. #define DDS_FSYNC-DOWN fsync=0        //

  13. unsigned int Config_Data[B];

  14. void delay2us(unsigned char i)
  15. {
  16.         while(--i);
  17. }

  18. void writeDDS2Byte(unsigned int config)    //写入两个数据
  19. {
  20.                 unsigned char i;
  21.                 DDS_SLCK_DOWN;
  22.                 _nop_();
  23.                 DDS_FSYNC_UP;
  24.                 _nop_();
  25.                 DDS_SLCK_up;
  26.                 delay2us(1);
  27.                 DDS_FSYNC_DOWN;
  28.                 _nop_();
  29.                 for(i=0;i<16;i++)
  30.                 {
  31.                         if(config&0x8000) DDS_SDATA_UP;
  32.                        
  33.                         else DDS_SDATA_DOWN;
  34.                         delay2us(1);
  35.                         DDS_SLCK_DOWN;
  36.                         delay2us(1);
  37.                         DDS_SLCK_up;
  38.                         config<=0;
  39.                        
  40.                 }
  41.                 DDS_FSYNC_UP;
  42.                 _nop_();
  43.                 DDS_SLCK_DOWN;
  44.                 delay2us(100);

  45. }

  46. //波形发生器
  47. //入口参数:频率:Freq(=12000000)
  48. //形状:0(正弦波),1(三角波),2(方波)
  49. //默认:Fmclk=25MHz,0移相,方波不分频

  50. void waveGennerrate(unsigned long Freq,unsigned char Shape)
  51. {
  52.         unsigned long temp;
  53.         unsigned char k;
  54.         if(Freq>12000000) Freq=12000000;
  55.         switch(Shape)
  56.         {
  57.                 case 0: Config_Data[0]=0x2108;        //正弦波
  58.                                 Config_Data[7]=0x2008;
  59.                                 break;
  60.                                
  61.                 case 1: Config_Data[0]=0x210A;        //三角波
  62.                                 Config_Data[7]=0x200A;
  63.                                 break;       
  64.                                
  65.                 case 2: Config_Data[0]=0x2128;        //方波
  66.                                 Config_Data[7]=0x2028;
  67.                                 break;       

  68.                 default: Config_Data[0]=0x2108;        //正弦波
  69.                                 Config_Data[7]=0x2008;
  70.                                        
  71.         }
  72.        
  73.         temp=Freq*13.4217728;//temp=Freq*(0x10000000/20000000);
  74.         Config_Data[1]=temp&0x3fff;
  75.         Config_Data[3]=Config_Data[1];
  76.         Config_Data[2]=(temp&0xfffC000)>>14;
  77.         Config_Data[4]=Config_Data[2];
  78.        
  79.         Config_Data[1]=Config_Data[1]|0x4000;
  80.         Config_Data[2]=Config_Data[2]|0x4000;
  81.         Config_Data[3]=Config_Data[3]|0x8000;
  82.         Config_Data[4]=Config_Data[4]|0x8000;
  83.         Config_Data[5]=0xC000;
  84.         Config_Data[6]=0xE000;
  85.        
  86.        
  87.         for(k=0;k<8;k++)
  88.         {
  89.                 writeDDS2Byte(Config_Data[k]);
  90.         }
  91.        
  92.         /*for(;;){
  93.         writeDDS2Byte(oxc000);
  94.         for(k=200;k;k--);
  95.         writeDDS2Byte(oxc000|2047);
  96.         for(k=200;k;k--);
  97.         }*/

  98. }



  99. void DDS_2FSK(unsigned long freq1,unsigned long freq2,unsigned char shape)
  100. {
  101.         unsigned long temp;
  102.         unsigned char k;
  103.         if(freq1>12000000)  freq1(12000000);
  104.         if(freq2>12000000)  freq2(12000000);
  105.        
  106.         switch(shape)
  107.         {
  108.                 case 0: Config_Data[0]=0x2108;
  109.                                 Config_Data[7]=0x2008;
  110.                                 break;
  111.                                
  112.                 case 1: Config_Data[0]=0x210A;
  113.                                 Config_Data[7]=0x200A;
  114.                                 break;       
  115.                                
  116.                 case 2: Config_Data[0]=0x2128;
  117.                                 Config_Data[7]=0x2028;
  118.                                 break;       

  119.                 default: Config_Data[0]=0x2108;
  120.                                 Config_Data[7]=0x2008;
  121.                                        
  122.         }
  123.         temp=Freq*13.4217728;//temp=Freq*(0x10000000/20000000);
  124.         Config_Data[1]=temp&0x3fff;
  125.         Config_Data[3]=Config_Data[1];
  126.         Config_Data[2]=(temp&0xfffC000)>>14;
  127.         Config_Data[4]=Config_Data[2];
  128.        
  129.         Config_Data[1]=Config_Data[1]|0x4000;
  130.         Config_Data[2]=Config_Data[2]|0x4000;
  131.         Config_Data[3]=Config_Data[3]|0x8000;
  132.         Config_Data[4]=Config_Data[4]|0x8000;
  133.         Config_Data[5]=0xC000;
  134.         Config_Data[6]=0xE000;
  135. ……………………

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

所有资料51hei提供下载:
STC89C51_AD9833.rar (24.16 KB, 下载次数: 161)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:471909 发表于 2019-5-4 14:41 | 只看该作者
顶一个,良心之作!
回复

使用道具 举报

板凳
ID:498609 发表于 2019-8-9 20:34 | 只看该作者
报错*********
回复

使用道具 举报

地板
ID:587878 发表于 2019-9-30 21:55 | 只看该作者
从哪里识别复制了一段?很多地方都是错的。DDS_FSYNC_DOWN抄成了DDS_FSYNC-DOWN ,Config_Data[8]定义的长度为8,抄成了B。。但总的代码还是很值的借鉴的,大家改一下就行了。
回复

使用道具 举报

5#
ID:688300 发表于 2020-10-17 21:01 | 只看该作者
错误好多。。。。。
回复

使用道具 举报

6#
ID:688300 发表于 2020-10-17 21:02 | 只看该作者
错误好多,改都要改好久
回复

使用道具 举报

7#
ID:820507 发表于 2020-11-22 14:59 来自手机 | 只看该作者
Straw 发表于 2020-10-17 21:02
错误好多,改都要改好久

改好了吗?麻烦传一个
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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