第6章MSP430單片機的輸入輸出模塊_第1頁
第6章MSP430單片機的輸入輸出模塊_第2頁
第6章MSP430單片機的輸入輸出模塊_第3頁
第6章MSP430單片機的輸入輸出模塊_第4頁
第6章MSP430單片機的輸入輸出模塊_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、合肥工業(yè)大學DSP及MSP430實驗室 MSP430單片機原理與應用單片機原理與應用 http:/ MSP430單片機的輸入輸出模塊 單片機中的輸入/輸出模塊是供信號輸入、輸出所用的模塊化單元。MSP430單片機的片內輸入/輸出模塊非常豐富,典型的輸入/輸出模塊有:通用I/O端口、模數(shù)轉換模塊、比較器、定時器與段式液晶驅動模塊。本章重點講述各典型輸入/輸出模塊的結構、原理及功能,并針對各個模塊給出簡單的應用例程。通用通用IO端口端口(GPIO)6.1模數(shù)轉換模塊模數(shù)轉換模塊(ADC12)6.2比較器比較器B(Comp_B)6.3定時器定時器6.4LCD_C段式液晶驅動模塊段式液晶驅動模塊6.5

2、6.1 通用IO端口6.1.1 MSP430端口概述 通用I/O端口是MSP430單片機最重要也是最常用的外設模塊。通用I/O端口不僅可以直接用于輸入/輸出,而且可以為MSP430單片機應用系統(tǒng)提供必要的邏輯控制信號。 MSP430F5xx/6xx系列單片機最多可以提供12個通用I/O端口(P1P11和PJ),大部分端口有8個引腳,少數(shù)端口引腳數(shù)少于8個。每個I/O引腳都可以被獨立地設置為輸入或者輸出引腳,并且每個I/O引腳都可以被獨立地讀取或者寫入,所有的端口寄存器都可以被獨立地置位或者清零。 P1和P2引腳具有中斷能力。從P1和P2端口的各個I/O引腳引入的中斷可以獨立地被使能,并且被設置

3、為上升沿或者下降沿觸發(fā)中斷。所有P1端口的I/O引腳的中斷都來源于同一個中斷向量P1IV。同理,P2端口的中斷源都來源于另一個中斷向量P2IV。 可以對每個獨立的端口進行字節(jié)訪問,或者將兩個結合起來進行字訪問。端口組合P1和P2、P3和P4、P5和P6、P7和P8可結合起來稱為PA、PB、PC和PD端口。當進行字操作寫入PA口時,所有的16位數(shù)據(jù)都被寫入這個端口;利用字節(jié)操作寫入PA端口低字節(jié)時,高字節(jié)保持不變;利用字節(jié)指令寫入PA端口的高字節(jié)時,低字節(jié)保持不變。其他端口也是一樣。當寫入的數(shù)據(jù)長度小于端口的最大長度時,那些沒有用到的位保持不變。應用這個規(guī)則來訪問所有端口,除了中斷向量寄存器P1

4、IV和P2IV,它們只能進行字節(jié)操作。6.1 通用IO端口6.1.2 通用IO端口輸出特性 MSP430單片機在默認輸出驅動(PxDS.y=0,即欠驅動強度)且單片機供電電壓VCC為3V條件下,端口低電平和高電平的輸出特性分別如圖6.1.1和圖6.1.2所示,其中,電流輸入為正,輸出為負。 圖6.1.1 低電平輸出特性(PxDS.y=0)圖6.1.2 高電平輸出特性(PxDS.y=0)6.1 通用IO端口6.1.2 通用IO端口輸出特性 當PxDS.y控制位被配置為1時,即單片機端口被配置為強驅動模式。在強驅動模式下,端口的低電平和高電平輸出特性分別如圖6.1.5和圖6.1.6所示。 圖6.1

5、.5 低電平輸出特性(PxDS.y=1)圖6.1.6 高電平輸出特性(PxDS.y=1)6.1 通用IO端口6.1.3 端口P1和P2 端口P1和P2具有輸入/輸出、中斷和外部模塊功能,可以通過設置它們各自的9個控制寄存器來實現(xiàn)這些功能。下面所述Px代表P1和P2。 1輸入寄存器PxIN 輸入寄存器是CPU掃描I/O引腳信號的只讀寄存器,用戶不能對其寫入,只能通過讀取該寄存器的內容獲取I/O端口的輸入信號,此時引腳的方向必須選定為輸入。輸入寄存器中某一位為0,表明該位輸入為低;某一位為1,表明該位輸入為高。 2輸出寄存器PxOUT 該寄存器為I/O端口的輸出緩沖寄存器。其內容可以像操作內存數(shù)據(jù)

6、一樣寫入,以達到改變I/O口輸出狀態(tài)的目的。在讀取時,輸出緩存的內容與引腳方向定義無關。改變方向寄存器的內容,輸出緩存的內容不受影響。 0:輸出為低; 1:輸出為高。6.1 通用IO端口6.1.3 端口P1和P2 3方向寄存器PxDIR 相互獨立的8位分別定義了8個引腳的輸入/輸出方向。8位在PUC之后都被復位。使用輸入或輸出功能時,應先定義端口的方向,輸入/輸出才能滿足設計者的要求。作為輸入時,只能讀;作為輸出時,可讀可寫。 0:輸入模式; 1:輸出模式。 4上拉/下拉電阻使能寄存器PxREN 該寄存器的每一位可以使能相應I/O引腳的上拉/下拉電阻。該寄存器需和輸出寄存器配合使用,才能完成上

