ad9850-c程序-设计源代码

2012-09-03 19:29:53来源: 互联网

ad9850-c程序-源代码

#include 
#include
float l,m,n,q,z;
double k;  
//-----------------------定义管脚-----------------------------
#define  data_OUT P1
sbit FQ_UD=P3^0;          //AD9850信号更新申请 
sbit W_CLK=P3^1;
sbit FESET="P3"^2;          //写控制字时钟
unsigned char CON_word[5]; 
//Word data[7] data[6] data[5] data[4] data[3] data[2] data[1] data[0]
//W0  Phase b  Phase b3  Phase b2  Phase b1 Phase b0  Power Down  Control     Control
//W1 Freq-b31    Freq-b30 Freq-b29 Freq-b28 Freq-b27 Freq-b26 Freq-b25 Freq-b24
//W2 Freq-b23 Freq-b22 Freq-b21 Freq-b20 Freq-b19 Freq-b18 Freq-b17 Freq-b16
//W3 Freq-b15 Freq-b14 Freq-b13 Freq-b12 Freq-b11 Freq-b10 Freq-b9      Freq-b8
//W4 Freq-b7     Freq-b6     Freq-b5     Freq-b4     Freq-b3     Freq-b2 

//--------------------------------------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时 
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
 // void delay(unsigned  int N)  
 // {
 // int i; 
  //for(i=0;i // }
//--------------------------------------------------------------------------------------------------


//--------------------------------------------------------------------------------------------------
 /*******************************************************/
   void Freq_Adjust(long value_Freq)
 
    unsigned int i; 
   long f;
 unsigned char L4,L3,L2,L1,L0; 
   FQ_UD=0; 
    f="value"_Freq*86;
    L0=0x28;
    L4= f&0x000000ff;
    L3=(f>>8)&0x000000ff;
    L2=(f>>16)&0x000000ff;
    L1=(f>>24)&0x000000ff;
   CON_word[0]=L0;
   CON_word[4]=L4;
   CON_word[3]=L3;
   CON_word[2]=L2;
   CON_word[1]=L1;
     FQ_UD=0;
     W_CLK=0;
  //delay(0);
  _nop_(); _nop_(); _nop_();  _nop_(); _nop_();
  CON_word[0]=CON_word[0]&0xFC;   //置工作方式选择位为00
     for(i=0;i<5;i++)
     {  
  FESET="1";
  W_CLK=0;
     data_OUT=CON_word[i];      //送控制字 
    // delay(0);
 _nop_(); _nop_(); _nop_(); _nop_();_nop_(); 
  FESET="0";
     W_CLK=1;                   //上升延
     //delay(0);
  _nop_(); _nop_(); _nop_();_nop_();_nop_();
     }
     FQ_UD=1;
 
}


//-------------------------------------------------------------------------------
// 函数名称:main
// 用户主函数
// 函数功能:主函数
//-------------------------------------------------------------------------------


main()
{
    BEGAIN:
 LCD_Initial(); 
 P2=0XF0;
 GotoXY(0,0);
    Print("Please Input :");
 GotoXY(0,1);
 Print("              ");
 m=0;
 k=0;
 l=0; 
 //q=5; 
  FQ_UD=0;  
    Freq_Adjust(50000);
    while(1)
  {  
      while(1)
      {  
  
    m="keynum"();
    if(m>=0&&m<=9||m==15||m==14)
      { 
      z="m";
   Delay1ms(150);
   break;
    }
    }
     if(m>=0&&m<=9)
      {
    l++;
   }
  

    if(z==14)
      {
     goto  BEGAIN;
   }
    if(z==15)
    {

     GotoXY(0,1);
     Print(&TempBuffer[0]);
     GotoXY(9,1);
     Print("OK!!");
     Delay1ms(1000);
     break; 
    }
       
     if(l==1)
      {k=z;}
     if(l==2)
      {
    k="k"*10+z;
   }
  
     if(l==3)
      {
     k="k"*10+z;
    }
    if(l==4)
    {  
    k="k"*10+z;
    }
    if(l==5)
    {  
    k="k"*10+z;
    }
     if(l==6)
    {  
    k="k"*10+z;
    }
     if(l==7)
    {  
    k="k"*10+z;
    }
     if(l==8)
    {  
    k="k"*10+z;
    }
   
     if(l>8||k>25000000)
     {
        GotoXY(0,1);
        Print("     ERROR!!      ");
     Delay1ms(500);
        goto  BEGAIN;
      }
   
   IntToStr(k,&TempBuffer[0],0);
   GotoXY(0,1);
   Print(&TempBuffer[0]);
         P2=0XF0;
   Delay1ms(150);    
    } 
 FQ_UD=0; 
 Freq_Adjust(k);
 while(1)
 {
 
 GotoXY(0,0);
 Print("THE PL DISPLAY");
 IntToStr(k,&TempBuffer[0],0);
 GotoXY(0,1);
 Print(&TempBuffer[0]);
        m="keynum"();
       if(m==10)
     { Delay1ms(300) ; 
     if(k>=30000000){k=30000000;}
    else{ k="k"+1000;}
     } 
     if(m==11)
     {Delay1ms(300) ;
      if(k<=0){k=0;}
       else{k=k-1000;}
     }
        if(m==14)
      {
   goto  BEGAIN;
   } 
  
    }
}

AD9850内含可编程DDS系统和高速比较器,能实现全数字编程控制的频率合
成。可编程DDS系统的核心是相位累加器,它由一个加法器和一个N位相位寄
存器组成,N一般为24~32。每来一个外部参考时钟,相位寄存器便以步长M
递加。相位寄存器的输出与相位控制字相加后可输入到正弦查询表地址上。正
弦查询表包含一个正弦波周期的数字幅度信息,每一个地址对应正弦波中0°~3
60°范围的一个相位点。

关键字:ad9850  c程序  源代码

编辑:神话 引用地址:http://www.eeworld.com.cn/mndz/2012/0903/article_16653.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
ad9850
c程序
源代码

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved