MSP430單片機(jī)AD轉(zhuǎn)換試驗(yàn)_第1頁
MSP430單片機(jī)AD轉(zhuǎn)換試驗(yàn)_第2頁
MSP430單片機(jī)AD轉(zhuǎn)換試驗(yàn)_第3頁
MSP430單片機(jī)AD轉(zhuǎn)換試驗(yàn)_第4頁
MSP430單片機(jī)AD轉(zhuǎn)換試驗(yàn)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、A/D轉(zhuǎn)換實(shí)驗(yàn)一、轉(zhuǎn)換原理MSP430F149勺A/D轉(zhuǎn)換器原理請參考相關(guān)書籍.實(shí)驗(yàn)板上與AD相關(guān)的硬件電路:RV5j 10K匚13 八J6P61SW2AD輸入電路RV4J 1QK|神h13 3VJ7P50SIP2編程工作實(shí)際就是對以下存放器的操作:存放器類型存放器縮寫存放器的含義轉(zhuǎn)換限制ADC12CTL0轉(zhuǎn)換限制存放器0存放器ADC12CTL1轉(zhuǎn)換限制存放器1中斷ADC12IFG中斷標(biāo)志奇存器限制ADC12IE中斷使能存放器存放器ADC12IV中斷向量存放器存 儲及其限制存放器ADC12MCTL ADC12MCTL存儲限制存放器015ADC12MEM0 ADC12MEM15存儲存放器015設(shè)

2、計(jì)主程序和中斷效勞程序.二、轉(zhuǎn)換程序1、程序1:轉(zhuǎn)換結(jié)果發(fā)送到 PC主程序中進(jìn)行 A/D初始化,中斷效勞程序讀 A/D轉(zhuǎn)換結(jié)果,主程序中通過串口發(fā)送結(jié)果.主程序與中斷程序:/*程序功能:將ADC對端口電壓的轉(zhuǎn)換結(jié)果按轉(zhuǎn)換數(shù)據(jù)和對應(yīng)的模擬電壓的形式通過串口發(fā)送到PC機(jī)屏幕上顯示通信格式:9600測試說明:翻開串口調(diào)試精靈,正確設(shè)置通信格式,觀察接收數(shù)據(jù)*/ #include <> #include "" #include "" #include ""保存ADC專換結(jié)果的數(shù)組#define NumofResults 32 ui

3、nt resultsNum_of_Results; / uint average;/*uchar tcnt = 0;主函數(shù) */void main( void )關(guān)狗關(guān)閉電平轉(zhuǎn)換關(guān)閉數(shù)碼管顯示uchar i;uchar buffer5;WDTCTL = WDTPW + WDTHOLD; /*下面六行程序關(guān)閉所有的IO 口*/P1DIR = 0XFF;P1OUT = 0XFF;P2DIR = 0XFF;P2OUT = 0XFF;P3DIR = 0XFF;P3OUT = 0XFF;P4DIR = 0XFF;P4OUT = 0XFF;P5DIR = 0XFF;P5OUT = 0XFF;P6DIR =

4、 0XFF;P6OUT = 0XFF;P6DIR |= BIT2;P6OUT |= BIT2; /P6DIR|=BIT6;P6OUT&=BIT6;/InitUART();Init_ADC();_EINT();buffer4 = '0'while(1)LPM1;Hex2Dec(average,buffer);for(i = 0; i < 4; i+)bufferi += 0x30;PutString0("The digital value is:");PutString(buffer);Trans_val(average,buffer);buff

5、er3 = buffer2;buffer2 = buffer1;buffer1 = 0x2e - 0x30;for(i = 0; i < 4; i+)bufferi += 0x30;PutString0("The analog value is:");PutString(buffer);/*函數(shù)名稱:ADC12ISR功能:ADC中斷效勞函數(shù),在這里用屢次平均的計(jì)算口的模擬電壓數(shù)值參數(shù):無返回值:無*/#pragma vector=ADC_VECTOR_interrupt void ADC12ISR (void)static uchar index = 0;result

