新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)C語(yǔ)言程序設(shè)計(jì)(14)

        PIC單片機(jī)C語(yǔ)言程序設(shè)計(jì)(14)

        作者: 時(shí)間:2013-02-05 來(lái)源:網(wǎng)絡(luò) 收藏

          對(duì)于A/D 轉(zhuǎn)換程序的初始化一般要經(jīng)過(guò)圖62 的幾個(gè)步驟。

          A/D 轉(zhuǎn)換初始化函數(shù)代碼如下:

          void adcsh()

          {

          TRISA=0X07;// 設(shè)定I/O 口為輸入

          ADCON1=0X8a;

          //RA0~RA5 設(shè)為模擬口,RA3 接參考電壓。

          ADCON0=0X81;

          // 通道0,選擇系統(tǒng)時(shí)鐘focs/32.

          ADRESH=0;

          ADRESL=0; // 清空轉(zhuǎn)換結(jié)果寄存器

          GIE=1; // 打開(kāi)總中斷

          PEIE=1; // 打開(kāi)第一外圍中斷屏蔽

          ADIE=1; // 打開(kāi)A/D 中斷

          ADIF=0; // 清除A/D 中斷標(biāo)志位。

          }

          以上流程圖和代碼是采用中斷服務(wù)程序來(lái)讀取A/D 轉(zhuǎn)換數(shù)值的,雖然通過(guò)查詢標(biāo)志位方式也可以達(dá)到同樣的效果,但是在實(shí)際應(yīng)用中,中斷服務(wù)方式因方便、可靠、節(jié)省芯片運(yùn)行時(shí)間而成為常用的編程結(jié)構(gòu)。對(duì)于中斷服務(wù)程序,越簡(jiǎn)單越好,因PIC 單片機(jī)特殊的堆棧結(jié)構(gòu),不宜在中斷服務(wù)程序內(nèi)作數(shù)據(jù)運(yùn)算和太多調(diào)用函數(shù)的操作,原則是取出值后立即退出中斷,以保證其它的任務(wù)能及時(shí)被響應(yīng)。圖63 是中斷服務(wù)流程圖。

        圖63

          AD 中斷C 語(yǔ)言的基本寫法:

          void interrupt AD(void)

          // 必須用interrupt 關(guān)鍵詞,編譯器才會(huì)判定是中斷服務(wù)程序

          {

          unsigned int ad_1=0;

          if(ADIF==1)

          // 判斷A/D 轉(zhuǎn)換中斷標(biāo)志位是否為1 ;

          {

          ADIF=0;// 清零中斷標(biāo)志位

          ad_1=(ADRESH0X03)*256+ ADRESL;

          // 讀取A/D 轉(zhuǎn)換結(jié)果,并將低字 節(jié)和高字節(jié)進(jìn)行整合。

          }

          }

          從以上的代碼看出,C 語(yǔ)言比匯編要簡(jiǎn)單得多,進(jìn)入中斷后,標(biāo)志位清零是必須的,返回指令可以不寫,這是最基本的中斷服務(wù)程序。

          以下提供在實(shí)際應(yīng)用中的代碼:

          AD 初始化函數(shù):

          void adcsh()

          {

          OPTION=OPTION|0x80;// 關(guān)閉弱上拉

          TRISC=0X00;

          TRISB=0X03;

          PORTC=0X00;

          ADCON1=0X8a;

          // 轉(zhuǎn)換結(jié)果右對(duì)齊,RA0~RA5 設(shè)為模擬口,



        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 甘肃省| 西盟| 晋江市| 屯门区| 黄陵县| 民权县| 论坛| 郸城县| 彭水| 庆城县| 海伦市| 通许县| 全州县| 石林| 玛曲县| 定州市| 梨树县| 吐鲁番市| 旬阳县| 元氏县| 九寨沟县| 宕昌县| 新田县| 清远市| 北票市| 纳雍县| 德庆县| 五常市| 成安县| 民县| 丹凤县| 五原县| 枝江市| 甘泉县| 吴江市| 乐安县| 蓬安县| 勐海县| 黄龙县| 若羌县| 乌兰察布市|