第9章MSP430模數(shù)轉(zhuǎn)換ADC_第1頁(yè)
第9章MSP430模數(shù)轉(zhuǎn)換ADC_第2頁(yè)
第9章MSP430模數(shù)轉(zhuǎn)換ADC_第3頁(yè)
第9章MSP430模數(shù)轉(zhuǎn)換ADC_第4頁(yè)
第9章MSP430模數(shù)轉(zhuǎn)換ADC_第5頁(yè)
已閱讀5頁(yè),還剩162頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第9章模/數(shù)轉(zhuǎn)換(ADC)第一節(jié)概述第二節(jié)模/數(shù)轉(zhuǎn)換器第三節(jié)采樣保持器和多路模擬開關(guān)本章教學(xué)目標(biāo):1、了解ADC的基本概念2、MSP430ADC12的原理與基本應(yīng)用1第一節(jié)概述計(jì)算機(jī)測(cè)量控制系統(tǒng)計(jì)算機(jī)控制對(duì)象傳感器放大器濾波器A/DD/A放大器執(zhí)行部件2計(jì)算機(jī)多路開關(guān)傳感器1放大器1濾波器1模擬量1采樣保持A/D傳感器n放大器n濾波器n模擬量n數(shù)據(jù)采集系統(tǒng)與本課程相關(guān)部分音頻、視頻信號(hào)數(shù)字通信3第二節(jié)模/數(shù)轉(zhuǎn)換器一、A/D轉(zhuǎn)換器的基本原理二、MSP430

ADC12介紹4一、A/D轉(zhuǎn)換器的基本原理模擬輸入量數(shù)字輸出量0000010100110000010100111v2v3v4v5v6v7vA/D轉(zhuǎn)換器模擬輸入量數(shù)字輸出量量化5工作原理特點(diǎn)計(jì)數(shù)式結(jié)構(gòu)簡(jiǎn)單、轉(zhuǎn)換速度慢、精度低,實(shí)際少用雙積分式精度高、轉(zhuǎn)換速度慢、抗干擾性能好逐次逼近式轉(zhuǎn)換速度較快、精度較高實(shí)際常用、抗干擾性能不如積分式高速并行式轉(zhuǎn)換速度快,價(jià)格高,精度低A/D轉(zhuǎn)換器分類Σ-Δ式61.分辨率:指A/D轉(zhuǎn)換器所能分辨的最小模擬輸入量,通常用A/D的位數(shù)表示。如:8位A/D的分辨率為8位,10位A/D的分辨率為10位2.轉(zhuǎn)換精度:指實(shí)際輸入的模擬值與理論輸入的模擬值(根據(jù)A/D輸出推算)之間的偏差。常用數(shù)字量最低有效位LSB的幾分之幾表示。14LSB12LSB3.轉(zhuǎn)換時(shí)間和轉(zhuǎn)換速度:轉(zhuǎn)換時(shí)間指完成一次A/D轉(zhuǎn)換所需的時(shí)間,從啟動(dòng)信號(hào)開始到轉(zhuǎn)換結(jié)束,得到穩(wěn)定數(shù)字量的時(shí)間。轉(zhuǎn)換速度是轉(zhuǎn)換時(shí)間的倒數(shù)。A/D轉(zhuǎn)換器的主要技術(shù)指標(biāo)7逐次逼近式A/D轉(zhuǎn)換器原理圖-+D/A轉(zhuǎn)換器輸出緩沖器控制電路啟動(dòng)信號(hào)STARTCLK時(shí)鐘EOC轉(zhuǎn)換結(jié)束信號(hào)D7D0比較器模擬輸入數(shù)字輸出NADCVinOE輸出使能信號(hào)SARVREFVDA80000000010000000110000001010000010110000101000101010000110100101xxxxxxxx1010110110101101D7D6D5D4D0D1D3D29A/D轉(zhuǎn)換器的典型信號(hào)、電源、地A/D轉(zhuǎn)換器模擬量輸入信號(hào)A/D轉(zhuǎn)換啟動(dòng)信號(hào)數(shù)字量輸出A/D轉(zhuǎn)換完成信號(hào)輸出使能信號(hào)ADC時(shí)鐘電源模擬地?cái)?shù)字地參考電源10A/D轉(zhuǎn)換的啟動(dòng)電平啟動(dòng)高電平啟動(dòng)低電平啟動(dòng)脈沖沿啟動(dòng)上升沿啟動(dòng)下降沿啟動(dòng)啟動(dòng)方法軟件啟動(dòng)硬件啟動(dòng)啟動(dòng)信號(hào)11CPU對(duì)ADC轉(zhuǎn)換結(jié)果的讀取方式程序延時(shí)方式程序查詢方式中斷方式12二、MSP430ADC12介紹ADC12模塊是一個(gè)轉(zhuǎn)換速度高達(dá)200ksps、采樣時(shí)間可編程的12-bit逐次逼近型模數(shù)轉(zhuǎn)換器。由12-bit的SAR核、采樣保持電路、模擬開關(guān)、參考電壓產(chǎn)生與選擇電路、ADC時(shí)鐘選擇電路、采樣與轉(zhuǎn)換控制電路、16個(gè)轉(zhuǎn)換結(jié)果存儲(chǔ)緩沖器及其對(duì)應(yīng)的16個(gè)存儲(chǔ)控制寄存器、中斷系統(tǒng)、片上集成溫度傳感器等組成。ADC12可以在沒有CPU的參與下,獨(dú)立實(shí)現(xiàn)多達(dá)16次的采樣、轉(zhuǎn)換和存儲(chǔ)操作。ADC12模塊可以獨(dú)立斷電,以便于低功耗設(shè)計(jì)。MSP430X13X,MSP430X14X,MSP43015X和MSP430X16X等芯片中均有ADC12模塊。13ADC12模塊14ADC12的特點(diǎn)與性能指標(biāo):采樣率可達(dá)200ksps,采樣率可編程;分辨率12-bit;內(nèi)含16路模擬開關(guān),其中8路外部模擬輸入,1路內(nèi)部溫度傳感器輸入等;內(nèi)含采樣保持電路,采樣時(shí)間可編程;可由軟件、Timer_A