6、sindex+ = ADC12MEM0; / Move resultsif(index = Num_of_Results)uchar i;average = 0;for(i = 0; i < Num_of_Results; i+)(average += resultsi;average >>= 5;/除以 32index = 0;tcnt+;if(tcnt = 250)/主要是降低串口發(fā)送速度(LPM1_EXIT;tcnt = 0;A/D轉(zhuǎn)換相關(guān)程序:#include <>typedef unsigned int uint;/*函數(shù)名稱:Init_ADC功能:初始

7、化ADC參數(shù):無void Init_ADC(void)P6SEL |= 0x01;/ADC12CTL0 = ADC12ON+SHT0_15+MSC;/ADC12CTL1 = SHP+CONSEQ_2;/ADC12IE = 0x01;/ADC12CTL0 |= ENC;/ADC12CTL0 |= ADC12SC;/使能ADC通道翻開ADC設(shè)置采樣時間使用采樣定時器使能ADC中斷使能轉(zhuǎn)換開始轉(zhuǎn)換/*函數(shù)名稱:Hex2Dec臺匕目匕:將16進(jìn)制ADC轉(zhuǎn)換數(shù)據(jù)變換成十進(jìn)制表布形式Hex Val-16進(jìn)制數(shù)據(jù)ptr-指向存放轉(zhuǎn)換結(jié)果的指針返回值:無*/ void Hex2Dec(uint Hex_val

8、,uchar *ptr)ptr0 = Hex_val / 1000;ptr1 = (Hex_val - ptr0*1000)/100;ptr2 = (Hex_val - ptr0*1000 - ptr1*100)/10;ptr3 = (Hex_val - ptr0*1000 - ptr1*100 - ptr2*10);/*函數(shù)名稱:Trans val功 能:將16進(jìn)制ADC轉(zhuǎn)換數(shù)據(jù)變換成三位10進(jìn)制真實(shí)的模擬電壓數(shù)據(jù),并在液晶上顯示參 數(shù):Hex_Val-16 進(jìn)制數(shù)據(jù)返回值:無*/void Trans_val(uint Hex_Val,uchar *ptr)(unsigned long ca

9、ltmp;uint Curr_Volt;uchar t1;caltmp = Hex_Val;caltmp = (caltmp << 5) + Hex_Val; /caltmp = Hex_Val * 33caltmp = (caltmp << 3) + (caltmp << 1); /caltmp = caltmp * 10Curr_Volt = caltmp >> 12;/Curr_Volt = caltmp / 2Anptr0 = Curr_Volt / 100;/Hex->Dec變換t1 = Curr_Volt - (ptr0 * 1

10、00);ptr1 = t1 / 10;ptr2 = t1 - (ptr1 * 10);)串口程序:#include <>typedef unsigned char uchar;/*函數(shù)名稱:InitUART功 能:初始化UAR嘲口數(shù):無返回值:無*/void InitUART(void)(P3SEL |= 0x30;ME1 |= URXE0 + UTXE0;UCTL0 |= CHAR;UTCTL0 |= SSEL0;UBR00 = 0x03;UBR10 = 0x00;UMCTL0 = 0x4A;UCTL0 &= SWRST;/ ,5 = USART0 TXD/RXD/ En

11、able USART0 T/RXD/ 8-bit character/ UCLK = ACLK/ 32k/9600 -/ Modulation/ Initialize USART state machine/*函數(shù)名稱:Send1Char功能:向PC機(jī)發(fā)送一個字符參數(shù):sendchar-要發(fā)送的字符返回值:無*/void Send1Char(uchar sendchar)(while (!(IFG1 & UTXIFG0); /TXBUF0 = sendchar;等待發(fā)送存放器為空,*函數(shù)名稱:PutSting功 能:向PC機(jī)發(fā)送字符串并換行指令參 數(shù):ptr-指向發(fā)送字符串的指針返回值

12、:無*/ void PutString(uchar *ptr)while(*ptr != '0')Send1Char(*ptr+);/發(fā)送數(shù)據(jù)while (!(IFG1 & UTXIFG0);TXBUF0 = 'n'/發(fā)送換行指令/*函數(shù)名稱:PutSting0功 能:向PC機(jī)發(fā)送字符串,無換行參 數(shù):ptr-指向發(fā)送字符串的指針返回值:無*/ void PutString0(uchar *ptr)while(*ptr != '0')Send1Char(*ptr+);/發(fā)送數(shù)據(jù)2、程序2:轉(zhuǎn)換結(jié)果顯示在 1602顯示模塊上程序#inclu

13、de <>#include ""typedef unsigned char uchar;typedef unsigned int uint;/*宏定義 */#define DataDir P2DIR #define DataPort P2OUT#define Busy0x80# define CtrlDir P6DIR# define CLR_RS P6OUT&=BIT3; /RS =# define SET_RS P6OUT|=BIT3;# define CLR_RW P6OUT&=BIT4;/RW =# define SET_RW P6OUT

14、|=BIT4;# define CLR_EN P6OUT&=BIT5;/EN =# define SET_EN P6OUT|=BIT5;/*函數(shù)名稱:DispNchar功能:讓液晶從某個位置起連續(xù)顯示N個字符參數(shù):x-位置的列坐標(biāo)y-位置的行坐標(biāo)n-字符個數(shù)ptr-指向字符存放位置的指針void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)(uchar i;for (i=0;i<n;i+)(Disp1Char(x+,y,ptri);if (x = 0x0f)(x = 0;y A= 1;)/*函數(shù)名稱:LocateXY功 能:向液晶輸

15、入顯示字符位置的坐標(biāo)信息參 數(shù):x-位置的列坐標(biāo)y- 位置的行坐標(biāo)返回值:無*;void LocateXY(uchar x,uchar y)(uchar temp;temp = x&0x0f;y &= 0x01;if(y) temp |= 0x40; /如果在第2行temp |= 0x80;LcdWriteCommand(temp,1);/*函數(shù)名稱:Disp1Char功 能:在某個位置顯示一個字符x-位置的列坐標(biāo)y-位置的行坐標(biāo)data-顯示的字符數(shù)據(jù)返回值:無*/ void Disp1Char(uchar x,uchar y,uchar data)LocateXY( x,

16、y );LcdWriteData( data );/*函數(shù)名稱:LcdReset功 能:對1602液晶模塊進(jìn)行復(fù)位操作參 數(shù):無返回值:無*/ void LcdReset(void)CtrlDir |= 0x07;/限制線端口設(shè)為輸出狀態(tài)DataDir = 0xFF;/數(shù)據(jù)端口設(shè)為輸出狀態(tài)LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 1);LcdWriteCommand(0x08,

17、1);LcdWriteCommand(0x01, 1);LcdWriteCommand(0x06, 1);LcdWriteCommand(0x0c, 1);/ 規(guī)定的復(fù)位操作/顯示模式設(shè)置/顯不'關(guān)閉/顯示清屏/寫字符時整體不移動/顯示開,不開游標(biāo),不閃爍/*函數(shù)名稱:LcdWriteCommand功 能:向液晶模塊寫入命令參 數(shù):cmd-命令,chk-是否判忙的標(biāo)志,1:判忙,0:不判返回值:無*/void LcdWriteCommand(uchar cmd,uchar chk)if (chk) WaitForEnable(); /檢測忙信號CLR_RS;CLR_RW;_NOP();

18、DataPort = cmd; /將命令字寫入數(shù)據(jù)端口_NOP();SET_EN;/產(chǎn)生使能脈沖信號_NOP();_NOP();CLR_EN;)/*函數(shù)名稱:LcdWriteData功能:向液晶顯示的當(dāng)前地址寫入顯示數(shù)據(jù)參數(shù):data-顯示字符數(shù)據(jù)返回值:無*/*void LcdWriteData( uchar data )WaitForEnable(); /等待液晶不忙SET_RS;CLR_RW;_NOP();將顯示數(shù)據(jù)寫入數(shù)據(jù)端口DataPort = data; / _NOP();SET_EN;/產(chǎn)生使能脈沖信號_NOP();_NOP();CLR_EN;/*函數(shù)名稱:WaitForEnab

19、le功 能:等待1602液晶完成內(nèi)部操作參 數(shù):無返回值:無*/void WaitForEnable(void)P2DIR &= 0x00; 將P4 口切換為輸入狀態(tài)CLR_RS;SET_RW;_NOP();SET_EN;_NOP();檢測忙標(biāo)志_NOP();while(P2IN & Busy)!=0); /CLR_EN;P2DIR |= 0xFF; / 將P4 切換為輸出狀態(tài)函數(shù)名稱:Delay5ms 功 能:延時約5ms 參 數(shù):無 返回值:無*/ void Delay5ms(void)uint i=40000;while (i != 0)i-;/*函數(shù)名稱:Delay40

20、0ms 功 能:延時約400ms 參 數(shù):無 返回值:無*/ void Delay400ms(void)uchar i=50;uint j;while(i-)j=7269;程序#include <> #include "" typedef unsigned char uchar;typedef unsigned int uint;/*宏定義 */#define DataDirP2DIR#define DataPortP2OUT#define Busy0x80#define CtrlDir P6DIR# define CLR_RS P6OUT&=BIT3;

21、/RS =# define SET_RS P6OUT|=BIT3;# define CLR_RW P6OUT&=BIT4;RW =# define SET_RW P6OUT|=BIT4;# define CLR_EN P6OUT&=BIT5;EN =# define SET_EN P6OUT|=BIT5;/*函數(shù)名稱:DispNchar功能:讓液晶從某個位置起連續(xù)顯示N個字符參 數(shù):x-位置的列坐標(biāo)y-位置的行坐標(biāo)n-字符個數(shù)ptr-指向字符存放位置的指針返回值:無*/ void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)uch

22、ar i;for (i=0;i<n;i+)Disp1Char(x+,y,ptri);if (x = 0x0f)x = 0;y A= 1;/*函數(shù)名稱:LocateXY功 能:向液晶輸入顯示字符位置的坐標(biāo)信息x-位置的列坐標(biāo)y-位置的行坐標(biāo)返回值:無*/ void LocateXY(uchar x,uchar y)uchar temp;temp = x&0x0f;y &= 0x01;if(y) temp |= 0x40; /如果在第2行temp |= 0x80;LcdWriteCommand(temp,1);,*函數(shù)名稱:Disp1Char功 能:在某個位置顯示一個字符參

23、數(shù):x-位置的列坐標(biāo)y- 位置的行坐標(biāo)data-顯示的字符數(shù)據(jù)返回值:無*void Disp1Char(uchar x,uchar y,uchar data)(LocateXY( x, y );LcdWriteData( data );,*函數(shù)名稱:LcdReset功 能:對1602液晶模塊進(jìn)行復(fù)位操作參 數(shù):無返回值:無*/void LcdReset(void)(CtrlDir |= 0x07;/DataDir = 0xFF;/LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 1);LcdWriteCommand(0x08, 1);LcdWriteCommand(0x01, 1);LcdWriteCommand(0x06, 1);LcdWriteCommand(0x0c, 1);/*函數(shù)名稱:LcdWriteCommand功能:向液晶模塊寫入命令參數(shù):cmd-命令,限制線端口設(shè)為輸出狀態(tài)數(shù)據(jù)端口設(shè)為輸出狀態(tài)/ 規(guī)定的復(fù)位操作/顯示模式設(shè)置/顯不'關(guān)閉/顯示清屏/寫字符時整體不移動/顯示開,不開游標(biāo),不閃爍chk- 是否判忙的標(biāo)志,1:判忙,0:不判返回值

溫馨提示

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

評論

0/150

提交評論