標(biāo)題: STC15F2K60S2單片機(jī)內(nèi)部自帶AD轉(zhuǎn)換實驗 [打印本頁]

作者: iamtheflash    時間: 2018-7-5 10:18
標(biāo)題: STC15F2K60S2單片機(jī)內(nèi)部自帶AD轉(zhuǎn)換實驗
實驗  AD轉(zhuǎn)換

一、實驗?zāi)康?/strong>

了解STC單片機(jī)ADC的結(jié)構(gòu);

掌握STC單片機(jī)ADC的使用。

二、實驗原理

STC15F2K60S2單片機(jī)內(nèi)含8路10位高速AD轉(zhuǎn)換器,速度可達(dá)30萬次/秒。單片機(jī)P1口既可作為普通I/O口,也可作為AD轉(zhuǎn)換器模擬電壓輸入口。AD轉(zhuǎn)換器相關(guān)的寄存器如表1所示。

表1  ADC轉(zhuǎn)換相關(guān)寄存器

P1ASF

P17ASF

P16ASF

P15ASF

P14ASF

P13ASF

P12ASF

P11ASF

P10ASF

ADC_CONTR

ADC_POWER

SPEED1

SPEED0

ADC_FLAG

ADC_START

CHS2

CHS1

CHS0

ADC_RES









ADC_RESL









CLK_DIV

PCON2

MCKO_S1

MCKO_S0

ADRJ

Tx_Rx

Tx2_Rx2

CLKS2

CLKS1

CLKS0

IE

EA

ELVD

EADC

ES

ET1

EX1

ET0

EX0

IP

PPCA

PLVD

PADC

PS

PT1

PX1

PT0

PX0


①P1口控制寄存器P1ASF

P1ASF某一位為“1”,P1口對應(yīng)的引腳設(shè)為模擬功能。某一位為“0”,對應(yīng)的引腳設(shè)為普通I/O。

②ADC控制寄存器ADC_CONTR

              ADC_POWER=1,打開AD轉(zhuǎn)換器電源(關(guān)閉電源可降低功耗,ADC初次上電需適當(dāng)延時,再啟動AD轉(zhuǎn)換)。

              SPEED1、SPEED0選擇AD轉(zhuǎn)換速度。            

SPEED1

SPEED0

AD轉(zhuǎn)換時間

1

1

90個時鐘周期

1

0

180個時鐘周期

0

1

360個時鐘周期

0

0

540個時鐘周期


              ADC_FLAG:AD轉(zhuǎn)換結(jié)束標(biāo)志,需由軟件清0。

              ADC_START:AD轉(zhuǎn)換啟動控制。

              CHS2、CHS1、CHS0:選擇模擬輸入通道P1.0~P1.7。

轉(zhuǎn)換結(jié)果存放在ADC_RES和ADC_RESL寄存器中,當(dāng)CLK_DIV.5/ADRJ=0時,ADC_RES為結(jié)果的高8位,ADC_RESL為結(jié)果的低2位(如表2所示)。當(dāng)CLK_DIV.5/ADRJ=1時,ADC_RES為結(jié)果的高2位,ADC_RESL為結(jié)果的低8位(如表3所示)。

表2  ADRJ=0時ADC轉(zhuǎn)換結(jié)果寄存器格式

ADC_RES

RES9

RES8

RES7

RES6

RES5

RES4

RES3

RES2

ADC_RESL

-

-

-

-

-

-

RES1

RES0


表3  ADRJ=1時ADC轉(zhuǎn)換結(jié)果寄存器格式

ADC_RES







RES9

RES8

ADC_RESL

RES7

RES6

RES5

RES4

RES3

RES2

RES1

RES0


STC15F2K60S2的AD轉(zhuǎn)換器以Vcc為參考電壓,當(dāng)ADRJ=0時,10位轉(zhuǎn)換結(jié)果與輸入模擬電壓的關(guān)系由式(1)計算:

…………...……………………(1)

如果只取高8位,則由式(2)計算:

……………………………………...…………………(2)

當(dāng)ADRJ=1時,10位轉(zhuǎn)換結(jié)果與輸入模擬電壓的關(guān)系由式(3)計算:

…………………………………(3)

