国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年06月21日(星期六)

2018年06月21日 | STC15F2K60S2芯片A/D轉(zhuǎn)換器的應(yīng)用

發(fā)布者:幸福時(shí)光 來源: eefocus關(guān)鍵字:STC15F2K60S2芯片  D轉(zhuǎn)換器 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

1.目的

在工業(yè)控制過程中,它是控制系統(tǒng)與微機(jī)之間不可缺少的接口方式。要實(shí)現(xiàn)自動控制,就要檢測有關(guān)參數(shù),A/D轉(zhuǎn)換器,把檢測到的電壓或電流信號(模擬量)轉(zhuǎn)換成計(jì)算機(jī)能夠識別的等效數(shù)字量,這些數(shù)字量經(jīng)過計(jì)算機(jī)處理后輸出結(jié)果,通過D/A轉(zhuǎn)換器變?yōu)殡妷夯螂娏餍盘?,送到?zhí)行機(jī)構(gòu),達(dá)到控制某種過程的目的。

2.與A/D轉(zhuǎn)換相關(guān)的寄存器

與STC15系列單片機(jī)A/D轉(zhuǎn)換相關(guān)的寄存器列于下表所示。

符號

描述

地址

位地址及其符號

MSB                                     LSB

復(fù)位值

P1ASF

P1 Analog Function Configure register

9DH

P17ASF

P16ASF

P15ASF

P14ASF

P13ASF

P12ASF

P11ASF

P10ASF

0000 0000B

ADC_CONTR

ADC Control Register

BCH

ADC_POWER

SPEED1

SPEED0

ADC_FLAG

ADC_START

CHS2

CHS1

CHS0

0000 0000B

ADC_RES

ADC Result high

BDH









0000 0000B

ADC_RESL

ADC Result low

BEH









0000 0000B

CLK_DIV

PCON2

時(shí)鐘分頻寄存器

97H

MCKO_S1

MCKO_S0

ADRJ

Tx_Rx

Tx2_Rx2

CLKS2

CLKS1

CLKS0

0000 x000B

IE

Interrupt Enable

A8H

EA

ELVD

EADC

ES

ET1

EX1

ET0

EX0

0000 0000B

IP

Interrupt Priority Low

B8H

PPCA

PLVD

PADC

PS

PT1

PX1

PT0

PX0

0000 0000B

2.1.P1口模擬功能控制寄存器P1ASF

STC15系列單片機(jī)的A/D轉(zhuǎn)換口在P1口(P1.7-P1.0),有8路10位高速A/D轉(zhuǎn)換器,速度可達(dá)到300KHz(30萬次/秒)。8路電壓輸入型A/D,可做溫度檢測、電池電壓檢測、按鍵掃描、頻譜檢測等。上電復(fù)位后P1口為弱上拉型I/O口,用戶可以通過軟件設(shè)置將8路中的任何一路設(shè)置為A/D裝換,不需作為A/D使用的P1口可繼續(xù)作為I/O口使用(建議只作為輸入)。需作為A/D使用的口需先將P1ASF特殊功能寄存器中的相應(yīng)位置為‘1’,將相應(yīng)的口設(shè)置為模擬功能。P1ASF寄存器的格式如下:

P1ASF:P1口模擬功能控制寄存器(該寄存器是只寫寄存器,讀無效)

SFR name

Adess

Bit

B7

B6

B5

B4

B3

B2

B1

B0

P1ASF

9DH

Name

P17ASF

P16ASF

P15ASF

P14ASF

P13ASF

P12ASF

P11ASF

P10ASF

 



P1ASF[7:0]

P1.x的功能

其中P1ASF寄存器地址為:[9DH](不能進(jìn)行位尋址)

P1ASF.0 = 1

P1.0口作為模擬功能A/D使用


P1ASF.1 = 1

P1.1口作為模擬功能A/D使用


P1ASF.2 = 1

P1.2口作為模擬功能A/D使用


P1ASF.3 = 1