7、拉/下拉電阻的配置。 0:上拉/下拉電阻禁止; 1:上拉/下拉電阻使能。 5輸出驅動能力調節(jié)寄存器PxDSPxDS寄存器的每一位可使相關引腳選擇全驅動模式和次驅動模式(減弱驅動能力)。默認的是次驅動模式。 0:次驅動模式; 1:全驅動模式。 6功能選擇寄存器PxSEL P1和P2端口還有其他片內外設功能,為了減少引腳,將這些功能與芯片外的聯(lián)系通過復用P1和P2引腳的方式來實現(xiàn)。PxSEL用來選擇引腳的I/O端口功能與外圍模塊功能。 0:選擇引腳為普通I/O功能; 1:選擇引腳為外圍模塊功能。6.1 通用IO端口6.1.3 端口P1和P2 7中斷使能寄存器PxIE 該寄存器的8位與該端口的8個引

8、腳一一對應,其中每一位用以控制相應引腳的中斷允許。 8中斷觸發(fā)邊沿選擇寄存器PxIES 如果允許Px口的某個引腳中斷,還需定義該引腳的中斷觸發(fā)沿。該寄存器的8位分別定義了Px口的8個引腳的中斷觸發(fā)沿。 9 中斷標志寄存器PxIFG 該寄存器有8個標志位,它們含有相應引腳是否有待處理中斷的信息,即相應引腳是否有中斷請求。如果Px的某個引腳允許中斷,同時選擇上升沿,則當該引腳發(fā)生由低電平向高電平跳變時,PxIFG的相應位就會置位,表明該引腳上有中斷事件發(fā)生。6.1 通用IO端口6.1.4 端口P3P11 這些端口沒有中斷能力,其余功能與P1、P2端口一樣,能實現(xiàn)輸入/輸出功能和外圍模塊功能。每個端

9、口有6個寄存器供用戶使用,用戶可通過這6個寄存器對它們進行訪問和控制。每個端口的6個寄存器分別為:輸入寄存器(PxIN)、輸出寄存器(PxOUT)、方向選擇寄存器(PxDIR)、輸出驅動能力調節(jié)寄存器(PxDS)、上拉/下拉電阻使能寄存器(PxREN)和功能選擇寄存器(PxSEL)。具體用法同P1和P2端口。6.1 通用IO端口6.1.5 端口的應用 端口是單片機中最經(jīng)常使用的外設資源。一般在程序的初始化階段對端口進行配置。配置時,先配置功能選擇寄存器PxSEL,若為I/O端口功能,則繼續(xù)配置方向寄存器PxDIR;若為輸入,則繼續(xù)配置中斷使能寄存器PxIE;若允許中斷,則繼續(xù)配置中斷觸發(fā)沿選擇

10、寄存器PxIES。 需要注意的是,P1和P2端口的中斷為多源中斷,即P1端口的8位共用一個中斷向量P1IV,P2端口的8位也共用一個中斷向量P2IV。當Px端口上的8個引腳中的任何一個引腳有中斷觸發(fā)時,都會進入同一個中斷服務程序。在中斷服務程序中,首先應該通過PxIFG判斷是哪一個引腳觸發(fā)的中斷,再執(zhí)行相應的程序,最后還要用軟件清除相應的PxIFG標志位。6.1 通用IO端口【例6.1.1】 在MSP430單片機系統(tǒng)中,P1.5、P1.6、P1.7發(fā)生中斷后執(zhí)行不同的代碼。#pragma vector=PORT1_VECTOR / P1口中斷源_ _interrupt void Port_1(

11、void) / 聲明一個中斷服務程序,名為Port_1() if(P1IFG&BIT5) / 判斷P1中斷標志第5位 / 在這里寫P1.5中斷服務程序 if(P1IFG&BIT5) / 判斷P1中斷標志第6位 / 在這里寫P1.6中斷服務程序 if(P1IFG&BIT5) / 判斷P1中斷標志第7位 / 在這里寫P1.7中斷服務程序 P1IFG=0; / 清除P1所有中斷標志位6.1 通用IO端口【例6.1.2】 利用軟件循環(huán)查詢P1.4引腳的輸入狀態(tài),若P1.4輸入為高電平,則使P1.0輸出高電平;若P1.4輸入為低電平,則使P1.0輸出低電平。該程序采用查詢的方式檢測按鍵是否被按下。為調試

12、方便,P1.0引腳可接LED。#include void main(void) WDTCTL = WDTPW + WDTHOLD; / 關閉看門狗 P1DIR |= BIT0; / 設P1.0為輸出方向 while (1) / 循環(huán)查詢P1.4引腳輸入狀態(tài) if (P1IN & BIT4) P1OUT |= BIT0; / 如果P1.4輸入為高,則使P1.0輸出高 else P1OUT &= BIT0; / 否則,使P1.0輸出低電平 6.1 通用IO端口【例6.1.3】 利用按鍵外部中斷方式,實現(xiàn)反轉P1.0引腳輸出狀態(tài)。P1.4選擇GPIO功能,內部上拉電阻使能,且使能中斷。當P1.4引腳

13、上產(chǎn)生下降沿時,觸發(fā)P1端口外部中斷,在中斷服務程序中,反轉P1.0端口輸出狀態(tài)。按鍵外部中斷實時性較高,用途非常廣泛,可以處理對響應時間要求比較苛刻的事件,在【例6.1.2】程序中,若主循環(huán)一次的時間比較長,P1.4引腳置位時間比較短,則有可能在一個主循環(huán)周期內漏掉一次或多次P1.4引腳置位事件。因此在這種情況下,若采用【例6.1.2】端口查詢的方式,可能就無法滿足設計的要求,應該采用按鍵外部中斷的方式實現(xiàn)。#include void main(void) WDTCTL = WDTPW + WDTHOLD; / 關閉看門狗 P1DIR |= BIT0; / 設置P1.0引腳為輸出 P1REN

