新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM8單片機ADC應用(IAR)

        STM8單片機ADC應用(IAR)

        作者: 時間:2016-11-23 來源:網絡 收藏
        STM8片上集成了10位逐次比較型模數轉換器,在開發板上有個電位器接到了AIN3,但沒有可以顯示數據的LED數碼管或LCD液晶顯示屏,怎么辦呢?可以把AD采集數據通過UART發送到電腦上顯示。

        #i nclude

        void CLK_init(void)
        {
        CLK_CKDIVR = 0x08; // 16M內部RC經2分頻后系統時鐘為8M
        }

        void GPIO_init(void)
        {
        PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3輸出
        PD_CR1 = 0x08; // 設置PD3為推挽輸出
        PD_CR2 = 0x80; // 使能PD7外部中斷
        }

        void EXTI_init(void)
        {
        EXTI_CR1 = 0x80; // PD口下降沿觸發中斷
        }

        本文引用地址:http://www.104case.com/article/201611/320479.htm

        #pragma vector=0x02
        __interrupt void EXTI_PD7_TLI(void)
        {
        unsigned int value;
        ADC_CSR &= ~0x80;//清除EOC轉換結束標志
        ADC_CR1 |= 0x01; //開始單次轉換
        while(!(ADC_CSR&0x80)); //等待單次轉換完成
        value = ((int)ADC_DRH<<2); // 先讀高8位,默認設置數據左對齊
        value |= ADC_DRL; // 再讀低8位
        while(!UART3_SR_TXE);
        UART3_DR = value;// 通過UART3發送AD采樣結果
        while(!UART3_SR_TXE);
        UART3_DR = value>>8;
        }

        void ADC_init(void)
        {
        ADC_CSR = 0x03; // ADC輸入引腳AIN3
        ADC_CR1 = 0x01; // ADC開啟
        }

        void UART3_init(void)
        {
        UART3_BRR2 = 0x01;
        UART3_BRR1 = 0x34; // 8M/9600 = 0x341
        UART3_CR2 = 0x0C; // 允許接收,允許發送
        }

        void init_devices(void)
        {
        asm("sim");//禁止中斷
        CLK_init();
        GPIO_init();
        EXTI_init();
        ADC_init();
        UART3_init();
        asm("rim"); //使能中斷
        }

        void main( void )
        {
        init_devices();

        //主循環里沒有程序需要執行
        while(1);
        }

        在本例中僅使用了ADC的單次轉換模式,每按一次按鍵進行一次AD轉換,并把轉換結果通過UART發送,這樣可以在電腦上通過超級終端或串口調試軟件查看數據。

        通過這次測試,還發現一個現象,如果把清除EOC轉換結束標志放在讀取數據之后,那么在下次啟動單次轉換后,EOC標志位會自動置位,此時必須人為的等待7us后才能讀到正確的數據,否則只能讀到上一次的轉換數據,可能這是STM8的ADC與其他MCU不同之處。



        關鍵詞: STM8單片機ADCIA

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 中超| 泗水县| 平潭县| 万年县| 崇义县| 洛宁县| 乐亭县| 邵武市| 建宁县| 桃江县| 水城县| 密山市| 石柱| 宣汉县| SHOW| 德清县| 封开县| 顺平县| 兴海县| 天台县| 沧源| 镇江市| 巴彦县| 社旗县| 东丰县| 平谷区| 宜兰市| 汉中市| 石屏县| 贵溪市| 海原县| 岳阳市| 察哈| 青州市| 普定县| 怀化市| 双柏县| 奈曼旗| 邳州市| 定日县| 荥经县|