P1.3口作為模擬功能A/D使用


P1ASF.4 = 1

P1.4口作為模擬功能A/D使用


P1ASF.5 = 1

P1.5口作為模擬功能A/D使用


P1ASF.6 = 1

P1.6口作為模擬功能A/D使用


P1ASF.7 = 1

P1.7口作為模擬功能A/D使用


 

2.2. ADC_CONTR

ADC_CONTR寄存器的格式如下:

ADC_CONTR:ADC控制寄存器

SFR name

Adess

Bit

B7

B6

B5

B4

B3

B2

B1

B0

ADC_CONTR

BCH

name

ADC_POWER

SPEED1

SPEED0

ADC_FLAG

ADC_START

CHS2

CHS1

CHS0

對ADC_CONTR寄存器進(jìn)行操作,建議直接用MOV賦值語句,不要用‘與’和‘或’語句。

ADC_POWER:ADC電源控制位。

0:關(guān)閉ADC電源;

1:打開A/D轉(zhuǎn)換器電源。

建議進(jìn)入空閑模式和掉電模式前,將ADC電源關(guān)閉,即ADC_POWER = 0,可降低功耗。啟動A/D轉(zhuǎn)換前一定要確認(rèn)A/D電源已打開,A/D轉(zhuǎn)換結(jié)束后關(guān)閉A/D電源可降低功耗,也可不關(guān)閉。初次打開內(nèi)部A/D轉(zhuǎn)換模擬電源,需適當(dāng)延時(shí),等內(nèi)部模擬電源穩(wěn)定后,再啟動A/D轉(zhuǎn)換。

建議啟動A/D轉(zhuǎn)換后,在A/D轉(zhuǎn)換結(jié)束之前,不改變?nèi)魏蜪/O口的狀態(tài),有利于高精度A/D轉(zhuǎn)換,如能將定時(shí)器/串行口/中斷系統(tǒng)關(guān)閉更好。

SPEED1,SPEED0:模數(shù)轉(zhuǎn)換器轉(zhuǎn)換速度控制位

SPEED1

SPEED0

A/D轉(zhuǎn)換所需時(shí)間

1

1

90個(gè)時(shí)鐘周期轉(zhuǎn)換一次,CPU工作頻率21MHz時(shí),A/D轉(zhuǎn)換速度約300MHz

1

0

180個(gè)時(shí)鐘周期轉(zhuǎn)換一次

0

1

360個(gè)時(shí)鐘周期轉(zhuǎn)換一次

0

0

540個(gè)時(shí)鐘周期轉(zhuǎn)換一次

ADC_FLAG:模數(shù)轉(zhuǎn)換器轉(zhuǎn)換結(jié)束標(biāo)志位,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG = 1,要由軟件清0。不管是A/D轉(zhuǎn)換完成后由該位申請產(chǎn)生中斷,還是由軟件查詢該標(biāo)志位A/D轉(zhuǎn)換是否結(jié)束,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG = 1,一定要軟件清0。

ADC_START:模數(shù)轉(zhuǎn)換器(ADC)轉(zhuǎn)換啟動控制位,設(shè)置為“1”時(shí),開始轉(zhuǎn)換,轉(zhuǎn)換結(jié)束后為0。

CHS2/CHS1/CHS0:模擬輸入通道選擇,CHS2/CHS1/CHS0

CHS2

CHS1

CHS0

Analog Channel Select

0

0

0

選擇P1.0作為A/D輸入來用

0

0

1

選擇P1.1作為A/D輸入來用

0

1

0

選擇P1.2作為A/D輸入來用

0

1

1

選擇P1.3作為A/D輸入來用

1

0

0

選擇P1.4作為A/D輸入來用

1

0

1

選擇P1.5作為A/D輸入來用

1

1

0

選擇P1.6作為A/D輸入來用

1

1

1

選擇P1.7作為A/D輸入來用

 

2.3.ADC轉(zhuǎn)換結(jié)果調(diào)整寄存器位—ADRJ

ADC轉(zhuǎn)換結(jié)果調(diào)整控制位——ADRJ位于寄存器CLK_DIV/PCON中,用于控制ADC轉(zhuǎn)換結(jié)果存放的位置。

Mnemonic

Add

Name

B7

B6

B5

B4

B3

B2

B1

B0

Reset Value

CLK_DIV

98H

時(shí)鐘寄存器

MCKO_S1

MCKO_S0

ADRJ

Tx_Rx

Tx2_Rx2

CLKS2

CLKS1

CLKS0

0000,x000

ADRJ:ADC轉(zhuǎn)換結(jié)果調(diào)整

0:ADC_RES[7:0]存放高8位ADC結(jié)果,ADC_RESL[1:0]存放低2位ADC結(jié)果

1:ADC_RES[1:0]存放高2位ADC結(jié)果,ADC_RESL[7:0]存放低8位ADC結(jié)果

Mnemonic

Add

Name

B7

B6

B5

B4

B3

B2

B1

B0

ADC_RES

BDh

A/D轉(zhuǎn)換結(jié)果寄存器高









ADC_RES

BDh

A/D轉(zhuǎn)換結(jié)果寄存器低









CLK_DIV

97H

時(shí)鐘分頻寄存器

MCKO_S1

MCKO_S0

ADRJ

Tx_Rx

TX2_Rx2

CLKS2

CLKS1

CLKS0









2.4.A/D轉(zhuǎn)換結(jié)果寄存器ADC_RES、ADC_RESL

特殊功能寄存器ADC_RES和ADC_RESL寄存器用于保存A/D轉(zhuǎn)換結(jié)果,其格式如下:

AUXRI寄存器的ADRJ位是A/D轉(zhuǎn)換結(jié)果寄存器(ADC_RES、ADC_RESL)的數(shù)據(jù)格式調(diào)整控制位。

當(dāng)ADRJ = 0時(shí),10位A/D轉(zhuǎn)換結(jié)果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中。

Mnemonic

Add

Name

B7

B6

B5

B4

B3

B2

B1

B0

ADC_RES

BDh

A/D轉(zhuǎn)換結(jié)果寄存器高8位

ADC_RES7

ADC_RES6

ADC_RES5

ADC_RES4

ADC_RES3

ADC_RES2

ADC_RES3

ADC_RES2

ADC_RES

BDh

A/D轉(zhuǎn)換結(jié)果寄存器低2位

-

-

-

-

-

-

ADC_RES1

ADC_RES0

CLK_DIV

97H

時(shí)鐘分頻寄存器



ADRJ = 0






此時(shí),如果用戶需取完整10位結(jié)果,按下面公式計(jì)算:

10-bit A/D ConversionResult:(ADC_RES[7:0],ADC_RESL1:0]) = 1024*Vin/Vcc

如果用戶只需取8位結(jié)果,按下面公式計(jì)算:

8-bit A/D ConversionResult:(ADC_RES[7:0]) = 256*Vin/Vcc

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

電壓作為模擬參考電壓。

當(dāng)ADRJ = 1時(shí),10位A/D轉(zhuǎn)換結(jié)果的高2位存放在ADC_RES的低2位中,低8位存放在ADC_RESL中。

Mnemonic

Add

Name

B7

B6

B5

B4

B3

B2

B1

B0

ADC_RES

BDh

A/D轉(zhuǎn)換結(jié)果寄存器高2位

-

-

-

-

-

-

ADC_RES9

ADC_RES8

ADC_RES

BDh

A/D轉(zhuǎn)換結(jié)果寄存器低8位

ADC_RES7

ADC_RES6

ADC_RES5

ADC_RES4

ADC_RES3

ADC_RES2

ADC_RES1

ADC_RES0

CLK_DIV

97H

時(shí)鐘分頻寄存器



ADRJ = 1






 








此時(shí),如果用戶需取完整10位結(jié)果,按下面公式計(jì)算:

10-bit A/D ConversionResult:(ADC_RES[1:0],ADC_RESL[7:0]) = 1024*Vin/Vcc

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

2.5.中斷允許寄存器IE

IE:中斷允許寄存器(可位尋址)

SFR name

Adess

Bit

B7

B6

B5

B4

B3

B2

B1

B0

IE

A8H

Name

EA

ELVD

EADC

ES

ET1

EX1

ET0

EX0

EA:CPU的中斷開放標(biāo)志

EA = 1,CPU開放中斷,

EA = 0,CPU屏蔽所有的中斷申請。

EA的作用是使中斷允許形成多級控制。即各中斷源首先受EA控制;其次還受各中斷源自己的中斷允許控制位控制。

EADC:A/D轉(zhuǎn)換中斷允許位

EADC = 1,允許A/D轉(zhuǎn)換中斷,

EADC = 0,禁止A/D轉(zhuǎn)換中斷。

2.6.中斷優(yōu)先級控制寄存器IP

IP:中斷優(yōu)先級控制寄存器(可位尋址)

SFR name

Adess

Bit

B7

B6

B5

B4

B3

B2

B1

B0

IP

B8H

Name

PPCA

PLVD

PADC

PS

PT1

PX1

PT0

PX0

PADC:A/D轉(zhuǎn)換中斷優(yōu)先級控制位。

當(dāng)PADC = 0時(shí),A/D轉(zhuǎn)換中斷為最低優(yōu)先級中斷(優(yōu)先級0)

當(dāng)PADC = 1時(shí),A/D轉(zhuǎn)換中斷為最高優(yōu)先級中斷(優(yōu)先級1)

3.A/D轉(zhuǎn)換器的結(jié)構(gòu)


 

4.程序

/****************************************************/

//利用STC12C5A60S2AD轉(zhuǎn)換,實(shí)現(xiàn)溫度計(jì)

//函數(shù)名:main.c

/****************************************************/

#include

#include"10bit_adc.c"

#define uchar unsigned char  /*宏定義用uchar 代替unsignedchar*/

#define uint unsigned int       /*宏定義用uint 代替 unsignedint*/

 