14、 |= BIT4; P1OUT |= BIT4; / 以上兩句組合功能為使能P1.4引腳上拉電阻 P1IES |= BIT4; / P1.4中斷下降沿觸發(fā) P1IFG &= BIT4; / 清除P1.4中斷標志位 P1IE |= BIT4; / P1.4中斷使能 _ _bis_SR_register(LPM4_bits + GIE); / 進入LPM4,并使能全局中斷#pragma vector=PORT1_VECTOR_ _interrupt void Port_1(void) P1OUT = BIT0; / 反轉P1.0端口輸出狀態(tài) P1IFG &= BIT4; / 清除P1.4中斷標志位

15、6.2 模數(shù)轉換模塊(ADC12)6.2.1 模數(shù)轉換概述 在MSP430單片機的實時控制和智能儀表等實際應用系統(tǒng)中,常常會遇到連續(xù)變化的物理量,如溫度、流量、壓力和速度等。利用傳感器把這些物理量檢測出來,轉換為模擬電信號,再經(jīng)過模數(shù)轉換模塊(ADC)轉換成數(shù)字量,模擬量才能夠被MSP430單片機處理和控制。 1模數(shù)轉換基本過程 首先連續(xù)時間輸入信號x(t)輸入ADC的采樣保持器中,ADC每隔Ts(采樣周期)讀出一次x(t)的采樣值,對此采樣值進行量化。量化的過程是將此信號轉換成離散時間、離散幅度的多電平信號。從數(shù)學角度理解,量化是把一個連續(xù)幅度值的無限數(shù)集合映射到一個離散幅度值的有限數(shù)集合。

16、在進行ADC轉換時,必須把采樣電壓表示為某個規(guī)定的最小數(shù)量單位的整數(shù)倍,所取的最小數(shù)量單位叫做量化單位,用表示。顯然,數(shù)字信號最低有效位(LSB)的1所代表的數(shù)量大小就等于。把量化的結果用代碼表示出來,這個過程稱為編碼。這些代碼就是ADC轉換的輸出結果。6.2 模數(shù)轉換模塊(ADC12)2ADC的位數(shù)ADC的位數(shù)為ADC模塊采樣轉換后輸出代碼的位數(shù)。例如,一個12位的ADC模塊,采樣轉換后的代碼即為12位,表示數(shù)值的取值范圍為04095。3分辨率分辨率表示輸出數(shù)字量變化的一個相鄰數(shù)碼所需輸入模擬電壓的變化量。它定義為轉換器的滿刻度電壓與2n的比值,其中n為ADC的位數(shù)。因此,分辨率與ADC的位

17、數(shù)有關。例如,一個8位ADC模塊的分辨率為滿刻度電壓的1/256。如果滿刻度輸入電壓為5V,該ADC模塊的分辨率即為5V/256=20mV。分辨率代表了ADC模塊對輸入信號的分辨能力,一般來說,ADC模塊位數(shù)越高,數(shù)據(jù)采集的精度就越高。4量化誤差量化誤差是由于用有限數(shù)字對模擬數(shù)值進行離散取值(量化)而引起的誤差。因此,量化誤差理論上為一個單位分辨率,即1/2LSB。量化誤差是無法消除的,但是,通過提高分辨率可以減少量化誤差。6.2 模數(shù)轉換模塊(ADC12) 5采樣周期 采樣周期是每兩次采樣之間的時間間隔。采樣周期包括采樣保持時間和轉換時間。采樣保持時間是指ADC模塊完成一次采樣和保持的時間,

18、轉換時間是指ADC模塊完成一次模數(shù)轉換所需要的時間。在MSP430單片機的ADC12模塊中,采樣保持時間可通過控制寄存器進行設置,而轉換時間一般需要13個ADCCLK的時間。 6采樣頻率 采樣頻率,也稱為采樣速率或者采樣率,定義為每秒從連續(xù)信號中提取并組成離散信號的采樣個數(shù),單位為赫茲(Hz)。采樣頻率的倒數(shù)是采樣周期。為了確定對一個模擬信號的采樣頻率,在此簡單介紹采樣定理。采樣定理又稱香農采樣定理或者奈奎斯特采樣定理,即在進行模數(shù)信號的轉換過程中,當采樣頻率fs.max大于信號中最高頻率分量fmax的2倍時(fs.max2fmax),采樣之后的數(shù)字信號能保留原始信號中的信息。在一般應用中,采

19、樣頻率應為被采樣信號中最高頻率的510倍。6.2 模數(shù)轉換模塊(ADC12) 7采樣保持電路 采樣保持電路(S/H或者SH)是模數(shù)轉換系統(tǒng)中的一種重要電路,其作用是采集模擬輸入電壓在某一時刻的瞬時值,并在模數(shù)轉換器進行轉換期間保持輸出電壓不變,以供模數(shù)轉換。該電路存在的原因在于模數(shù)轉換需要一定時間,在轉換過程中,如果送給ADC的模擬量發(fā)生變化,就不能保證采樣的精度。為了簡單起見,在此只分析單端輸入ADC的采樣保持電路,如圖6.2.1所示。圖6.2.1 采樣保持電路示意圖 采樣保持電路有兩種工作狀態(tài):采樣狀態(tài)和保持狀態(tài)。當控制開關S閉合時,輸出跟隨輸入變化,稱為采樣狀態(tài);當控制開關S斷開時,由保

