專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

基于msp430的AD9834掃頻儀

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年06月09日   【字體:
/*****************************************************
AD9834波形產(chǎn)生程序
*****************************************************/
#include<MSP430x16x.h>

#define    FSYNCL   P2OUT &=  ~BIT5  
#define    FSYNCH   P2OUT |=   BIT5  
 
#define    SCLKL    P2OUT &= ~BIT6  
#define    SCLKH    P2OUT |=  BIT6  
#define    SDATAL   P2OUT &=  ~BIT7
#define    SDATAH   P2OUT |=   BIT7
double   data=1000 ;
#define FCLK 50
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
int x;
/**************************
發(fā)送控制字
**************************/
void Send_Con(uint Con_word)
{
uchar i;
FSYNCL;
for(i=0;i<16;i++)
{

   if ((Con_word&0x8000)==0x8000)
   {SDATAH;}
     else
        SDATAL ;
    
Con_word<<=1;
SCLKL;
SCLKH;
}
FSYNCH;
}
/***********************************************************************************
初始化函數(shù):
-------------------------------------------------------------------
功能:軟件位控制,IOUT正弦波,SIGNBITOUT方波,寫(xiě)FREQREG0,寫(xiě)PHASE0
Send_Con(0x2038)   一次性寫(xiě)FREQREG0
Send_Con(0x0038)   單獨(dú)改寫(xiě)FREQREG0的LSB
Send_Con(0x1038)   單獨(dú)改寫(xiě)FREQREG0的MSB
-------------------------------------------------------------------
功能:軟件位控制,IOUT三角波寫(xiě)FREQREG0,寫(xiě)PHASE0
Send_Con(0x2002)   一次性寫(xiě)FREQREG0
Send_Con(0x0002)   單獨(dú)改寫(xiě)FREQREG0的LSB
Send_Con(0x1008)   單獨(dú)改寫(xiě)FREQREG0的 MSB************************************************************************************/

/****************************
發(fā)送頻率字
****************************/
void Send_Freq(uint Freq_word)
{
uchar i;
FSYNCL;
for(i=0;i<16;i++)
{
if ((Freq_word&0x8000)==0x8000)
   {SDATAH;}
  else
        SDATAL ;
Freq_word<<=1;
SCLKL;
SCLKH;
}
FSYNCH;
}

/*****************************  q
發(fā)送相位字
注:根據(jù)情況可設(shè)定入口參數(shù),設(shè)置相位
*****************************/
void Send_Phase()
{
Send_Con(0xC000);   //設(shè)置初相位為0
}


/*******************************************************
設(shè)置頻率值   Freq_value(value)=Freq_data(data)*FCLK/2^28
2^28=268435456=0x10000000
*******************************************************/
void zhengxianbo(ulong Freq_value )
{
ulong value1,value2;
uint LSB_D,MSB_D;
SCLKH;
FSYNCH;
value1= Freq_value;
value2= Freq_value;


LSB_D=(value1%0x4000)+0x4000;  //寫(xiě)FREQ0 REG 的LSB
MSB_D=(value2/0x4000)+0x4000;   //寫(xiě)FREQ0 REG 的MSB

Send_Con(0x2038);    //DDS初始化設(shè)置,IOUT正弦波,SIGNBITOUT方波,一次性寫(xiě)FREQREG0
Send_Freq(LSB_D); 
Send_Freq(MSB_D);
void Send_Phase();

}
void main()
{uint n;
static ulong x=0;
 static ulong Freq_value;
 WDTCTL=WDTPW+WDTHOLD;
 P2DIR=0Xff;
  while(1)
  {
 

 
  for(x=0;x<10;x++)
  {
    if(x==9)
      data=1000;
    else
    data=data+1000*x;
  Freq_value=(ulong)(data*5.3687);
  zhengxianbo(Freq_value);
   for(n=0;n<20000;n++);
  }
  }
}
關(guān)閉窗口

相關(guān)文章