或Timer_B啟動(dòng)轉(zhuǎn)換過程;參考電壓可編程:內(nèi)部(1.5V或2.5V)、外部;4種轉(zhuǎn)換模式;ADC核和內(nèi)部參考電源可編程斷電,以實(shí)現(xiàn)節(jié)能;具有中斷(子)向量寄存器,供18路ADC中斷譯碼用;具有16個(gè)轉(zhuǎn)換結(jié)果存儲(chǔ)寄存器。1512-BITSARADC參考電壓源時(shí)鐘電路采樣/保持器模擬開關(guān)采樣與轉(zhuǎn)換控制電路結(jié)果存儲(chǔ)緩沖器與相應(yīng)的控制寄存器MSP430ADC12原理框圖1617ADC12的模數(shù)轉(zhuǎn)換部分原理圖18NADC=4095,當(dāng)Vin≥VR+NADC=0,當(dāng)Vin≤VR-VR+和VR-可由軟件編程設(shè)置NADC=4095×————Vin-VR-VR+-VR-ADC12的轉(zhuǎn)換結(jié)果NADC:19參考電壓源VR+,VR-電路20BIS#REFON+REF2_5V,&ADC12CTL0 ;turnon2.5VrefBIS.B#SREF_1,&ADC12MCTL0 ;Vr+=Vref+舉例:ADC12通道0使用內(nèi)部2.5V參考電壓源SREF2SREF1SREF0001#SREF_121BIS#REFON,&ADC12CTL0 ;turnon2.5VrefBIS.B#SREF_1,&ADC12MCTL0 ;Vr+=Vref+舉例:ADC12通道0使用內(nèi)部1.5V參考電壓源SREF2SREF1SREF0001#SREF_122舉例:VR+使用外部正參考電壓源VeREF+ BIS.B#SREF_2,&ADC12MCTL0SREF2SREF1SREF001x#SREF_2or#SREF_3or BIS.B#SREF_3,&ADC12MCTL023ADC12工作時(shí)鐘(ADC12CLK)編程設(shè)置例:BIS#ADC12SSEL_2,&ADC12CTL124MSP430F149轉(zhuǎn)換時(shí)鐘、轉(zhuǎn)換時(shí)間、電源建立時(shí)間和采樣時(shí)間等參數(shù)13/6.3=2.06,13/3.7=3.5125ADC12的模擬輸入及其多路模擬開關(guān)例:BIS.B #INCH_4,&ADC12MCTL026ADC12中的采樣保持器采樣/保持信號(hào)AD轉(zhuǎn)換啟動(dòng)信號(hào)模擬開關(guān)輸出什么是采樣保持器?為什么需要采樣保持器?請(qǐng)參見本章附錄Sample/HoldInput

SignalSAMPCON為高電平時(shí),采樣保持器工作在采樣模式SAMPCON為低電平時(shí),采樣保持器工作在保持模式SAMPCON的下降沿與ADC12CLK同步后啟動(dòng)AD轉(zhuǎn)換采樣信號(hào)源選擇極性選擇采樣方式選擇采樣與轉(zhuǎn)換控制采樣定時(shí)器28采樣與轉(zhuǎn)換控制ADC12SC .0ENC .1MSC .7SHT0x .8~11SHT1x .12~15ISSH .8SHP .9SHSx .10~11ADC12CTL0ADC12CTL129SHP=0,SAMPCON=SHI,非采樣定時(shí)器采樣方式 (ExtendedSampleMode)SHP=1,SAMPCON=采樣定時(shí)器輸出,采樣定時(shí)器采樣方式

(PulseSampleMode)采樣方式選擇30非采樣定時(shí)器采樣方式(ExtendedSampleMode)SHP=0,SAMPCON=SHItsample=采樣保持輸入信號(hào)(SHI)的寬度31采樣定時(shí)器采樣方式(PulseSampleMode)SHP=1,SAMPCON=采樣定時(shí)器輸出tsample=采樣定時(shí)器輸出信號(hào)的寬度采樣保持輸入信號(hào)的寬度0~1×ADC12CLK4×ADC12CLK≤tsample≤1024×ADC12CLK32采樣定時(shí)器設(shè)置設(shè)置采樣時(shí)間tsample4×ADC12CLK≤tsample≤1024×ADC12CLKSHT0x ADC12CTL0.8~11SHT1x ADC12CTL0.12~1533采樣時(shí)間計(jì)算tsampletsample>(Rs+Ron)×ln(2)×Cs+800ns13tsample>(Rs+2k)×9.011×40pF

+800ns12-bit分辨率下的最小采樣時(shí)間計(jì)算公式:當(dāng)Rs=10k時(shí),tsample>5.13μsRsRonCsMSP430Vs外部模擬信號(hào)源模擬開關(guān)導(dǎo)通電阻采樣保持電容采樣期間模擬等效電路≤2k≤40pFVcVs-Vc≤0.5LSB舉例:ADC12通道0~7,使用采樣定時(shí)器采樣方式,采樣時(shí)間=16×ADC12CLKSHT0x=2,采樣時(shí)間=16×ADC12CLKBIS#SHT0_2,&ADC12CTL0 ;Samplingtime=16×ADC12CLKBIS#SHP,&ADC12CTL1 ;Usesamplingtimer35每進(jìn)行一次采樣和轉(zhuǎn)換均需要SHI上升沿去觸發(fā)采樣定時(shí)器除了啟動(dòng)第一次采樣和轉(zhuǎn)換時(shí)需要SHI的上升沿觸發(fā)采樣定時(shí)器外,后續(xù)的采樣和轉(zhuǎn)換過程無需SHI的上升沿觸發(fā)。一旦上一次轉(zhuǎn)換完畢,緊接著自動(dòng)開始下一次的采樣和轉(zhuǎn)換過程。MSC:多次采樣和轉(zhuǎn)換控制位(僅序列或重復(fù)方式下有效)MSC=ADC12CTL0.7MSC=0:MSC=1:36采樣保持信號(hào)源選擇同步SHSx=00,ADC12SCbit軟件啟動(dòng)SHSx=01,Timer_AOutputUnit1啟動(dòng)SHSx=10,Timer_BOutputUnit0啟動(dòng)SHSx=11,Timer_BOutputUnit1啟動(dòng)ENCSHI采保源ENCSHI采保源ISSH=0ISSH=0SHSx=ADC12CTL1.10~1137MSP430F149Timer_AOutputUnit1具有內(nèi)部啟動(dòng)采樣轉(zhuǎn)換信號(hào)3816個(gè)12-bit的轉(zhuǎn)換結(jié)果存儲(chǔ)緩沖器16個(gè)8-bit的轉(zhuǎn)換存儲(chǔ)控制寄存器一一對(duì)應(yīng)ADC12轉(zhuǎn)換結(jié)果存儲(chǔ)緩沖器存儲(chǔ)指針轉(zhuǎn)換方式39ADC12轉(zhuǎn)換存儲(chǔ)控制寄存器:ADC12MCTLx參考電壓源選擇模擬輸入通道選擇通道序列結(jié)束標(biāo)志EOS=1的通道是序列轉(zhuǎn)換中最后轉(zhuǎn)換的通道40n=CSTARTADDADC12MEM0ADC12MEM1ADC12MEMnADC12MEM15ADC12MCTL0ADC12MCTL1ADC12MCTLnADC12MCTL15ADC12通道(channel)的概念A(yù)DC12通道n一個(gè)ADC12通道(簡(jiǎn)稱通道)由通道號(hào)、該通道的轉(zhuǎn)換結(jié)果存儲(chǔ)緩沖器、該通道的參考電壓源配置、該通道的模擬輸入以及通道序列結(jié)束標(biāo)志等組成。ADC12通道n可以對(duì)應(yīng)于16個(gè)模擬輸入中的任何一個(gè),不同的ADC12通道可以對(duì)應(yīng)于同一個(gè)模擬輸入,不同的ADC12通道可以有不同的參考電壓源。ADC12通道與傳統(tǒng)的模擬輸入通道有很大的不同。CSTARTADD=ADC12CTL1的最高4位的值=0~1541ADC12的通道序列(sequenceofchannels)n=CSTARTADDADC12MEMnADC12MEMn+1ADC12MEMn+2ADC12MEMn+m00011

1EOS序列開始序列結(jié)束k=(n+m)%16循環(huán)隊(duì)列例:從n號(hào)ADC12通道開始的,長(zhǎng)度=m+1的通道序列k4201n1514隊(duì)首隊(duì)尾n=(n+1)%16n=CSTARTADD00001

EOS=1有限長(zhǎng)通道序列:某些通道的EOS=111000043無限長(zhǎng)通道序列:所有通道的EOS=001n1514隊(duì)首n=(n+1)%16n=CSTARTADD00000