20、持電容C維持該電路的輸出不變,稱為保持狀態(tài)。6.2 模數(shù)轉換模塊(ADC12) 8 多通道同步采樣和分時復用 大多數(shù)單片機都集成了8個以上的ADC通道,這些單片機內部的ADC模塊大多都是多通道分時復用的結構,其內部其實只有一個ADC內核,依靠增加模擬開關的方法輪流使用ADC內核,所以可以有多個ADC的輸入通道。MSP430單片機也采用這種結構,如圖6.2.2所示。 同步采樣ADC實際就是多個完整獨立的ADC。如圖6.2.3所示為三通道同步采樣ADC的示意圖。每一組通道都有各自獨立的采樣保持電路和ADC內核,3個ADC模塊共用控制電路和輸入/輸出接口。圖6.2.2 MSP430單片機集成的ADC

21、12模塊局部 圖6.2.3 三通道同步采樣ADC示意圖 6.2 模數(shù)轉換模塊(ADC12)6.2.2 MSP430單片機ADC12模塊介紹ADC12模塊的特性有: 高達200ksps的最大轉換率; 無數(shù)據(jù)丟失的單調的12位轉換器; 采樣周期可由軟件或定時器編程控制的采樣保持功能; 軟件或定時器啟動轉換; 可通過軟件選擇片內參考電壓(MSP430F54xx:1.5V或2.5V,其他芯片:1.5V、2.0V或2.5V,注意此處只限MSP430F5xx/6xx系列單片機); 可通過軟件選擇內部或外部參考電壓; 高達12路可單獨配置的外部輸入通道; 可為內部溫度傳感器、AVCC和外部參考電壓分配轉換通

22、道; 正或負參考電壓通道可獨立選擇; 轉換時鐘源可選; 具有單通道單次、單通道多次、序列通道單次和序列通道多次的轉換模式; ADC內核和參考電壓都可獨立關閉; 具有18路快速響應的ADC中斷; 具有16個轉換結果存儲寄存器。6.2 模數(shù)轉換模塊(ADC12) ADC12模塊的結構框圖如圖6.2.4所示。ADC12模塊支持快速的12位模數(shù)轉換。該模塊具有一個12位的逐次逼近(SAR)內核、模擬輸入多路復用器、參考電壓發(fā)生器、采樣及轉換所需的時序控制電路和16個轉換結果緩沖及控制寄存器。轉換結果緩沖及控制寄存器允許在沒有CPU干預的情況下,進行多達16路ADC采樣、轉換和保存。圖6.2.4 ADC

23、12模塊結構框圖6.2 模數(shù)轉換模塊(ADC12)6.2.3 MSP430單片機ADC12模塊操作1ADC12的轉換模式ADC12模塊有4種轉換模式,可以通過CONSEQx控制位進行選擇,具體轉換模式說明如表6.2.1所示。ADC12CONSEQx轉換模式操作說明00單通道單次轉換一個單通道轉換一次01序列通道單次轉換一個序列多個通道轉換一次10單通道多次轉換一個單通道重復轉換11序列通道多次轉換一個序列多個通道重復轉換表6.2.1 各種轉換模式說明列表6.2 模數(shù)轉換模塊(ADC12)(1)單通道單次轉換模式該模式對單一通道實現(xiàn)單次轉換。模數(shù)轉換結果被寫入由CSTARTADDx位定義的存儲寄

24、存器ADC12MEMx中。單通道單次轉換的流程圖如圖6.2.6所示。當用戶利用軟件使ADC12SC啟動轉換時,下一次轉換可以通過簡單地設置ADC12SC位來啟動。當有其他任何觸發(fā)源用于轉換時,ADC12ENC位必須在等待觸發(fā)信號之前置位(上升沿)。其他的采樣輸入信號將在ADC12ENC復位并置位之前被忽略?!纠?.2.1】 單通道單次轉換舉例。分析:本實例采用單通道單次轉換模式,參考電壓對選擇:VR+=AVCC、VR-=AVSS,ADC12采樣參考時鐘源選擇內部默認參考時鐘ADC12OSC。在主函數(shù)中,ADC12在采樣轉換的過程中,MSP430單片機進入低功耗模式以降低功耗,當采樣轉換完成,會

25、自動進入ADC12中斷服務程序,喚醒CPU并讀取采樣轉換結果。最終實現(xiàn)當輸入模擬電壓信號大于0.5倍AVCC時,使P1.0引腳輸出高電平;否則,使P1.0引腳輸出低電平。下面給出實例程序: #include void main(void) WDTCTL = WDTPW + WDTHOLD; / 關閉看門狗 ADC12CTL0 = ADC12SHT02 + ADC12ON; / 選擇采樣周期,打開ADC12模塊 ADC12CTL1 = ADC12SHP; / 使用采樣定時器作為采樣觸發(fā)信號 ADC12IE = 0 x01; / 使能ADC采樣中斷 ADC12CTL0 |= ADC12ENC; /

26、 置位ADC12ENC控制位 P6SEL |= 0 x01; / 將P6.0引腳設為ADC輸入功能 P1DIR |= 0 x01; / 將P1.0引腳設為輸出功能 while (1) ADC12CTL0 |= ADC12SC; / 啟動采樣轉換_ _bis_SR_register(LPM0_bits + GIE);/ 進入LPM0并啟用全局中斷 6.2 模數(shù)轉換模塊(ADC12)#pragma vector = ADC12_VECTOR_ _interrupt void ADC12_ISR(void) switch(_ _even_in_range(ADC12IV,34) case 0: br

27、eak; / Vector 0: 無中斷 case 2: break; / Vector 2: ADC溢出中斷 case 4: break; / Vector 4: ADC轉換時間溢出中斷 case 6: / Vector 6: ADC12IFG0 if (ADC12MEM0 = 0 x7ff) / ADC12MEM = A0 0.5AVcc? P1OUT |= BIT0; / P1.0 = 1 else P1OUT &= BIT0; / P1.0 = 0 _ _bic_SR_register_on_exit(LPM0_bits); / 退出低功耗模式0 case 8: break; / Ve

