新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 巧設pic877a單片機的AD轉換模塊

        巧設pic877a單片機的AD轉換模塊

        作者: 時間:2016-12-03 來源:網絡 收藏
        //由于AD 采樣的值不斷地變化,我們用C語言的關鍵詞volatile來定義AD采樣過程的臨時變量。

        volatile unsigned int ad0_res,ad1_res,ad2_res=0;//存放AD初始化值

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

        //下面對其進行初始化,為了具有統一性,我將RA、RE口均進行初始化。

        /**********************************************************
        *AD結果為10位精度,從0-1023、
        *在使用時必設定ADCON1=0X80;存貯形式為((ADRESH<<8)+(ADRESL)).
        *AD通道的選擇是從0開始的如:0->RA01->RA1 ....6->RE2.7->RE3
        ***********************************************************/

        void
        ad_init (void)
        {
        INTCON = 0X00;
        ADIF = 0X00;
        ADCON1 = 0x80;
        ADCON0 = 0X81; //十位結果必須高為8位
        TRISA = 0X0FF;//默認為AD輸入

        TRISE= 0X0FF;//默認為AD輸入
        PORTA = 0X00;
        ADON = 1;
        }

        //這是一個延時函數

        void
        delay(unsigned int x)
        {
        unsigned int a, b;
        a = (2*x/8);
        for(a; a>0; a--);
        for(b=5; b>0; b--);
        }

        //下面這個函數就是具體采樣AD的結果值,它一個很好的妙用

        unsigned int //返回一個整型值
        read_ADresult(unsigned char channel)//通道轉換
        {
        channel &= 0x07;// 讀出當前通道的值
        ADCON0 &= 0x85;// 清所有通道
        ADCON0 |= (channel<<3);//10 xxx 001 將當前通道對應的值賦予ADCON0
        delay(30);
        ADGO = 1;
        while(ADGO) continue;
        return(ADRESH << 8)+(ADRESL);
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 榕江县| 武陟县| 武穴市| 东莞市| 清镇市| 嘉祥县| 乌恰县| 渭源县| 溧水县| 连平县| 浦北县| 灌阳县| 宝兴县| 全州县| 东阿县| 霍州市| 鄂托克前旗| 南汇区| 南皮县| 大英县| 郸城县| 舒兰市| 金秀| 江陵县| 漯河市| 格尔木市| 崇阳县| 手游| 十堰市| 塘沽区| 鲁山县| 易门县| 大同县| 桐庐县| 竹山县| 贞丰县| 南江县| 新宁县| 全州县| 从江县| 若羌县|