00000044ADC12的4種轉(zhuǎn)換方式(運(yùn)行方式)單通道單次轉(zhuǎn)換方式通道序列單輪轉(zhuǎn)換方式單通道重復(fù)轉(zhuǎn)換方式通道序列重復(fù)轉(zhuǎn)換方式45常用轉(zhuǎn)換方式——通道序列單輪轉(zhuǎn)換方式每一輪通道序列中第一通道的采樣和轉(zhuǎn)換都由定時(shí)器(TA1/TB0/TB1)啟動(dòng),然后由采樣定時(shí)器自動(dòng)啟動(dòng)后續(xù)通道的快速采樣和轉(zhuǎn)換,直到EOS=1的通道轉(zhuǎn)換完畢,完成第一輪。定時(shí)器采樣定時(shí)器采樣間隔uaubuc icuaubuc ic第一輪第二輪46ADC12offn=CSTARTADDxWaitforEnableSample,InputChannelDefinedinADC12MCTLnWaitforTriggerConvertConversionCompleted,ResultStoredintoADC12MEMn,ADC12IFGnisSetENC≠ENC=ENC=SAMPCON=SAMPCON=1SAMPCON=12×ADC12CLK1×ADC12CLKEOS.n=1ifn<15thenn=n+1elsen=0MSC=1 andSHP=1 andEOS.n=0ADC12ON=1停止條件狀態(tài)轉(zhuǎn)換圖47定時(shí)器TA1啟動(dòng)的通道序列單輪轉(zhuǎn)換方式舉例通道序列定義:通道號(hào)結(jié)果存儲(chǔ)緩沖器 模擬輸入?yún)⒖茧妷涸?EOS0 ADC12MEM0 A0 內(nèi)部2.5V 01 ADC12MEM1 A1 內(nèi)部2.5V 02 ADC12MEM2 A2 內(nèi)部2.5V 03 ADC12MEM3 A3 內(nèi)部2.5V 148定時(shí)器TA采樣定時(shí)器采樣間隔A0A1A2A3第一輪A0A1A2A3第二輪ADC12IFG3interruptADC12IFG3interrupt49BIS.B#BIT0+BIT1+BIT2+BIT3,&P6SELMOV#ADC12ON+SHT0_1+REF2_5V+REFON,&ADC12CTL0;MOV#SHP+CONSEQ_1+SHS_1,&ADC12CTL1 ;MOV.B#INCH_0+SREF_1,&ADC12MCTL0 ;MOV.B#INCH_1+SREF_1,&ADC12MCTL1 ;MOV.B#INCH_2+SREF_1,&ADC12MCTL2 ;MOV.B#INCH_3+SREF_1+EOS,&ADC12MCTL3 ;BIS#ENC,&ADC12CTL0 ;EnableADC12BIS#BIT3,&ADC12IE ;EnableADC12IFG3interruptADC12初始化編程:50Timer_A初始化編程采樣間隔=TACCR0(單位:Timerclock周期)正脈沖寬度=TACCR0-TACCR1OUT151BIS.B #BIT2,&P1SEL ;OUT1:P1.2BIS.B #BIT2,&P1DIR ;P1.2outputsMOV #INTERVAL,&TACCR0 ;TACCR0=INTERVALMOV #INTERVAL-WIDTH,&TACCR1MOV #OUTMOD_2,&TACCTL1MOV #TACLR+TASSEL_2+MC_1,&TACTL;SMCLK,upmode52ADC12模塊ADC12OVADC12TOVADC12IFG0ADC12IFG1ADC12IFG15ADC12的中斷——分3類,共18個(gè)中斷源ADC12MEMx裝入新數(shù)據(jù)中斷ADC12MEMx被覆蓋中斷(上一次轉(zhuǎn)換結(jié)果尚未讀出,新的轉(zhuǎn)換結(jié)果又寫入同一個(gè)存儲(chǔ)緩沖器中)ADC12轉(zhuǎn)換時(shí)間溢出中斷(采樣轉(zhuǎn)換間隔太短,前一次尚未轉(zhuǎn)換完畢,又啟動(dòng)新的AD轉(zhuǎn)換)中斷優(yōu)先級(jí)高中斷優(yōu)先級(jí)低如果ADC12OV/ADC12TOV中斷是最高優(yōu)先級(jí)的已請(qǐng)求的中斷,則讀寫ADC12IV寄存器將自動(dòng)復(fù)位ADC12OV/ADC12TOV53ADC12IFG0ADC12IFG1ADC12IFG15ADC12中斷控制ADC12IE0ADC12IE1ADC12IE15GIECPU0Nointerruptpending1Interruptpending0Interruptdisable1Interruptenable讀取ADC12MEMx將自動(dòng)清零中斷標(biāo)志位ADC12IFGx,ADC12IFGx也可由軟件清零。(存取ADC12IV寄存器不會(huì)清零中斷標(biāo)志位)ADC12OVADC12TOVADC12OVIEADC12TOVIEADC12CTL0.3ADC12CTL0.2優(yōu)先級(jí)總控分控0FFEEh共享中斷向量54ADC12的中斷(子)向量寄存器readonlyregister——ADC12中斷服務(wù)子程的跳轉(zhuǎn)表55注意:ADC12OV和ADC12TOV沒有相應(yīng)的可供讀取的標(biāo)志位56ADC12中斷服務(wù)子程結(jié)構(gòu)ADC12_ISR ADD&ADC12IV,PC ;addoffsettoPC RETI ;vector0:nointerrupt JMPADOV ;vector2:ADCoverflow JMPADTOV ;vector4:ADCtimingoverflow JMPADM0 ;vector6:ADC12IFG0 JMPADM1 ;vector8:ADC12IFG1 …… JMPADM14 ;vector34:ADC12IFG14ADM15 MOV&ADC12MEM15,XXX ;movresult,flagisreset …… JMPINT_ADC12 ;checkotherintpendingADM14 MOV&ADC12MEM14,XXX ;movresult,flagisreset …… JMPINT_ADC12 ;checkotherintpending …… 57ADM1 MOV&ADC12MEM1,XXX ;movresult,flagisreset …… JMPINT_ADC12 ;checkotherintpending ADM0 MOV&ADC12MEM0,XXX ;movresult,flagisreset …… RETIADTOV …… RETI ADOV …… RETI;------------------------------------------------------------------------------; InterruptVectorsUsedMSP430x13x/14x/15x/16x …… ORG0FFEEh ;ADC12Vector DWADC12_ISR ; ……58ADC12編程舉例ADC12CTL0ADC12CTL1ADC12MCTLxADC12MEMxADC12IFGADC12IEP6SELADC12IVADC12的編程結(jié)構(gòu)(不考慮TA1,TB0,TB1)59與ADC12有關(guān)的引腳60模擬開關(guān)A0..A7P6SEL.x=1必須為高阻態(tài)!P6SELBIS.B#BITx,&P6SEL61注意:應(yīng)符合硬件互斥設(shè)計(jì)原則ADC12的8個(gè)模擬輸入引腳(A0~A7)與P6數(shù)字輸入輸出引腳復(fù)用,因此當(dāng)上電復(fù)位后或編程選擇這些引腳為I/O的輸出功能的同時(shí)施加模擬輸入信號(hào),將有可能導(dǎo)致大電流流經(jīng)這些引腳的輸出電路和模擬信號(hào)源,違反了互斥設(shè)計(jì)原則。為了實(shí)現(xiàn)互斥操作,應(yīng)將與模擬信號(hào)相連接引腳的P6SEL.x置為“1”:

BIS.B#BIT.x,&P6SEL62ADC12CTL0自動(dòng)快速連續(xù)采樣轉(zhuǎn)換控制內(nèi)部參考電壓源控制位ADC12模塊供電控制溢出中斷使能控制轉(zhuǎn)換使能控制軟件啟動(dòng)采樣轉(zhuǎn)換控制8~15通道采樣時(shí)間設(shè)置0~7通道采樣時(shí)間設(shè)置63ADC12CTL1通道序列起始通道號(hào)設(shè)置采樣信號(hào)源選擇采樣方式選擇采樣保持信號(hào)反向控制位ADC12時(shí)鐘分頻設(shè)置ADC12時(shí)鐘源選擇轉(zhuǎn)換方式選擇ADC12“忙”指示位64ADC12MCTLn

參考電壓源選擇模擬輸入通道選擇通道序列結(jié)束標(biāo)志n通道屬性控制寄存器注意:ADC12CTL0、ADC12CTL1和ADC12MCTLn三種控制寄存器的大部分控制位(灰色背景)需在ENC=0的情況下才能編程修改。65ADC12控制寄存器的復(fù)位值:不使用內(nèi)部參考電壓源ADC12模塊處于斷電狀態(tài)禁止溢出中斷ENC=0(未使能狀態(tài))通道號(hào)或通道序列起始通道號(hào)=0采樣信號(hào)源為ADC12SC(軟件啟動(dòng))采樣方式:不使用采樣定時(shí)器ADC12時(shí)鐘為內(nèi)部時(shí)鐘,不分頻轉(zhuǎn)換方式:?jiǎn)瓮ǖ绬未无D(zhuǎn)換ADC12CTL1=0000hADC12MCTLn=00hADC12CTL0=0000h模擬輸入通道為A0參考電壓源:VR-=AVSS,VR+=AVCC非結(jié)束通道(EOS=0)SHT0x=0,SHT1x=0,MSC=0必須編程ADC12IE=0000h——禁止ADC12IFGx中斷66舉例00—— 全部采用復(fù)位值,查詢方式 轉(zhuǎn)換完畢后通過P1.0輸出一個(gè)負(fù)脈沖bis.b#01h,&P6SEL ;P6.0ADCoptionselectmov#ADC12ON,&ADC12CTL0 ;ADC12onbis#ENC,&ADC12CTL0 ;EnableADC12相關(guān)寄存器初始化編程:67軟件啟動(dòng)單通道單次轉(zhuǎn)換方式狀態(tài)轉(zhuǎn)換圖ADC12offn=CSTARTADDxWaitforEnableSample,InputChannelDefinedinADC12MCTLnConvertConversionCompleted,ResultStoredintoADC12MEMn,ADC12IFGnisSetADC12ON=1ENC≠SAMPCON=1ENC=1orandADC12SC=SAMPCON=12個(gè)ADC12CLK1個(gè)ADC12CLKENC=0ENC=0*ENC=0**Conversionresultisunpredictable軟件啟動(dòng)采樣期間轉(zhuǎn)換時(shí)間存儲(chǔ)等時(shí)間給模塊供電轉(zhuǎn)換完畢后ADC12SC自動(dòng)清零68#include<msp430x14x.h> ORG01100h ;ProgramStartRESET mov#0A00h,SP ;Initializestackpointer mov#WDTPW+WDTHOLD,&WDTCTL;StopWDT bis.b#01h,&P6SEL ;P6.0ADCoptionselect mov#ADC12ON,&ADC12CTL0 ;ADC12on bis#ENC,&ADC12CTL0;EnableADC12 bis.b#01h,&P1DIR ;P1.0output bis.b#01h,&P1OUT ;P1.0=1Main bis#ADC12SC,&ADC12CTL0 ;軟件啟動(dòng)采樣和轉(zhuǎn)換testIFG0bit#BIT0,&ADC12IFG ;Conversiondone? jnztestIFG0 ;No,testagain bic.b#01h,&P1OUT ;P1.0=0 bis.b#01h,&P1OUT ;P1.0=1 jmpMain69;------------------------------------------------------------------------------; InterruptVectorsUsedMSP430x13x/14x/15x/16x;------------------------------------------------------------------------------ ORG 0FFFEh;MSP430RESETVector DW RESET; END問題:請(qǐng)實(shí)驗(yàn)驗(yàn)證程序設(shè)計(jì)的正確性,如何改正?提示:采樣時(shí)間?AD轉(zhuǎn)換啟動(dòng)信號(hào)?ADC12SCautomaticallyclearedatEOC.70舉例—— 使用采樣定時(shí)器,采樣時(shí)間=16×ADC12CLK, 其它采用復(fù)位值。查詢方式。 轉(zhuǎn)換完畢后通過P1.0輸出一個(gè)負(fù)脈沖SHT0x=2,采樣時(shí)間=16×ADC12CLK71不使用內(nèi)部參考電壓源ADC12模塊處于斷電狀態(tài)禁止溢出中斷ENC=0(未使能狀態(tài))通道序列起始通道號(hào)=0采樣信號(hào)源為ADC12SC(軟件啟動(dòng))采樣方式:使用采樣定時(shí)器ADC12時(shí)鐘為內(nèi)部時(shí)鐘,不分頻轉(zhuǎn)換方式:?jiǎn)瓮ǖ绬未无D(zhuǎn)換ADC12CTL1=0000hADC12MCTLn=00hADC12CTL0=0000h模擬輸入通道為A0參考電壓源:VR-=AVSS,VR+=AVCC非結(jié)束通道(EOS=0)SHT0x=0,SHT1x=0,MSC=0bis.b#01h,&P6SEL ;P6.0ADCoptionselectmov#SHT0_2+ADC12ON,&ADC12CTL0;Samplingtime,ADC12onmov#SHP,&ADC12CTL1 ;Usesamplingtimerbis#ENC,&ADC12CTL0 ;EnableADC12相關(guān)寄存器初始化編程:72#include<msp430x14x.h> ORG01100h ;ProgramStartRESET mov#0A00h,SP ;Initializestackpointer mov#WDTPW+WDTHOLD,&WDTCTL;StopWDT bis.b#01h,&P6SEL ;P6.0ADCoptionselect mov#SHT0_2+ADC12ON,&ADC12CTL0;Samplingtime,ADC12onmov#SHP,&ADC12CTL1 ;Usesamplingtimer bis#ENC,&ADC12CTL0;EnableADC12bis.b#01h,&P1DIR ;P1.0output bis.b#01h,&P1OUT ;P1.0=1Main bis#ADC12SC,&ADC12CTL0 ;軟件啟動(dòng)采樣和轉(zhuǎn)換testIFG0bit#BIT0,&ADC12IFG ;Conversiondone? jztestIFG0 ;No,testagain bic.b#01h,&P1OUT ;P1.0=0 bis.b#01h,&P1OUT ;P1.0=1 jmpMain73;------------------------------------------------------------------------------; InterruptVectorsUsedMSP430x13x/14x/15x/16x;------------------------------------------------------------------------------ ORG 0FFFEh;MSP430RESETVector DW RESET; END74舉例01—— 使用采樣定時(shí)器,采樣時(shí)間=16×ADC12CLK, 使用ADC12IFG0中斷, 其它采用復(fù)位值。