28、ctor 8: ADC12IFG1 case 34: break; / Vector 34: ADC12IFG14 default: break; 6.2 模數(shù)轉換模塊(ADC12)(2)序列通道單次轉換模式該模式對序列通道做單次轉換。ADC12轉換結果將順序寫入由CSTARTADDx位定義的以A D C M E M x 開 始 的 轉 換 存 儲 器 中 。 當 由ADC12MCTLx寄存器中ADC12EOS位定義的最后一個通道轉換完成之后,整個序列通道轉換完成。序列通道單次轉換的流程圖如圖6.2.7所示。當使用ADC12SC位啟動轉換時,下一次轉換可以通過簡單地設置ADC12SC位來啟動。

29、當有其他任何觸發(fā)源用于開始轉換,ADC12ENC位必須在等待觸發(fā)信號前置位(上升沿)。其他的采樣輸入信號將在ADC12ENC復位并置位之前被忽略。圖6.2.7 序列通道單次轉換流程圖6.2 模數(shù)轉換模塊(ADC12)【例6.2.2】 序列通道單次轉換舉例。分析:本實例采用序列通道單次轉換模式,選擇的采樣序列通道為A0、A1、A2和A3。每個通道都選擇AVCC和AVSS作為參考電壓,采樣結果被順序存儲在ADC12MEM0、ADC12MEM1、ADC12MEM2和ADC12MEM3中,本實例程序最終將采樣結果存儲在results數(shù)組中。下面給出實例程序代碼:#include volatile un

30、signed int results4; / 用于存儲轉換結果void main(void) WDTCTL = WDTPW+WDTHOLD; / 關閉看門狗 P6SEL = 0 x0F; / 使能采樣轉換通道 ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_2; / 打開ADC12,設置采樣時間間隔 ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1; / 選擇采樣定時器作為采樣觸發(fā)信號,采樣模式選擇序列通道單次轉換模式 ADC12MCTL0 = ADC12INCH_0; / ref+=AVcc, channel = A0 ADC12MCTL1

31、= ADC12INCH_1; / ref+=AVcc, channel = A1 ADC12MCTL2 = ADC12INCH_2; / ref+=AVcc, channel = A2 ADC12MCTL3 = ADC12INCH_3+ADC12EOS; / ref+=AVcc,channel=A3,停止采樣 ADC12IE = 0 x08; / 使能ADC12IFG.3采樣中斷標志位 ADC12CTL0 |= ADC12ENC; / 使能轉換 while(1) ADC12CTL0 |= ADC12SC; / 啟動采樣轉換 _ _bis_SR_register(LPM4_bits + GIE)

32、; / 進入LPM4并使能全局中斷 6.2 模數(shù)轉換模塊(ADC12)#pragma vector=ADC12_VECTOR_ _interrupt void ADC12ISR (void) switch(_ _even_in_range(ADC12IV,34) case 0: break; / Vector 0: 無中斷 case 2: break; / Vector 2: ADC溢出中斷 case 4: break; / Vector 4: ADC轉換時間溢出中斷 case 6: break; / Vector 6: ADC12IFG0 case 8: break; / Vector 8:

33、 ADC12IFG1 case 10: break; / Vector 10: ADC12IFG2 case 12: / Vector 12: ADC12IFG3 results0 = ADC12MEM0; / 讀取轉換結果,自動清除中斷標志位 results1 = ADC12MEM1; / 讀取轉換結果,自動清除中斷標志位 results2 = ADC12MEM2; / 讀取轉換結果,自動清除中斷標志位 results3 = ADC12MEM3; / 讀取轉換結果,自動清除中斷標志位 _ _bic_SR_register_on_exit(LPM4_bits);/ 退出LPM4 case 14

34、: break; / Vector 14: ADC12IFG4 default: break; 6.2 模數(shù)轉換模塊(ADC12)(3)單通道多次轉換模式單通道多次轉換模式是在選定的通道上進行多 次 轉 換 。 A D C 轉 換 的 結 果 被 存 入 由CSTARTADDx位定義的ADC12MEMx寄存器中。在這種轉換模式下,當每次轉換完成后CPU必須讀取ADC12MEMx寄存器的值,否則在下一次轉換中,ADC12MEMx寄存器的值會被覆蓋。單通道多次轉換模式的流程圖如圖6.2.8所示。在此模式下,若復位ADC12ENC位,則在當前轉換完成 之 后 , 轉 換 將 立 即 停 止 。 同

35、時 設 置CONSEQx=0和ADC12ENC=0,也可以立即停止當前的轉換,但是,轉換結果是不可靠的。圖6.2.8 單通道多次轉換模式流程圖6.2 模數(shù)轉換模塊(ADC12)【例6.2.3】 單通道多次轉換舉例。分析:本實例采用單通道多次轉換模式,選擇的采樣通道為A0,參考電壓選擇AVCC和AVSS。在內存中開辟出8個16位內存空間results,將多次采樣轉換結果循環(huán)存儲在results數(shù)組中。實例程序代碼如下:#include #define Num_of_Results 8volatile unsigned int resultsNum_of_Results;/ 開辟8個16位內存空間

36、void main(void) WDTCTL = WDTPW+WDTHOLD; / 關閉看門狗 P6SEL |= 0 x01; / 使能A0采樣通道 ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC; / 打開ADC12,設置采樣間隔 / 設置多次采樣轉換 ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; / 選擇采樣定時器作為采樣觸發(fā)信號,采樣模式選擇單通道多次轉換模式 ADC12IE = 0 x01; / 使能ADC12IFG.0中斷 ADC12CTL0 |= ADC12ENC; / 使能轉換 ADC12CTL0 |= ADC12SC;

