(分享資料)17年電賽 遠程幅頻特性測試裝置 (H題)基礎部分-- 用ADS9834做頻率輸出-資源有點少 補充補充
0.png (7.38 KB, 下載次數(shù): 95)
下載附件
2017-12-5 00:46 上傳
單片機源程序如下:
AD9834.h文件:
- #define uint unsigned int
- #define uchar unsigned char
- #define ulong unsigned long
- #define AD_9834_DIR P3DIR
- #define FSYNC_H P3OUT |= BIT0//輸入數(shù)據(jù)的幀同步信號,為低時載入新的字節(jié)
- #define FSYNC_L P3OUT &= ~BIT0
- #define SCLK_H P3OUT |= BIT1//串行時鐘輸入,每個下降沿寫入一位數(shù)據(jù)
- #define SCLK_L P3OUT &= ~BIT1
- #define SDATA_H P3OUT |= BIT2//數(shù)據(jù)串口輸入端
- #define SDATA_L P3OUT &= ~BIT2
- long freq=1000000;
- long kuandu;
- long zhongxin;
- /**************初始化**************************/
- void AD_9834_init()
- {
- AD_9834_DIR |= BIT0 + BIT1 +BIT2;//設置為輸出
- FSYNC_H;
- SCLK_H;
- SDATA_H;
- }
- /*********向9834寫入16位頻率數(shù)據(jù)***********************/
- void write_AD9834(uint dat)
- {
- uchar i;
- FSYNC_H;
- SCLK_H;
- _NOP();
- _NOP();
- FSYNC_L; //FSYNC拉低時,SCLK必須為高
- for(i=0;i<16;i++)//16位數(shù)據(jù)寫入
- {
- SCLK_H; //先置高為下降沿做準備
- if(dat & 0x8000)
- {
- SDATA_H;//寫入
- }
- else
- {
- SDATA_L;//不寫入
- }
- SCLK_L; //下降沿向dds寫入數(shù)據(jù)
- dat <<= 1;
- }
- _NOP();
- FSYNC_H; //傳輸完數(shù)據(jù)置高
- }
- /***********正弦波頻率設置******************/
- //寄存器為28位,所以分高14位低14位寫入
- void AD_9834_output(ulong freq)
- {
- ulong dds;
- uint dds_l,dds_h;
- //dds = (long)(freq * 1.7895697666); //150M晶振 **** 2^28/150M=1.7895697666
- //ΔPhase=f×2^28/fMCLK 一共28位所以2的28次方
- // dds = (long)(freq * 2.147483648); //125m晶振
- dds = (long)(freq * 2.68435456); //100m晶振
- // dds = (long)(freq * 3.579139413); //75M晶振;
- //dds = (long)(freq * 11.184810); //24m晶振
- dds_l =(uint)(dds & 0x3fff); //取出數(shù)據(jù)的低十四位(LSB)11 1111 1111 1111
- dds = dds >>14; //將MSB的高十四位移到低十四位
- dds_h = (uint)(dds &0x3fff); //取出MSB的十四位數(shù)據(jù)
- /*****16位碼的前兩位規(guī)定頻率寄存器的字節(jié)寫入,在兩個連續(xù)的寫操作是一樣的*********************/
- dds_l = dds_l | 0x4000; //對十四位的LSB/MSB加上兩位的地址(01),所以變成
- dds_h = dds_h | 0x4000; //了是十六位的數(shù)據(jù)(地址01是頻率寄器0,10是頻率寄存器1)
- write_AD9834(dds_l); //寫入低14位
- write_AD9834(dds_h); //寫入高14位
- }
復制代碼
- #include<msp430F5438A.h>
- #include"TX2.h"
- #include"AD9834.h"
- #include"12864.h"
- #include"key.h"
- #define uint unsigned int
- #define uchar unsigned char
- #define ulong unsigned long
- //void display(void);
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD;
- P9DIR |= 0x0f; //P9方向寄存器
- P8DIR |= 0xff; //P9輸出寄存器
- LCD_init(); //液晶初始化
- LCD_display();
- keyscan1_init();
- initclock();
- AD_9834_init();
- write_AD9834(0x2100);//控制寄存器
- write_AD9834(0x2038);//這里很關鍵!
- /*9834的控制寄存器是16位 0x2000(01 0000 0000 0000)表示bit13為1
- 即允許一個完整字節(jié)在兩個連續(xù)的寫操作寫入頻率寄存器。第一次寫操作包括
- 14LSBs的頻率字節(jié),下一個寫操作包括14MSBs*/
- AD_9834_output(freq);
-
-
- while(1)
- {
- KEY_Fun();
- if(flag_key==1)
- {
-
- freq += 1000000;
- delay_ms(1000);
- AD_9834_output(freq);//把頻率寫入頻率寄存器
- if(freq>40000000)
- for(;freq>1000000;)
- {
- freq -= 1000000;
- delay_ms(1000);
- AD_9834_output(freq);//把頻率寫入頻率寄存器
- }
-
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
17年電賽 遠程幅頻特性測試裝置 (H題)基礎部分.rar
(36.85 KB, 下載次數(shù): 99)
2017-12-4 23:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|