在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 利用MSP430內(nèi)部DAC產(chǎn)生正弦信號

            利用MSP430內(nèi)部DAC產(chǎn)生正弦信號

            作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
            /*****************************************************************

            文件名:DAC_10k
            功能:使用msp430f169內(nèi)部DAC模塊通過DMA模塊的傳輸
            產(chǎn)生10kHz的正玄信號,本程序在一個周期內(nèi)取點
            為100個
            *****************************************************************/

            本文引用地址:http://www.biyoush.com/article/201612/324251.htm

            #include
            static int Sin_tab[100] = {
            1638,1740,1843,1944,2045,2143,2240,2335,2426,2515,2600,2681,2758,2831,
            2899,2962,3020,3072,3119,3160,3195,3224,3246,3262,3272,3272,3263,3247,
            3224,3196,3161,3120,3074,3021,2964,2901,2833,2760,2683,2602,2517,2429,
            2337,2243,2146,2047,1947,1845,1743,1640,1537,1435,1333,1233,1134,1037,
            943,851,762,677,596,519,446,378,314,256,204,157,116,81,52,29,13,3,0,2,
            12,28,50,78,113,154,200,252,310,373,440,513,590,671,756,756,844,936,
            1030,1127,1225,1326,1427,1529};
            void INIT_XT2();
            void main(void)
            {
            WDTCTL = WDTPW + WDTHOLD; // 停看門狗

            INIT_XT2();

            P5SEL=0XFF;
            ADC12CTL0 = REFON; // 參考電壓為內(nèi)部2.5v
            DMA0SA = (int) Sin_tab; // 源地址寄存器
            DMA0DA = DAC12_0DAT_; // 目的地址寄存器
            DMA0SZ = 100; // 傳輸基本單元的個數(shù)
            DMACTL0 = DMA0TSEL_5; // DAC12_0CTL的DAC12IFG標志
            DMA0CTL = DMADT_4 + DMASRCINCR_3 + DMAEN; // DMADT_4:重復的塊傳輸方式 Rpt, inc src, word-word
            DAC12_0CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_5 + DAC12IFG + DAC12ENC; // Config
            // **force first interrupt**
            CCTL1 = OUTMOD_3; // Set/reset
            CCR1 = 1; // PWM Duty Cycle
            CCR0 = 8-1; // ~1kHz Clock period
            TACTL = TASSEL_2 + MC_1; // SMCLK, up-mode

            _BIS_SR(LPM0_bits); // Enter LPM0
            }
            void INIT_XT2()
            {
            unsigned char i;
            BCSCTL1&=~XT2OFF;//打開XT2振蕩器
            BCSCTL2|=SELM_2+SELS;//SELM_2:MCLK的時鐘源選XT2 SELS:選擇SMCLK的時鐘源為XT2
            do
            {
            IFG1&=~OFIFG;//清除震蕩錯誤標志
            for(i=0;i<100;i++);
            _NOP();
            }
            while((IFG1&OFIFG)!=0);
            IFG1&=~OFIFG;
            }

            ======================================================================================
            /******************************************************************************
            * 文件: main.c
            * 說明: MSP430F5438開發(fā)板ADC12 轉(zhuǎn)換實驗
            * 設(shè)置斷點觀察 voltage 中的電壓值
            * 改變可變電阻器R25 觀察 voltage 中的電壓值的變化
            * 編譯: IAR Embedded Workbench IDE for MSP430 v5.10
            ******************************************************************************/
            #include
            #include "GPIO.h"
            #include "BoardConfig.h"
            #include "Clock.h"

            /******************************************************************************
            *宏定義區(qū)
            ******************************************************************************/
            #define Num_of_Results 8 //數(shù)據(jù)存儲的最大值
            /******************************************************************************
            *函數(shù)聲名區(qū)
            ******************************************************************************/
            void ADC_init(void);
            float ADC_opera(void);
            /******************************************************************************
            *變量定義區(qū)
            ******************************************************************************/
            volatile unsigned int results[Num_of_Results]; //存儲 ADC12采樣轉(zhuǎn)換結(jié)果
            static unsigned char index = 0;
            float voltage; //電壓值運算結(jié)果存儲
            /*******************************系統(tǒng)主函數(shù)************************************/
            int main( void )
            {
            WDTCTL=WDTPW+WDTHOLD;
            BoardConfig(0xEF); // 板上資源配置
            Init_CLK(); // 初始化系統(tǒng)時鐘
            WDTCTL = WDT_ADLY_1_9;
            SFRIE1 |= WDTIE; // WDT 中斷使能
            ADC_init(); // ADC12轉(zhuǎn)換初始化
            _EINT(); // 開全局中斷

            while(1)
            {
            if(index==Num_of_Results-1)
            voltage=ADC_opera();
            _NOP();
            LPM1;
            }
            }
            /******************************************************************************
            * 函數(shù)名: void ADC_init(void)
            * 功 能: ADC12初始化
            * 參 數(shù): 無
            * 返回值: 無
            ******************************************************************************/
            void ADC_init(void)
            {
            P6SEL |= 0x01; // 打開通道1
            ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC;

            ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2;
            ADC12IE = 0x01;
            ADC12CTL0 |= ADC12ENC;
            ADC12CTL0 |= ADC12SC;
            }
            /******************************************************************************
            * 函數(shù)名: void ADC_opera(void)
            * 功 能: 將ADC采樣進來的數(shù)據(jù)轉(zhuǎn)換成十進制數(shù)
            * 參 數(shù): 無
            * 返回值: 無
            ******************************************************************************/

            float ADC_opera(void)
            {
            unsigned long temp=0;
            float voltage;
            for(unsigned char i=0;i {
            temp +=results[i];
            }
            voltage=((temp/Num_of_Results)*3.3/4095);
            return voltage;
            }
            /******************************************************************************
            * 函數(shù)名: __interrupt void ADC12ISR (void)
            * 功 能: ADC12 中斷服務(wù)函數(shù)
            * 參 數(shù): 無
            * 返回值: 無
            ******************************************************************************/
            #pragma vector=ADC12_VECTOR
            __interrupt void ADC12ISR (void)
            {
            switch(__even_in_range(ADC12IV,34))
            {
            case 6: // ADC12IFG0
            results[index] = ADC12MEM0; //
            index++; //

            if (index == 8)
            {
            index = 0;
            }
            default: break;
            }
            LPM1_EXIT;
            }
            -----------------------------------------------------------------------------------------------------------------

            這張圖片在我學習過程中幫了不少忙,程序看不懂了,可以來看看這些,或許會有些收獲,本人是學集成電路設(shè)計的,覺得很有幫助。

            下面貼些自己的測試程序,別小看這幾行程序啊,可是我測試N次的出來的

            #include "msp430x14x.h"

            void InitADC12();

            unsigned char wait;

            int main( void )

            {

            // Stop watchdog timer to prevent time out reset

            WDTCTL = WDTPW + WDTHOLD;

            InitADC12();

            return 0;

            }

            void InitADC12()

            {

            //_DINT();

            ADC12CTL0 &= ~ENC; //只有在ENC復位的情況下才能對ADC12CTL0、1進行設(shè)置?。?!這點很重要哦?。?!

            ADC12CTL0 = MSC + REFON + REF2_5V + SHT0_15 + SHT1_15;

            /*MSC:多次采樣轉(zhuǎn)換位,只對序列采樣或者多次多次轉(zhuǎn)換有效。

            0:采樣定時器需要SHI信號的上升沿觸發(fā)

            1:首次需要采樣定時器SHI信號觸發(fā),之后的轉(zhuǎn)換在上次轉(zhuǎn)換之后隨即開始。*/

            ADC12CTL1 |= SHP + CONSEQ_0;

            /*SHP: 1:采樣信號源自采樣定時器 0:采樣信號源自采樣輸入信號

            CONSEQ: 0: 單通道單次轉(zhuǎn)換 1:序列通道單詞轉(zhuǎn)換 2:單通道多次轉(zhuǎn)換 3:序列通道多次轉(zhuǎn)換

            CSTARTADD_x(0~15):轉(zhuǎn)換起始位置 */

            ADC12MCTL0 = EOS + SREF_0 + INCH_7;

            /* EOS:序列結(jié)束位

            SREF: 參考電壓選擇

            INCH:模擬輸入通道選擇 */

            ADC12IE |= 0x0001;//開相應(yīng)模擬通道中斷,轉(zhuǎn)換完畢后引發(fā)中斷

            _EINT();

            //ADC12CTL0 |= ADC12ON + ENC; //修改?。?!// 這樣寫是不對的

            ADC12CTL0 |= ADC12ON;

            ADC12CTL0 |= ENC;

            wait = 0; //此處可定義變量,指示轉(zhuǎn)換是否完成

            ADC12CTL0 |= ENC+ADC12SC; //轉(zhuǎn)換開始 若希望在其他時間開始轉(zhuǎn)換 可將次句放在別處逼比必


            上一頁 1 2 下一頁

            關(guān)鍵詞: MSP430內(nèi)部DAC正弦信

            評論


            技術(shù)專區(qū)

            關(guān)閉