如果單片機(jī)Vcc電壓不穩(wěn),會引起AD轉(zhuǎn)換誤差,在實際應(yīng)用中,可用一路AD采樣外部的基準(zhǔn)電壓(如用TL431基準(zhǔn)電源),另一路AD采樣被測電壓,按式(4)計算:

………………………………..…………………..(4)

三、實驗環(huán)境

Windows XP;

Keil μ Vision 4;

STC-ISP-6.28。

四、實驗內(nèi)容

1.實驗連線

分別用兩根8芯杜邦線將單片機(jī)P2口與J61、單片機(jī)P0口與J62連接起來,P0口用于數(shù)碼管的位選擇,P2口輸出數(shù)碼管的顯示碼。用跳線帽短接JP8、JP9,模擬輸入經(jīng)過RC濾波(如圖1所示)。用杜邦線連接連接J35和P1.3,單片機(jī)通道3采樣模擬輸入電壓。

圖1  ADC模擬輸入濾波電路

2.程序設(shè)計

Keil匯編或C語言頭文件REG51.H不包含STC單片機(jī)ADC寄存器定義,而編程時需要用到ADC_CONTR、ADC_RES等特殊功能寄存器,STC-ISP軟件提供各種STC單片機(jī)的寄存器定義頭文件。在STC-ISP軟件界面,選擇頭文件選項卡,選擇好單片機(jī)系列,該系列的寄存定義出現(xiàn)在文本框中,可以復(fù)制頭文件內(nèi)容,也可以保存頭文件(如圖8-2所示)。本實驗可以將頭文件命名為STC15F2K.H,保存到\Keil\C51\INC文件夾中,以后編程時直接用該頭文件替換REG51.H。

AD轉(zhuǎn)換可以用中斷的方式,也可以用查詢的方式。每次轉(zhuǎn)換結(jié)束,將ADC_RES寄存器和ADC_RESL寄存器內(nèi)容存入整型變量result。當(dāng)ADRJ=0時:

int  result;

    result=(ADC_RES<<2)|(ADC_RESL&3);

    vin=result*Vcc/1024;              //Vcc單位為毫伏

圖9-2  STC15F2K系列頭文件

3.程序設(shè)計

程序經(jīng)編譯生成HEX文件,再利用STC-ISP軟件將代碼下載到單片機(jī)中,調(diào)節(jié)多圈電位器W3,觀察數(shù)碼管顯示值的變化。用數(shù)字萬用表核對J35的輸入電壓與數(shù)碼管顯示的電壓是否一致。

五、思考題

1. ADC通道2對2.45V基準(zhǔn)電壓(J41)采樣,通道3對模擬輸入電壓采樣,根據(jù)(4)式計算并顯示被測電壓。

2.如何實現(xiàn)多路電壓檢測并輪流顯示?



以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便保存):

實驗 AD轉(zhuǎn)換.docx (104.09 KB, 下載次數(shù): 228)




作者: 小黑屋@    時間: 2018-8-18 17:16
分析的很好
作者: qwercxf    時間: 2018-9-26 13:52
雞肋,食之無味,棄之可惜
作者: 歲月留痕    時間: 2018-10-12 22:07
#include "ad_12c.h"unsigned char ch=0;unsigned int  AD_value[10]={0};unsigned int  AD_data[3]={0};void init_AD(){                P1ASF=0X07;                ADC_RES=0;          ADC_RESL=0;          ADC_CONTR=(ADC_POWER|ADC_SPEEDLL|ADC_START)&(~ADC_FLAG)|ch;          EA=1;          EADC=1;}void AD_areg(){        unsigned char i=0;        unsigned int sum=0;        for(i=0;i<10;i++)        {                sum=sum+AD_value[i];        }        AD_data[ch]=sum/10;        }void ADC_inter()interrupt 5{        static unsigned char i=0;                 ADC_CONTR&=~ADC_FLAG;        AD_value[i]=ADC_RES;        AD_value[i]=(AD_value[i]<<2)+(ADC_RESL&3);  ADC_CONTR=(ADC_POWER|ADC_SPEEDLL|ADC_START)|ch;          i++;        if(i>9)        {                i=0;                AD_areg();                ch++;                if(ch==3)ch=0;        }               
作者: 十大撒大多    時間: 2019-12-25 10:39
出來的數(shù)據(jù)為什么不對

作者: 2495137000    時間: 2021-8-13 09:31
這個咋仿真




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1