37、 / 啟動轉換 _ _bis_SR_register(LPM4_bits + GIE); / 進入LPM4并使能全局中斷 6.2 模數(shù)轉換模塊(ADC12)#pragma vector=ADC12_VECTOR_ _interrupt void ADC12ISR (void) static unsigned char index = 0; switch(_ _even_in_range(ADC12IV,34) case 0: break; / Vector 0: 無中斷 case 2: break; / Vector 2: ADC溢出中斷 case 4: break; / Vector 4:

38、ADC轉換時間溢出中斷 case 6: / Vector 6: ADC12IFG0 resultsindex = ADC12MEM0; / 讀取轉換結果 index+; / 計數(shù)器自動加1 if (index = 8) index = 0; case 8: break; / Vector 8: ADC12IFG1 default: break; 6.2 模數(shù)轉換模塊(ADC12)(4)序列通道多次轉換模式序列通道多次轉換模式用來進行多通道的連續(xù)轉換。ADC12轉換結果將順序寫入由CSTARTADDx位定義的以ADCMEMx開始的存儲器中。當由ADC12MCTLx寄存器中ADC12EOS位定義的

39、最后一個通道轉換完成之后,一次序列通道轉換完成,觸發(fā)信號會觸發(fā)下一次序列通道轉換。序列通道多次轉換模式的流程圖如圖6.2.9所示。圖6.2.9 序列通道多次轉換流程圖6.2 模數(shù)轉換模塊(ADC12)【例6.2.4】 序列通道多次轉換舉例。分析:本實例采用序列通道多次轉換模式,選擇的采樣序列通道為A0、A1、A2和A3。每個通道都選擇AVCC和AVSS作為參考電壓,采樣結果被自動順序存儲在ADC12MEM0、ADC12MEM1、ADC12MEM2和ADC12MEM3中。在本實例中,最終將A0、A1、A2和A3通道的采樣結果分別存儲在A0results、A1results、A2results、A

40、3results數(shù)組中。下面給出實例程序代碼:#include #define Num_of_Results 8volatile unsigned int A0resultsNum_of_Results;volatile unsigned int A1resultsNum_of_Results;volatile unsigned int A2resultsNum_of_Results;volatile unsigned int A3resultsNum_of_Results;void main(void) WDTCTL = WDTPW+WDTHOLD; / 關閉看門狗 P6SEL = 0 x0

41、F; / 使能ADC輸入通道 ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8; / 打開ADC12, 設置采樣間隔/ 設置多次采樣轉換 ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3; / 選擇采樣定時器作為采樣觸發(fā)信號,采樣模式選擇單通道多次轉換模式 ADC12MCTL0 = ADC12INCH_0; / ref+=AVcc, channel = A0 ADC12MCTL1 = ADC12INCH_1; / ref+=AVcc, channel = A1 ADC12MCTL2 = ADC12INCH_2; / ref+=AVcc, ch

42、annel = A26.2 模數(shù)轉換模塊(ADC12) ADC12MCTL3 = ADC12INCH_3+ADC12EOS; / ref+=AVcc,channel=A3,停止采樣 ADC12IE = 0 x08; / 使能ADC12IFG.3中斷 ADC12CTL0 |= ADC12ENC; / 使能轉換 ADC12CTL0 |= ADC12SC; / 開始采樣轉換 _ _bis_SR_register(LPM0_bits + GIE); / 進入LPM0并啟用中斷 #pragma vector=ADC12_VECTOR_ _interrupt void ADC12ISR (void) st

43、atic unsigned int index = 0; switch(_ _even_in_range(ADC12IV,34) case 12: / Vector 12: ADC12IFG3 A0resultsindex = ADC12MEM0; / 讀取A0采樣結果,并自動清除中斷標志位 A1resultsindex = ADC12MEM1; / 讀取A1采樣結果,并自動清除中斷標志位 A2resultsindex = ADC12MEM2; / 讀取A2采樣結果,并自動清除中斷標志位 A3resultsindex = ADC12MEM3; / 讀取A3采樣結果,并自動清除中斷標志位 ind

44、ex+; / 計數(shù)器自動加1 if (index = 8) (index = 0);default: break; 6.2 模數(shù)轉換模塊(ADC12) 2采樣和轉換 當采樣觸發(fā)信號SHI出現(xiàn)上升沿時將啟動模數(shù)轉換。SHI信號源可以通過SHSx位進行定義,有4種選擇:ADC12SC、Timer_A.OUT1、Timer_B.OUT0、Timer_B.OUT1。ADC12支持8位、10位及12位分辨率模式,可以通過ADC12RES控制位進行選擇,模數(shù)轉換分別需要9、11及13個ADC12CLK周期。采樣輸入信號的極性用ISSH控制位來選擇。采樣轉換信號SAMPCON可以來自于采樣輸入信號SHI或采

45、樣定時器,能夠控制采樣的周期及轉換的開始。當SAMPCON信號為高電平時采樣被激活,SAMPCON的下降沿將觸發(fā)模數(shù)轉換。ADC12SHP定義了兩種不同的采樣時序方法:擴展采樣時序模式和脈沖采樣時序模式。6.2 模數(shù)轉換模塊(ADC12) 3轉換存儲器 典型的模數(shù)操作通常用中斷請求的方式來通知ADC轉換的結束,并需要在下一次ADC執(zhí)行前將轉換結果轉存到另一位置。ADC12中的16個轉換存儲緩沖寄存器(ADC12MEMx)使得ADC可以進行多次轉換而不需要軟件干預,這一點提高了系統(tǒng)性能,也減少了軟件開銷。ADC12模塊的每個ADC12MEMx緩沖寄存器都可通過相關的ADC12MCTLx控制寄存器

46、來配置,為轉換存儲提供了很大的靈活性。SREFx控制位定義了參考電壓,INCHx控制位選擇輸入通道。當使用序列通道轉換模式時,ADC12EOS控制位定義了轉換序列的結束。6.2 模數(shù)轉換模塊(ADC12)4使用片內集成溫度傳感器如果需要使用MSP430單片機片內的溫度傳感器,用戶可以選擇模擬輸入通道INCHx=1010。與選擇外部輸入通道一樣,需要進行其他寄存器的配置,包括參考電壓選擇、轉換存儲寄存器選擇等。溫度傳感器典型的轉換函數(shù)如圖6.2.12所示,該轉換函數(shù)僅僅作為一個示例,實際的參數(shù)可以參考具體芯片的數(shù)據(jù)手冊。當使用溫度傳感器時,采樣周期必須大于30ms。溫度傳感器的偏移誤差比較大,在

47、大多數(shù)實際應用中需要進行校準。選擇溫度傳感器會自動地開啟片上參考電壓發(fā)生器作為溫度傳感器的電源。但是,它不會使能VREF+輸出或者影響作為模數(shù)轉換的參考電壓設置,溫度傳感器的參考電壓設置與其他通道相同。6.2 模數(shù)轉換模塊(ADC12)圖6.2.12 片內集成溫度傳感器溫度轉換函數(shù)寄存器名稱縮寫類型訪問方式偏移地址初始狀態(tài)ADC12控制寄存器0ADC12CTL0讀/寫字訪問00h0000hADC12控制寄存器1ADC12CTL1讀/寫字訪問02h0000hADC12控制寄存器2ADC12CTL2讀/寫字訪問04h0020hADC12中斷標志寄存器ADC12IFG讀/寫字訪問0Ah0000hAD

48、C12中斷使能寄存器ADC12IE讀字訪問0Ch0000hADC12中斷向量寄存器ADC12IV讀字訪問0Eh0000hADC12緩沖寄存器ADC12MEM015讀/寫字訪問20h3Dh未定義ADC12存儲控制寄存器ADC12MCTL015讀/寫字節(jié)訪問10h1Fh未定義6.2.4 ADC12模塊寄存器ADC12模塊寄存器如表6.2.2所列,用戶可通過實際需要靈活配置ADC12的各功能模塊。表6.2.2 ADC12模塊寄存器列表(基址為0700h)6.2 模數(shù)轉換模塊(ADC12)6.2.5 ADC12應用舉例【例6.2.5】 利用內部2.5V電壓和AVSS作為轉換參考電壓。分析:本實例演示如

49、何使用ADC12內部生成電壓作為模數(shù)轉換參考電壓。采用單通道單次采樣模式,選擇A0通道作為輸入通道,參考電壓組合選擇內部2.5V和AVSS,轉換結果存儲在ADC12MEM0緩沖寄存器中,實例程序代碼如下:#include void main(void) volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; / 關閉看門狗 P6SEL |= 0 x01; / 使能A0輸入通道 REFCTL0 &= REFMSTR; / 復位REFMSTR控制位以控制ADC12參考電壓控制寄存器 ADC12CTL0 = ADC12ON+ADC12SHT02+ADC12R

50、EFON+ADC12REF2_5V; / 打開ADC12,設置采樣間隔,打開參考電壓產(chǎn)生器,并設置參考電壓為2.5V ADC12CTL1 = ADC12SHP; / 采樣保持觸發(fā)信號選擇采樣定時器 ADC12MCTL0 = ADC12SREF_1; / Vr+=Vref+ ,Vr-=AVss for ( i=0; i0 x30; i+); / 延遲以使參考電壓產(chǎn)生穩(wěn)定 ADC12CTL0 |= ADC12ENC; / 使能轉換 while (1) ADC12CTL0 |= ADC12SC; / 開始轉換while (!(ADC12IFG & BIT0);_ _no_operation(); /

51、 可在此處設置端點查看ADC12MEM0緩沖寄存器 6.2 模數(shù)轉換模塊(ADC12)【例6.2.6】 利用外部輸入電壓作為轉換參考電壓。分析:本實例演示如何使用ADC12外部輸入電壓作為模數(shù)轉換參考電壓。采用單通道單次采樣模式,選擇A0通道作為輸入通道,參考電壓組合選擇P5.0引腳輸入的正參考電壓VeREF+和AVSS。轉換結果存儲在ADC12MEM0緩沖寄存器中,實例程序代碼如下:#include void main(void) WDTCTL = WDTPW+WDTHOLD; / 關閉看門狗 P6SEL |= 0 x01; / 使能A0通道 ADC12CTL0 = ADC12ON+ADC1

52、2SHT0_2; / 打開ADC12模塊,設置采樣間隔 ADC12CTL1 = ADC12SHP; / 采樣保持觸發(fā)信號選擇采樣定時器 ADC12MCTL0 = ADC12SREF_2; / Vr+ = VeREF+(外部), Vr-=AVss ADC12CTL0 |= ADC12ENC; / 使能轉換 while (1) ADC12CTL0 |= ADC12SC; / 開始轉換 while (!(ADC12IFG & BIT0);_ _no_operation(); / 可在此處設置斷點查看ADC12MEM0緩沖寄存器 6.2 模數(shù)轉換模塊(ADC12)【例6.2.7】 利用A10通道采樣內

53、部溫度傳感器,并將采樣的數(shù)值轉化為攝氏和華氏溫度。分析:本實例利用A10通道采樣內部溫度傳感器,采樣參考電壓選擇內部1.5V和AVSS,選擇單通道單次采樣模式,采樣結果存儲在ADC12MEM0緩沖寄存器中,實例程序代碼如下:#include long temp;volatile long IntDegF;volatile long IntDegC;void main(void) WDTCTL = WDTPW + WDTHOLD; / 關閉看門狗定時器 REFCTL0 &= REFMSTR; / 復位REFMSTR控制位以控制ADC12參考電壓控制寄存器 ADC12CTL0 = ADC12SHT

54、0_8 + ADC12REFON + ADC12ON; / 打開ADC12,設置采樣間隔,打開內部參考電壓產(chǎn)生器,參考電壓設置為1.5V ADC12CTL1 = ADC12SHP; / 采樣保持觸發(fā)信號選擇采樣定時器 ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_10; / A10通道作為輸入,采樣溫度 ADC12IE = 0 x001; / 使能ADC12IFG0中斷 _ _delay_cycles(75); / 延時75us以使參考電壓穩(wěn)定 ADC12CTL0 |= ADC12ENC; / 使能轉換 while(1)6.2 模數(shù)轉換模塊(ADC12) ADC12

55、CTL0 |= ADC12SC; / 開始采樣轉換 _ _bis_SR_register(LPM4_bits + GIE); / 進入LPM4,并使能全局中斷 IntDegC = (temp - 1855) * 667) / 4096; / 采樣結果轉化為攝氏溫度 IntDegF = (temp - 1748) * 1200) / 4096;/ 采樣結果轉化為華氏溫度 _ _no_operation(); / 可在此處設置端點查看變量 #pragma vector=ADC12_VECTOR_ _interrupt void ADC12ISR (void) switch(_ _even_in_r

56、ange(ADC12IV,34) case 6: / Vector 6: ADC12IFG0 temp = ADC12MEM0; / 讀取采樣存儲結果,自動清除中斷標志位 _ _bic_SR_register_on_exit(LPM4_bits); / 退出低功耗模式 break; default: break; 6.2 模數(shù)轉換模塊(ADC12)6.3 比較器B(Comp_B)6.3.1 比較器B介紹比較器B模塊包含多達16個通道的比較功能,具有以下特性: 反相和同相端輸入多路復用器; 比較器輸出可編程RC濾波器; 輸出提供給定時器A捕獲輸入; 端口輸入緩沖區(qū)程序控制; 中斷能力; 可選參考

57、電壓發(fā)生器、電壓滯后發(fā)生器; 外部參考電壓輸入; 超低功耗比較器模式; 中斷驅動測量系統(tǒng)支持低功耗運行。比較器B的結構框圖如圖6.3.1所示。圖6.3.1 比較器B結構框圖6.3 比較器B(Comp_B) 1模擬輸入開關 模擬輸入開關通過CBIPSEL和SBIMSEL控制位控制模擬信號的輸入,每個輸入通道都是相對獨立的,且都可以引入比較器B的“+”輸入端或“-”輸入端。通過CBSHORT控制位可以將比較器B的模擬信號輸入短路。比較器B的輸入端也可通過CBRSEL和CBEX控制位的配合引入內部基準電壓生成器產(chǎn)生的參考電壓。 通過相應寄存器的配置,比較器B可進行如下模擬電壓信號的比較: 兩個外部輸

58、入電壓信號的比較; 每個外部輸入電壓信號與內部基準電壓的比較。6.3 比較器B(Comp_B)2參考電壓發(fā)生器比較器B的參考電壓發(fā)生器的結構框圖如圖6.3.2所示。參考電壓發(fā)生器通過接入梯形電阻電路或內部共享電壓來達到產(chǎn)生不同參考電壓VREF的目的。如圖6.3.2所示,CBRSx控制位可選擇參考電壓的來源。若CBRSx為10,內部梯形電阻電路電壓來自內部共享電壓,內部共享電壓可通過CBREFLx控制位產(chǎn)生1.5V、2.0V或2.5V電壓。若CBRSx為01,內部梯形電阻電路電壓來自VCC,可通過CBON實現(xiàn)參考電源的開關。若CBRSx為00或11,內部梯形電阻電路無電源可用,被禁止。若CBRS

59、x為11,參考電壓來自內部共享電壓。當CBRSx不為11時,當CBMRVS為0且CBOUT為1時,參考電壓來自VREF1;當CBMRVS和CBOUT均為0時,參考電壓來自VREF0。當梯形電阻電路可用時,可通過CBREF1和CBREF0控制位對參考電壓源進行分壓,分壓倍數(shù)可為1/5、2/5、3/5、4/5、1/4、3/4、1/3、2/3、1/2和1。CBMRVS控制位實現(xiàn) 對 控 制 VR E F電 壓 的 來 源 信 號 的 控 制 。 若CBMRVS控制位為0,CBOUT控制VREF電壓信號的來源;若CBMRVS控制位為1,CBMRVL控制位控制VREF電壓信號的來源。圖6.3.2 比較器

60、B參考電壓發(fā)生器結構框圖6.3 比較器B(Comp_B)3內部濾波器比較器B的輸出可以選擇使用或不使用內部RC濾波器。當CBF控制位設為1時,比較器輸出信號經(jīng)過RC濾波,反之,不使用RC濾波。如果在比較器的輸入端,模擬電壓的電壓差很小,那么比較器的輸出會產(chǎn)生振蕩。如圖6.3.3所示,當比較器“+”輸入端的電壓減少并越過“-”輸入端參考比較電壓時,若比較器輸出沒有經(jīng)過內部濾波器的過濾,在電壓穿越的時刻,比較器輸出將會產(chǎn)生較大的振蕩;若比較器輸出經(jīng)過內部濾波器的過濾,在電壓穿越的時刻,比較器的輸出振蕩較小。圖6.3.3 使用和未使用內部濾波器的輸出波形比較示意圖6.3 比較器B(Comp_B)5比

溫馨提示

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

評論

0/150

提交評論