• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            極品垃圾

            初學(xué)VC ,就是把每天所看到的整理到博客,慢慢消化這些內(nèi)容。見證我的學(xué)習(xí)之路吧。很多都是轉(zhuǎn)載。

            公告

            初學(xué)VC ,就是把每天所看到的整理到博客,慢慢消化這些內(nèi)容。見證我的學(xué)習(xí)之路吧。很多都是轉(zhuǎn)載。
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            統(tǒng)計

            • 隨筆 - 0
            • 文章 - 61
            • 評論 - 1
            • 引用 - 0

            常用鏈接

            留言簿(2)

            隨筆分類

            文章分類(55)

            文章檔案(61)

            搜索

            •  

            最新評論

            STC系列單片機(jī)內(nèi)部AD的應(yīng)用
            STC89LE52AD54AD58AD516AD這幾款89系列的STC單片機(jī)內(nèi)部自帶有88位的AD轉(zhuǎn)換器,分布在P1口的8位上,當(dāng)時鐘在40MHz以下時,每17個機(jī)器周期可完成一次AD轉(zhuǎn)換。

                     AD相關(guān)的幾個寄存器如表1所示。

            1 STC89系列單片機(jī)AD相關(guān)寄存器

            名稱

            地址

            功能描述

            D7

            D6

            D5

            D4

            D3

            D2

            D1

            D0

            復(fù)位值

            P1_ADC_EN

            97H

            允許P1.X成為AD

            AD_P17

            AD_P16

            AD_P15

            AD_P14

            AD_P13

            AD_P12

            AD_P11

            AD_P10

            0000 0000

            ADC_CONTR

            C5H

            AD轉(zhuǎn)換控制寄存器

            --

            --

            --

            ADC_FLAG

            ADC_START

            CHS2

            CHS1

            CHS0

            xxx0 0000

            ADC_DATA

            C6H

            AD轉(zhuǎn)換結(jié)果寄存器

            --

            --

            --

            --

            --

            --

            --

            --

            0000 0000

                     P1_ADC_ENP1.X口的AD使能寄存器。

                               相應(yīng)位設(shè)置為“1”時,對應(yīng)的P1. X口作為AD轉(zhuǎn)換使用,內(nèi)部上拉電阻自動斷開。

                     ADC_CONTRAD 轉(zhuǎn)換控制寄存器。

                               ADC_STARTAD轉(zhuǎn)換啟動控制位,設(shè)置為“1”時,AD開始轉(zhuǎn)換。

                              ADC_FLAGAD轉(zhuǎn)換結(jié)束標(biāo)志位,當(dāng)AD轉(zhuǎn)換完成后,ADC_FLAG=1

                               CHS2CHS1CHS0:為模擬輸入通道選擇,如表2所示。

            2  STC89系列單片機(jī)AD模擬通道選擇設(shè)置

            CHS2

            CHS1

            CHS0

            模擬輸入通道選擇

            0

            0

            0

            選擇P1.0作為AD輸入來用

            0

            0

            1

            選擇P1.1作為AD輸入來用

            0

            1

            0

            選擇P1.2作為AD輸入來用

            0

            1

            1

            選擇P1.3作為AD輸入來用

            1

            0

            0

            選擇P1.4作為AD輸入來用

            1

            0

            1

            選擇P1.5作為AD輸入來用

            1

            1

            0

            選擇P1.6作為AD輸入來用

            1

            1

            1

            選擇P1.7作為AD輸入來用

                ADC_DATAAD 轉(zhuǎn)換結(jié)果寄存器。模擬/數(shù)字轉(zhuǎn)換結(jié)果計算公式如下:

            結(jié)果=256×Vin / Vcc

                     Vin為模擬輸入通道輸入電壓,Vcc為單片機(jī)實際工作電壓,用單片機(jī)工作電壓作為模擬參考電壓。

                     下面一個例程演示STC89LE516AD/X2系列單片機(jī)的A/D轉(zhuǎn)換功能。 時鐘11.0592MHz 轉(zhuǎn)換結(jié)果以16進(jìn)制形式輸出到串行口,可以用串行口調(diào)試程序觀察輸出結(jié)果。(本代碼摘自宏晶科技芯片手冊,經(jīng)作者調(diào)試可正常運行)

                     新建文件part3.4.5.c,程序代碼如下:

                              #include <reg52.H>

            #include <intrins.H>

            // 定義與 ADC 有關(guān)的特殊功能寄存器

            sfr P1_ADC_EN = 0x97; //A/D轉(zhuǎn)換功能允許寄存器

            sfr ADC_CONTR = 0xC5; //A/D轉(zhuǎn)換控制寄存器

            sfr ADC_DATA = 0xC6;  //A/D轉(zhuǎn)換結(jié)果寄存器

            typedef unsigned char INT8U;

            typedef unsigned int INT16U;

            void delay(INT8U delay_time) // 延時函數(shù)

            {

                     INT8U n;

                     INT16U m;

                     for (n=0;n<delay_time;n++)

                              {

                                        for(m=0;m<10000;m++);

                              }

            }

            void initiate_RS232(void)  //串口初始化

            {

                     ES = 0;        // 禁止串口中斷

                     SCON = 0x50;   // 0101,0000 8 位數(shù)據(jù)位, 無奇偶校驗

                     T2CON = 0x34;  // 00110100 T2 作為波特率發(fā)生器

                     RCAP2H = 0xFF; // 時鐘11.0592MHz, 9600 波特率

                     RCAP2L = 0xDB;

                     ES = 1;        // 允許串口中斷

            }

            void Send_Byte(INT8U one_byte) // 發(fā)送一個字節(jié)

            {

                     TI = 0;        // 清零串口發(fā)送中斷標(biāo)志

                     SBUF = one_byte;

                     while (TI == 0);

                     TI = 0;        // 清零串口發(fā)送中斷標(biāo)志

            }

            INT8U get_AD_result(INT8U channel)

            {

                     INT8U AD_finished = 0; // 存儲 A/D 轉(zhuǎn)換標(biāo)志

                     ADC_DATA = 0;

                     ADC_CONTR = channel; // 選擇 A/D 當(dāng)前通道

                     delay(1);                      //使輸入電壓達(dá)到穩(wěn)定

                     ADC_CONTR |= 0x08; //0000,1000 ADC_START = 1, 啟動A/D 轉(zhuǎn)換

                     AD_finished = 0;

                     while ( AD_finished == 0 ) // 等待A/D 轉(zhuǎn)換結(jié)束

                     {

                              AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1測試A/D轉(zhuǎn)                  換結(jié)束否

                     }

                     ADC_CONTR &= 0xF7; //1111,0111 ADC_START = 0, 關(guān)閉A/D 轉(zhuǎn)換,

                     return (ADC_DATA); // 返回 A/D 轉(zhuǎn)換結(jié)果

            }

            void main()

            {

                     initiate_RS232();

                     P1 = P1 | 0x63; // 0110,0011,要設(shè)置為 A/D 轉(zhuǎn)換的P1.x ,先設(shè)為高

                     P1_ADC_EN = 0x63; //0110,0011, P1 P1.0,P1.1,P1.5,P1.6 設(shè)置為 A/D 轉(zhuǎn)換輸入腳

                     // 斷開P1.0,P1.1,P1.5,P1.6 內(nèi)部上拉電阻

                     while(1)

                     {

                              Send_Byte(get_AD_result(0)); //P1.0 A/D 當(dāng)前通道, 測量并發(fā)送結(jié)果

                              delay(0x200);

                              Send_Byte(get_AD_result(1)); //P1.1 A/D 當(dāng)前通道, 測量并發(fā)送結(jié)果

                              delay(0x200);

                              Send_Byte(get_AD_result(5)); //P1.5 A/D 當(dāng)前通道, 測量并發(fā)送結(jié)果

                              delay(0x200);

                              Send_Byte(get_AD_result(6)); //P1.6 A/D 當(dāng)前通道, 測量并發(fā)送結(jié)果

                              delay(0x200);

                              Send_Byte(0); // 連續(xù)發(fā)送 4 00H, 便于觀察輸出顯示

                              Send_Byte(0);

                              Send_Byte(0);

                              Send_Byte(0);

                              delay(0x200); // 延時

                              delay(0x200);

                              delay(0x200);

                              delay(0x200);

                              delay(0x200);

                              delay(0x200);

                     }

            }

                知識點:typedef#define的區(qū)別

                          typedef:類型定義,其功能是用戶為已有數(shù)據(jù)類型取“別名

                          如:typedef  int  INT; 意思是將int重新定義為INT,以后使用INT a;就相當(dāng)于int       a

                   typedef定義數(shù)組、指針、結(jié)構(gòu)等類型將帶來很大的方便,不僅使程序書寫簡單,而且使意義更為明確,因而增強(qiáng)了可讀性。例如:typedef int a[10];表示a是整型數(shù)組類型,數(shù)組長度為10,然后就可用a定義變量,如:a s1s2;完全等效于:int s1[10]s2[10]

            define:宏定義。

                   如:#define PI 3.14 意思是以后程序中出現(xiàn)PI的地方將用3.14代替,這個替換是在編譯預(yù)處理階段完成的,注意#define最后沒有分號,否則編譯時將分號一同帶入PI中。

            posted on 2009-08-13 21:07 極品垃圾 閱讀(4684) 評論(0)  編輯 收藏 引用 所屬分類: 單片機(jī)

            色偷偷888欧美精品久久久| 日韩久久久久中文字幕人妻| 久久综合狠狠综合久久综合88 | 国产午夜精品理论片久久影视| 久久久久亚洲精品中文字幕| 久久久久亚洲AV成人网人人网站 | 午夜欧美精品久久久久久久| 亚洲乱码中文字幕久久孕妇黑人| 久久国产色AV免费看| 伊色综合久久之综合久久| 久久婷婷五月综合国产尤物app| 精品精品国产自在久久高清| 久久综合久久久| 蜜桃麻豆www久久国产精品| MM131亚洲国产美女久久| 性做久久久久久久久| 久久线看观看精品香蕉国产| 久久99热这里只有精品国产| 97久久超碰国产精品2021| 久久只这里是精品66| 久久精品国产亚洲77777| 日韩十八禁一区二区久久| 狠狠色婷婷久久一区二区三区 | 久久精品一区二区三区AV| 精品久久久久久久| 久久久老熟女一区二区三区| 久久久不卡国产精品一区二区| 91久久九九无码成人网站| 99精品国产在热久久无毒不卡| 热综合一本伊人久久精品| 狠狠色婷婷综合天天久久丁香 | 亚洲欧美日韩久久精品| 人妻无码久久精品| 久久免费美女视频| 亚洲国产精品一区二区久久| 无码人妻久久一区二区三区免费| 久久久无码精品亚洲日韩京东传媒 | 久久99国产乱子伦精品免费| 中文字幕乱码人妻无码久久| 亚洲AV日韩精品久久久久久久| 国产激情久久久久久熟女老人|