IfA0>0.5*AVcc,P1.0set,elsereset. InMainMSP430waitsinLPM0tosavepoweruntil conversioncomplete,ADC12_ISRwillforceexitfrom LPM0inMainonreti.75bis.b#01h,&P6SEL ;P6.0ADCoptionselectmov#SHT0_2+ADC12ON,&ADC12CTL0;Samplingtime,ADC12onmov#SHP,&ADC12CTL1 ;Usesamplingtimermov#01h,&ADC12IE ;EnableADC12IFG0interruptbis#ENC,&ADC12CTL0 ;EnableADC12相關(guān)寄存器初始化編程:76#include<msp430x14x.h>;------------------------------------------------------------------------------ORG01100h;ProgramStart;------------------------------------------------------------------------------RESET mov#0A00h,SP;Initializestackpointer mov#WDTPW+WDTHOLD,&WDTCTL;StopWDT bis.b#01h,&P6SEL;P6.0ADCoptionselect mov#SHT0_2+ADC12ON,&ADC12CTL0;Samplingtime,ADC12onmov#SHP,&ADC12CTL1;Usesamplingtimermov#01h,&ADC12IE;EnableADC12IFG0interruptbis#ENC,&ADC12CTL0;EnableADC12bis.b#01h,&P1DIR;P1.0outputMain bis#ADC12SC,&ADC12CTL0;軟件啟動(dòng)采樣和轉(zhuǎn)換bis#CPUOFF+GIE,SR;LPM0,ADC12_ISRwillforceexitjmpMain;Again77;------------------------------------------------------------------------------ADC12_ISR ;ExitanyLPMxonreti bic.b#01h,&P1OUT;P1.0=0cmp#07FFh,&ADC12MEM0;ADC12MEM=A0>0.5AVcc?jloADC12_ISR_1;bis.b#01h,&P1OUT;P1.0=1ADC12_ISR_1bic#CPUOFF,0(SP);ExitanyLPM0onretireti; ;------------------------------------------------------------------------------;InterruptVectorsUsedMSP430x13x/14x/15x/16x;------------------------------------------------------------------------------ORG0FFFEh;MSP430RESETVectorDWRESET;ORG0FFEEh;ADC12VectorDWADC12_ISR;END78舉例02—— 使用內(nèi)部2.5V參考電壓源, 使用采樣定時(shí)器,采樣時(shí)間=16×ADC12CLK, 其它采用復(fù)位值。查詢方式。 轉(zhuǎn)換完畢后通過P1.0輸出一個(gè)負(fù)脈沖79SREF2SREF1SREF0001#SREF_180相關(guān)寄存器初始化編程: bis.b#BIT0,&P6SEL ;EnableA/DchannelA0 mov#REFON+REF2_5V+ADC12ON+SHT0_2,&ADC12CTL0;turnon2.5Vref,setsamptime mov.b#SREF_1,&ADC12MCTL0;Vr+=Vref+ mov#SHP,&ADC12CTL1;Usesamplingtimer mov#03600h,R15 ;Delayforneededrefstart-up.L$1 decR15 ;Seedatasheetfordetails. jnzL$1 bis#ENC,&ADC12CTL0 ;Enableconversions81#include<msp430x14x.h>;------------------------------------------------------------------------------ORG01100h ;ProgramStart;------------------------------------------------------------------------------RESET mov#0A00h,SP ;Initializestackpointer mov#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdog bis.b#BIT0,&P6SEL ;EnableA/DchannelA0 mov#REFON+REF2_5V+ADC12ON+SHT0_2,&ADC12CTL0;turnon2.5Vref,setsamptime mov.b#SREF_1,&ADC12MCTL0;Vr+=Vref+ mov#SHP,&ADC12CTL1;Usesamplingtimer mov#03600h,R15 ;Delayforneededrefstart-up.L$1 decR15 ;Seedatasheetfordetails. jnzL$1 ; bis#ENC,&ADC12CTL0;Enableconversions82 bis.b#01h,&P1DIR ;P1.0output bis.b#01h,&P1OUT ;P1.0=1Main bis#ADC12SC,&ADC12CTL0 ;軟件啟動(dòng)采樣和轉(zhuǎn)換testIFG0bit#BIT0,&ADC12IFG ;Conversiondone? jztestIFG0 ;No,testagain bic.b#01h,&P1OUT ;P1.0=0 bis.b#01h,&P1OUT ;P1.0=1 jmpMain;------------------------------------------------------------------------------;InterruptVectors;------------------------------------------------------------------------------ORG0FFFEh;MSP430RESETVectorDWRESET;END83舉例04—— 使用采樣定時(shí)器, 采樣時(shí)間=1024×ADC12CLK, 使用ADC12IFG0中斷, 其它采用復(fù)位值,并將轉(zhuǎn)換結(jié)果轉(zhuǎn)存到R5中。SHT0x=15,采樣時(shí)間=1024×ADC12CLK84#include<msp430x14x.h>;------------------------------------------------------------------------------ORG01100h;ProgramStart;------------------------------------------------------------------------------RESET mov#0A00h,SP;Initializestackpointer mov#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdog

bis.b#BIT0,&P6SEL ;EnableA/DchannelA0 mov#ADC12ON+SHT0_15,&ADC12CTL0 ;TurnonADC12,setSHT0forlongersamplingmov#SHP,&ADC12CTL1;Usesamplingtimerbis#BIT0,&ADC12IE;EnableADC12IFG.0interruptbis#ENC,&ADC12CTL0;Enableconversions85Main bis#ADC12SC,&ADC12CTL0;Startconversions bis#LPM0+GIE,SR ;Waitforconversioncompletion ;Enableinterrupts nop ;OnlyrequiredforCSPY jmpMain ;SETBREAKPOINTHERE;------------------------------------------------------------------------------ADC12ISR;InterruptServiceRoutineforADC12;------------------------------------------------------------------------------ mov&ADC12MEM0,R5 ;Moveresult,IFGisreset bic#CPUOFF,0(SP) ;Returnactive reti86;-----------------------------------------------------------------------------; InterruptVectors;----------------------------------------------------------------------------- ORG 0FFFEh ;MSP430RESETVector DW RESET ; ORG 0FFEEh ;ADC12InterruptVector DW ADC12ISR ; END87舉例05—— 使用外部正參考電壓源VeREF+, 使用采樣定時(shí)器,采樣時(shí)間=16×ADC12CLK, 其它采用復(fù)位值。查詢方式。 轉(zhuǎn)換完畢后將轉(zhuǎn)換結(jié)果轉(zhuǎn)存到R5中。相關(guān)寄存器初始化編程:bis.b#BIT0,&P6SEL ;EnableA/DchannelA0mov#ADC12ON+SHT0_2,&ADC12CTL0 ;turnonADC12,setsamptimemov#SHP,&ADC12CTL1 ;Usesamplingtimermov.b#SREF_2,&ADC12MCTL0 ;Vr+=VeREF+(external)bis#ENC,&ADC12CTL0 ;Enableconversions88#include<msp430x14x.h>;------------------------------------------------------------------------------ORG01100h;ProgramStart;------------------------------------------------------------------------------RESET mov#0A00h,SP;Initializestackpointer mov#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdog bis.b#BIT0,&P6SEL;EnableA/DchannelA0 mov#ADC12ON+SHT0_2,&ADC12CTL0 ;turnonADC12,setsamptime mov#SHP,&ADC12CTL1;Usesamplingtimer mov.b#SREF_2,&ADC12MCTL0;Vr+=VeREF+(external) bis#ENC,&ADC12CTL0;Enableconversions89Main bis#ADC12SC,&ADC12CTL0 ;StartconversionstestIFG bit#BIT0,&ADC12IFG ;Conversiondone? jztestIFG ;No,testagain mov&ADC12MEM0,R5;Moveresult jmpMain ;SETBREAKPOINTHERE;------------------------------------------------------------------------------; InterruptVectors;------------------------------------------------------------------------------ ORG 0FFFEh ;MSP430RESETVector DW RESET ; END90舉例06—— 重復(fù)通道序列轉(zhuǎn)換方式,使用采樣定時(shí)器, 采樣時(shí)間=256×ADC12CLK, 使用ADC12IFG.3中斷, 其它采用復(fù)位值,并將轉(zhuǎn)換結(jié)果轉(zhuǎn)存到RAM中。SHT0x=8,采樣時(shí)間=256×ADC12CLK91通道序列定義:通道號(hào)結(jié)果存儲(chǔ) 模擬輸入 RAM 緩沖器 通道號(hào)

0 ADC12MEM0 A0 0x200~0x20E1 ADC12MEM1 A1 0x210~0x21E2 ADC12MEM2 A2 0x220~0x22E3 ADC12MEM3 A3 0x230~0x23E注意:通道號(hào)與模擬輸入通道號(hào)可以不一致。因此上述的通道定義也可以如下:通道號(hào)結(jié)果存儲(chǔ) 模擬輸入 RAM 緩沖器 通道號(hào)

0 ADC12MEM0 A3 0x200~0x20E1 ADC12MEM1 A1 0x210~0x21E2 ADC12MEM2 A2 0x220~0x22E3 ADC12MEM3 A0 0x230~0x23E92通道號(hào)結(jié)果存儲(chǔ) 模擬輸入 RAM 緩沖器 通道號(hào)

