/***************************************************** AD9834波形產生程序 *****************************************************/ #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; /************************** 發送控制字 **************************/ 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; } /*********************************************************************************** 初始化函數: ------------------------------------------------------------------- 功能:軟件位控制,IOUT正弦波,SIGNBITOUT方波,寫FREQREG0,寫PHASE0 Send_Con(0x2038) 一次性寫FREQREG0 Send_Con(0x0038) 單獨改寫FREQREG0的LSB Send_Con(0x1038) 單獨改寫FREQREG0的MSB ------------------------------------------------------------------- 功能:軟件位控制,IOUT三角波寫FREQREG0,寫PHASE0 Send_Con(0x2002) 一次性寫FREQREG0 Send_Con(0x0002) 單獨改寫FREQREG0的LSB Send_Con(0x1008) 單獨改寫FREQREG0的 MSB************************************************************************************/ /**************************** 發送頻率字 ****************************/ 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 發送相位字 注:根據情況可設定入口參數,設置相位 *****************************/ void Send_Phase() { Send_Con(0xC000); //設置初相位為0 } /******************************************************* 設置頻率值 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; //寫FREQ0 REG 的LSB MSB_D=(value2/0x4000)+0x4000; //寫FREQ0 REG 的MSB Send_Con(0x2038); //DDS初始化設置,IOUT正弦波,SIGNBITOUT方波,一次性寫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++); } } }