• <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)容。見(jiàn)證我的學(xué)習(xí)之路吧。很多都是轉(zhuǎn)載。

            公告

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

            統(tǒng)計(jì)

            • 隨筆 - 0
            • 文章 - 61
            • 評(píng)論 - 1
            • 引用 - 0

            常用鏈接

            留言簿(2)

            隨筆分類(lèi)

            文章分類(lèi)(55)

            文章檔案(61)

            搜索

            •  

            最新評(píng)論

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

                     AD相關(guān)的幾個(gè)寄存器如表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”時(shí),對(duì)應(yīng)的P1. X口作為AD轉(zhuǎn)換使用,內(nèi)部上拉電阻自動(dòng)斷開(kāi)。

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

                               ADC_STARTAD轉(zhuǎn)換啟動(dòng)控制位,設(shè)置為“1”時(shí),AD開(kāi)始轉(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輸入來(lái)用

            0

            0

            1

            選擇P1.1作為AD輸入來(lái)用

            0

            1

            0

            選擇P1.2作為AD輸入來(lái)用

            0

            1

            1

            選擇P1.3作為AD輸入來(lái)用

            1

            0

            0

            選擇P1.4作為AD輸入來(lái)用

            1

            0

            1

            選擇P1.5作為AD輸入來(lái)用

            1

            1

            0

            選擇P1.6作為AD輸入來(lái)用

            1

            1

            1

            選擇P1.7作為AD輸入來(lái)用

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

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

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

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

                     新建文件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í)函數(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ù)位, 無(wú)奇偶校驗(yàn)

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

                     RCAP2H = 0xFF; // 時(shí)鐘11.0592MHz, 9600 波特率

                     RCAP2L = 0xDB;

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

            }

            void Send_Byte(INT8U one_byte) // 發(fā)送一個(gè)字節(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; // 存儲(chǔ) 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, 啟動(dòng)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測(cè)試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)換輸入腳

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

                     while(1)

                     {

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

                              delay(0x200);

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

                              delay(0x200);

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

                              delay(0x200);

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

                              delay(0x200);

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

                              Send_Byte(0);

                              Send_Byte(0);

                              Send_Byte(0);

                              delay(0x200); // 延時(shí)

                              delay(0x200);

                              delay(0x200);

                              delay(0x200);

                              delay(0x200);

                              delay(0x200);

                     }

            }

                知識(shí)點(diǎn):typedef#define的區(qū)別

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

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

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

            define:宏定義。

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

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

            97久久超碰国产精品旧版| 久久精品99久久香蕉国产色戒| 国内精品久久久久久久久| 伊人久久大香线蕉AV一区二区| 狠狠色狠狠色综合久久| 国产一区二区精品久久| 人妻无码αv中文字幕久久琪琪布| 久久99精品久久只有精品| 久久久久久毛片免费看| 看久久久久久a级毛片| 久久精品无码免费不卡| 99久久99久久精品免费看蜜桃| 欧美日韩精品久久久免费观看| 久久久久99精品成人片欧美| 久久精品亚洲福利| 久久综合九色综合精品| 亚洲精品乱码久久久久久自慰| 欧美久久综合九色综合| 久久福利青草精品资源站免费| 久久午夜无码鲁丝片秋霞 | 国产叼嘿久久精品久久| 亚洲va久久久噜噜噜久久男同| 亚洲精品久久久www| 久久综合久久伊人| 久久激情亚洲精品无码?V| 国产精品久久99| 国产亚洲欧美成人久久片| 久久精品水蜜桃av综合天堂| 婷婷五月深深久久精品| 狠狠色丁香久久婷婷综合蜜芽五月 | 久久精品国产国产精品四凭| 久久亚洲高清观看| 91久久精品国产成人久久| 激情伊人五月天久久综合| 色88久久久久高潮综合影院| 无码久久精品国产亚洲Av影片| 久久强奷乱码老熟女网站| 7777精品伊人久久久大香线蕉| 伊人久久大香线蕉亚洲五月天| 99精品国产99久久久久久97| 热re99久久精品国99热|