0 ADC12MEM0 A1 0x200~0x20E1 ADC12MEM1 A1 0x210~0x21E2 ADC12MEM2 A3 0x220~0x22E3 ADC12MEM3 A3 0x230~0x23E通道號(hào)結(jié)果存儲(chǔ) 模擬輸入 RAM 緩沖器 通道號(hào)

5 ADC12MEM5 A6 0x200~0x20E6 ADC12MEM6 A0 0x210~0x21E7 ADC12MEM7 A5 0x220~0x22E8 ADC12MEM8 A3 0x230~0x23E93ADC12offn=CSTARTADDxWaitforEnableSample,InputChannelDefinedinADC12MCTLnConvertConversionCompleted,ResultStoredintoADC12MEMn,ADC12IFGnisSetENC≠SAMPCON=1ENC=1orandADC12SC=SAMPCON=1×ADC12CLKENC=0andEOS.n=1ifEOS.n=1thenn=CSTARTADDxelse{ifn<15thenn=n+1elsen=0}MSC=1 andSHP=1 and(ENC=1orEOS.n=0)ADC12ON=1軟件啟動(dòng)12×ADC12CLK停止條件通道序列重復(fù)轉(zhuǎn)換方式狀態(tài)轉(zhuǎn)換圖——由軟件啟動(dòng)第一輪首通道(通道0)的采樣和轉(zhuǎn)換,然后由采樣定時(shí)器自動(dòng)實(shí)現(xiàn)后續(xù)通道的快速采樣和轉(zhuǎn)換,到EOS=1的通道(通道3)轉(zhuǎn)換完畢后又立即從通道0開始新一輪的采樣和轉(zhuǎn)換,直到停止條件滿足為止。期間無需CPU的干預(yù)。EOS.3=1CSTARTADDx=094#include<msp430x14x.h>A0resultEQU0200h;ChannelA0resultsA1resultEQU0210H;ChannelA1resultsA2resultEQU0220H;ChannelA2resultsA3resultEQU0230H;ChannelA3results;------------------------------------------------------------------------------ORG01100h ;ProgramStart;------------------------------------------------------------------------------RESET mov#0A00h,SP ;Initializestackpointer mov#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdog clrR5 ;Clearpointer 95 bis.b#BIT0+BIT1+BIT2+BIT3,&P6SEL;EnableA/Dinputs mov#SHT0_8+MSC+ADC12ON,&ADC12CTL0 mov#SHP+CONSEQ_3,&ADC12CTL1 mov#BIT3,&ADC12IE ;EnableADC12IFG.3 mov.b#INCH_0,ADC12MCTL0 ;A0goestoMEM0 mov.b#INCH_1,ADC12MCTL1 ;A1goestoMEM1 mov.b#INCH_2,ADC12MCTL2 ;A2goestoMEM2 mov.b#EOS+INCH_3,ADC12MCTL3 ;A3goestoMEM3,endofsequenceMain bis#ENC,&ADC12CTL0 ;Enableconversions bis#ADC12SC,&ADC12CTL0;軟件啟動(dòng)采樣和轉(zhuǎn)換 bis#CPUOFF+GIE,SR ;HoldinLPM0,Enableinterrupts nop;軟件啟動(dòng)后,通道序列的采樣和轉(zhuǎn)換無需CPU的干預(yù)96;------------------------------------------------------------------------------ADC12ISR ;當(dāng)通道3轉(zhuǎn)換完畢后進(jìn)入該中斷子程 mov&ADC12MEM0,A0result(R5);MoveresultstoRAM mov&ADC12MEM1,A1result(R5);MoveresultstoRAM mov&ADC12MEM2,A2result(R5);MoveresultstoRAM mov&ADC12MEM3,A3result(R5);MoveresultstoRAM,IFGreset incdR5 ;Incrementresultstablepointer and#0Eh,R5 ;Modulopointer reti;------------------------------------------------------------------------------;InterruptVectors;------------------------------------------------------------------------------ORG0FFFEh;MSP430RESETVectorDWRESET;ORG0FFEEh;ADC12InterruptVectorDWADC12ISR;END97問題:請(qǐng)實(shí)驗(yàn)驗(yàn)證程序設(shè)計(jì)的正確性,如何改正?98舉例07—— 單通道重復(fù)轉(zhuǎn)換方式,使用采樣定時(shí)器, 采樣時(shí)間=256×ADC12CLK, 使用ADC12IFG.0中斷, 其它采用復(fù)位值,并將轉(zhuǎn)換結(jié)果轉(zhuǎn)存到RAM中。SHT0x=8,采樣時(shí)間=256×ADC12CLK99#include<msp430x14x.h>ResultsEQU0200h;BeginingofResultstable;------------------------------------------------------------------------------ORG01100h;ProgramStart;------------------------------------------------------------------------------RESET mov#0A00h,SP;Initializestackpointer mov#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdog clrR5;Clearresultstablepointer bis.b#BIT0,&P6SEL;EnableA/DchannelA0 mov#SHT0_8+MSC+ADC12ON,&ADC12CTL0 mov#SHP+CONSEQ_2,&ADC12CTL1 mov#BIT0,&ADC12IE;EnableADC12IFG.0Main bis#ENC,&ADC12CTL0 ;Enableconversions bis#ADC12SC,&ADC12CTL0;軟件啟動(dòng)采樣和轉(zhuǎn)換 bis#CPUOFF+GIE,SR ;HoldinLPM0,Enableinterrupts nop;軟件啟動(dòng)后,通道序列的采樣和轉(zhuǎn)換無需CPU的干預(yù)100;------------------------------------------------------------------------------ADC12ISR;InterruptServiceR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論