/***************************************************** AD9834波形产生程序 *****************************************************/ #include#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++); } } }
上一篇:SPCE061A在传感器测试系统中的应用与设计
下一篇:MSP430在频率测量系统中的应用
推荐阅读最新更新时间:2024-03-16 13:06
设计资源 培训 开发板 精华推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况