code uchar seven_seg[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar cp0;

uint cp1,AD_DAT;

sbit P3_4 = P3^4;

sbit P3_5 = P3^5;

sbit P3_6 = P3^6;

/************Timer0中斷服務(wù)函數(shù)***************/

 

void timer0_isr(void) interrupt 1

{    

       TH0= (65536 - 1000) / 256; //重裝初值

       TL0= (65536 - 1000) % 256;       //重裝初值

       cp1++;                              //中斷1次,變量加1

       if(cp1>=  1000)                //1秒到了     

       {

              cp1= 0;

              AD_DAT= get_adc();

              AD_DAT= (790 - AD_DAT) * 0.095;

       }

       P2= 0xff;

       P3= 0xff;                                                 

       switch(cp0)

       {

              case0: P2 = seven_seg[AD_DAT % 100 % 10]; P3_6 = 0;break;             

              case1: P2 = seven_seg[AD_DAT % 100 / 10]; P3_5 = 0;;break;

              case2: P2 = seven_seg[AD_DAT / 100]; P3_4 = 0;break;

      

       }

       cp0++;

       if(cp0>=3)cp0 = 0;

}

/*********************Timer0初始化函數(shù)***********************/

void timer0_init(void)

{

       TMOD= 0x01;                        //T0工作方式1

       TH0= (65536 - 1000) / 256;        //對機(jī)器脈沖計(jì)數(shù)1000個(gè)計(jì)滿溢出引發(fā)中斷

       TL0= (65536 - 1000) % 256;

       EA= 1;                                  //開總中斷

       ET0= 1;                                  //開T0中斷

       TR0= 1;                                  //啟動定時(shí)器T0

}

/**************************主函數(shù)****************************/

void main(void)

{

       timer0_init();

       adc_init();

       while(1);                                    //等待中斷 

}

/****************************************************/

//利用STC12C5A60S2AD轉(zhuǎn)換,實(shí)現(xiàn)溫度計(jì)

//函數(shù)名:10bit_adc.c

/****************************************************/

#include

#include

#define nop _nop_()

#define ADC_POWER 0x80

#define ADC_START 0x08

#define ADC_FLAG 0x10

#define ADC_SPEEDH 0x40                    //轉(zhuǎn)換速度為180個(gè)時(shí)鐘周期

#define ADRJ 0x20                           //ADRJ = 1;

#define AD_P1_0 0x00               //P1.0為AD輸入;

sfr ADC_CONTR = 0xbc;

sfr ADC_RES = 0xbd;

sfr ADC_RESL = 0xbE;

sfr P1ASF = 0x9D;

sfr PCON2 = 0x97;

void adc_init(void)

{

       P1ASF= 0x01;                         //設(shè)置P1為模擬輸入端口  

       PCON2= PCON2 | ADRJ;           //ADRJ  = 1;

       ADC_CONTR= ADC_POWER | ADC_SPEEDH | AD_P1_0;

       //設(shè)置A/D電源開啟、轉(zhuǎn)換速度設(shè)置、A/D輸入端口;

       nop;nop;nop;nop;//等待電源穩(wěn)定;    

}

unsigned int get_adc(void)

{

       unsignedint i,j;

       ADC_CONTR= ADC_CONTR | ADC_START;                 //開始轉(zhuǎn)換

       while((ADC_CONTR& ADC_FLAG) != ADC_FLAG);    //等待轉(zhuǎn)換標(biāo)志置位

       i= ADC_RES;

       j= ADC_RESL;

       i= i << 8;

       i= i | j;

       ADC_CONTR= ADC_CONTR & ~ADC_FLAG ;                   //清零轉(zhuǎn)換標(biāo)志位

       ADC_RES= 0;

       ADC_RESL= 0;

       return(i);

}


關(guān)鍵字:STC15F2K60S2芯片  D轉(zhuǎn)換器 引用地址:STC15F2K60S2芯片A/D轉(zhuǎn)換器的應(yīng)用

上一篇:單片機(jī)實(shí)現(xiàn)PT2262解碼示例代碼
下一篇:單片機(jī)矩陣鍵盤的實(shí)現(xiàn)

推薦閱讀

#include<iom16v.h> #include<macros.h> #define uchar unsigned char #define uint unsigned int #define DELAY 500 void delay(uint z) //1ms { uint x,y; for(x=z;x>0;x--) for(y=157;y>0;y--); } void main(void) { DDRA |=BIT(0); while(1) { PORTA &=~BIT(0); delay(DELAY); PORTA |=BIT(0); delay(DELAY); ...
TrendForce報(bào)告指出,電動汽車已成為汽車產(chǎn)業(yè)未來的主要成長動能,預(yù)估在2021年電動汽車將突破800萬輛,為2018年的兩倍。集邦咨詢旗下拓墣產(chǎn)業(yè)研究院報(bào)告指出,除了電池與發(fā)動機(jī)外,電動汽車關(guān)鍵零組件以IGBT功率元件最為重要,其使用量約為傳統(tǒng)內(nèi)燃機(jī)引擎汽車的5至10倍之多,因此電動汽車的發(fā)展將帶動IGBT市場總值持續(xù)成長,預(yù)估2021年IGBT的市場總值將突...
51系列單片機(jī)一般采用40只引腳的雙列直插式(DIP——Dual In-line Package)封裝結(jié)構(gòu)。除DIP封裝外, 51單片機(jī)還采用44只引腳的方形扁平(QFP——Quad Flat Package) 封裝方式(4只引腳無用)。三類端口引腳 (共32只)電源及晶振引腳(共4只)控制引腳(共4只)(1)端口引腳P0.0~P0.7(39~32腳)——P0口P1.0~P1.7(1~8腳)——P1口P2.0~P2.7...
在近日舉行的一場線上訪談中,AMD總裁兼CEO蘇姿豐(Lisa SU)談及了對于數(shù)據(jù)中心業(yè)務(wù),收購賽靈思以及行業(yè)產(chǎn)能緊張的看法。蘇姿豐表示,數(shù)據(jù)中心對AMD非常具有戰(zhàn)略意義。數(shù)據(jù)中心處于發(fā)展進(jìn)化過程中,不斷增加異構(gòu)計(jì)算的屬性。隨著越來越多需要處理數(shù)據(jù)的產(chǎn)生,單一產(chǎn)品無法滿足數(shù)據(jù)中心的需求,而是需要使用和優(yōu)化多種工作負(fù)載,如CPU、GPU、ASIC和FPGA...

史海拾趣

問答坊 | AI 解惑

頂!

頂!頂!頂!頂!頂!…

查看全部問答∨

如何焊接貼片元件(圖片教程)

如何焊接貼片元件(圖片教程) 首先來張全部焊接一個(gè)點(diǎn)的PCB圖 當(dāng)然這是焊接貼片的必須工具 這個(gè)是準(zhǔn)備焊接的DD(暈倒,稍不小心會不見) 先用烙鐵加熱焊點(diǎn) 然后夾個(gè)貼片馬上過去 等貼片固定后焊接另外一邊! 焊接IC了,先在PCB上 ...…

查看全部問答∨

哎,買了個(gè)太陽能小夜燈,被騙了。想自己改進(jìn)一下,請假一下電路如何改進(jìn)

買了個(gè)太陽能小夜燈,說白天太陽底下充電一個(gè)白天,能亮一個(gè)晚上??伤钱?dāng)快沒電了的時(shí)候,一閃一閃的。正常亮也就亮兩個(gè)小時(shí),然后就是一閃一閃的亮。晚上一閃一閃的晃的睡不著。 我想改進(jìn)一下,當(dāng)它快沒電的時(shí)候不讓它亮了?!?

查看全部問答∨

請問DriverStudio對應(yīng)VC6的插件是那個(gè)dll文件

我知道vc2005環(huán)境對應(yīng)DriverStudio的開發(fā)插件是DSDDKEnv8.dll,我想知道DriverStudio對應(yīng)VC6的插件是那個(gè)dll文件.…

查看全部問答∨

如何在驅(qū)動中(如miniport driver)監(jiān)控鼠標(biāo)和鍵盤的消息?

目前打算從驅(qū)動中監(jiān)控鼠標(biāo)和鍵盤的消息(鼠標(biāo)是否有移動或者鍵盤是否有按下),當(dāng)監(jiān)控到這個(gè)消息的時(shí)候,就喚醒處于睡眠狀態(tài)的驅(qū)動。請大俠給一些建議,謝謝??!…

查看全部問答∨

多用途太陽能LED發(fā)光水壺

看上去是個(gè)運(yùn)動水壺,其實(shí)他是一個(gè)LED露營燈, 如果你旅行時(shí)有重要的私人用品,還可以將他們都裝進(jìn)去,防水防潮。這款名叫LightCap 300 LED戶外燈,LED燈藏在瓶蓋里面,瓶蓋的外面是貼有整塊太陽能板,不管你在哪只要野外晴天就能充電,夜晚就能持 ...…

查看全部問答∨

USART1初始化遇到問題

初始化步驟如下:1:  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);2:USART_DeInit(USART1);3:USART_Init(USART1, &USART_InitStructure); ...…

查看全部問答∨

MSP430低功耗模式下PWM產(chǎn)生

小弟最近使用MSP430F2011外接32.768K晶振  然后想再LPM3模式下下產(chǎn)生3000HZ的PWM波形 可是我用定時(shí)器產(chǎn)生選著ACLK32.768HZ  怎么算也算不出來 3000HZ   求大俠指點(diǎn) …

查看全部問答∨

電動車蹺蹺板

下載過來的,有原理圖,軟件…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved