


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、AD轉(zhuǎn)換實驗一、轉(zhuǎn)換原理MSP430F149勺A/D轉(zhuǎn)換器原理請參考相關(guān)書籍。 實驗板上與AD相關(guān)的硬件電路:RV310K33J6P61S:ICAl)輸入電路RV4III-10Kf|1 1|3EF1P50編程工作實際就是對以下寄存器的操作:寄存器類型寄存器縮寫寄存器的含義轉(zhuǎn)換控制奇存器ADC12CTL0轉(zhuǎn)換控制寄存器0ADC12CTL1轉(zhuǎn)換控制寄存器1中斷 控制 寄存器ADC12IFG中斷標(biāo)志奇存器ADC12IE中斷使能寄存器ADC12IV中斷向量寄存器存儲及其 控制寄存器ADC12MCTL ADC12MCTL存儲控制寄存器015ADC12MEM0 -ADC12MEM15存儲寄存器015設(shè)計主
2、程序和中斷服務(wù)程序。二、轉(zhuǎn)換程序1、程序1:轉(zhuǎn)換結(jié)果發(fā)送到 PC主程序中進行 A/D初始化,中斷服務(wù)程序讀A/D轉(zhuǎn)換結(jié)果,主程序中通過串口發(fā)送結(jié)果?!癿ain.c ”主程序與中斷程序:/*程序功能:將ADC對P6.0端口電壓的轉(zhuǎn)換結(jié)果按轉(zhuǎn)換數(shù)據(jù)和對應(yīng)的 模擬電壓的形式通過串口發(fā)送到PC機屏幕上顯示通信格式:N.8.1, 9600測試說明:打開串口調(diào)試精靈,正確設(shè)置通信格式,觀察接收數(shù)據(jù)*/#i nclude #include allfunc.h#i nclude UARTO_Fu nc.c#in clude ADC_Fu nc.c#defi ne Num_of_Results 32uint r
3、esultsNum_of_Results; /保存 ADC轉(zhuǎn)換結(jié)果的數(shù)組uint average;uchar tent = 0;主函數(shù) */*void mai n( void )uchar i;uchar buffer5;WDTCTL = WDTPW + WDTHOLD; / 關(guān)狗/*下面六行程序關(guān)閉所有的10 口 */P1DIR =0XFF;P1OUT =0XFF;P2DIR =0XFF;P2OUT =0XFF;P3DIR =0XFF;P3OUT =0XFF;P4DIR =0XFF;P4OUT =0XFF;P5DIR =0XFF;P5OUT =0XFF;P6DIR =0XFF;P6OUT =
4、0XFF;關(guān)閉電平轉(zhuǎn)換關(guān)閉數(shù)碼管顯示P6DIR |= BIT2;P6OUT |= BIT2; /P6DIR|=BIT6;P6OUT&=BIT6;/Ini tUART();Ini t_ADC(); _EINT();buffer4 = 0;while(1)LPM1;Hex2Dec(average,buffer);for(i = 0; i 4; i+) bufferi += 0x30;PutStri ngO(The digital value is:);PutStri ng(buffer);Tran s_val(average,buffer); buffer3 = buffer2; buffer2
5、= buffer1;buffer1 = 0x2e - 0x30;for(i = 0; i 4; i+) bufferi += 0x30;PutStri ng0(The an alog value is:);PutStri ng(buffer);/*函數(shù)名稱:ADC12ISR功能: ADC中斷服務(wù)函數(shù),在這里用多次平均的計算P6.0 口的模擬電壓數(shù)值參數(shù):無返回值:無*/#pragma vector=ADC_VECTOR_in terrupt void ADC12ISR (void)/ Move resultsstatic uchar in dex = 0;results ndex+ = ADC
6、12MEM0; if(in dex = Num_of_Results) uchar i;average = 0;for(i = 0; i = 5;/除以32in dex = 0;ten t+;if(tc nt = 250)/主要是降低串口發(fā)送速度LPM1_EXIT;tent = 0;“ADC_Func.c” A/D轉(zhuǎn)換相關(guān)程序:#in elude typedef un sig ned int uint;/*函數(shù)名稱:Ini t_ADC功能:初始化ADC參數(shù):無返回值:無*void In it_ADC(void)使能ADC通道打開ADC設(shè)置采樣時間 使用采樣定時器使能ADC中斷使能轉(zhuǎn)換開始轉(zhuǎn)換P
7、6SEL |= 0x01;/ADC12CTL0 = ADC12ON+SHT0_15+MSC; /ADC12CTL1 = SHP+CONSEQ_2;/ADC12IE = 0x01;/ADC12CTL0 |= ENC;/ADC12CTL0 |= ADC12SC;/*函數(shù)名稱:Hex2Dec功能:將16進制ADC轉(zhuǎn)換數(shù)據(jù)變換成十進制表示形式參數(shù):Hex_Val-16進制數(shù)據(jù)ptr-指向存放轉(zhuǎn)換結(jié)果的指針返回值:無*/void Hex2Dec( uint Hex_val,uchar *ptr)ptr0 = Hex_val / 1000;ptr1 = (Hex_val - ptr0*1000)/100;
8、ptr2 = (Hex_val - ptr0*1000 - ptr1*100)/10;ptr3 = (Hex_val - ptr0*1000 - ptr1*100 - ptr2*10);/*函數(shù)名稱:Tran s_val功能:將16進制ADC轉(zhuǎn)換數(shù)據(jù)變換成三位10進制真實的模擬電壓數(shù)據(jù),并在液晶上顯示參數(shù):Hex_Val-16 進制數(shù)據(jù)返回值:無*/void Tran s_val(u int Hex_Val,uchar *ptr)un sig ned long caltmp;ui nt Curr_Volt;uchar t1;caltmp = Hex_Val;caltmp = (caltmp 5
9、) + Hex_Val; /caltmp = Hex_Val * 33caltmp = (caltmp 3) + (caltmp 12;Curr_Volt = caltmp / 25變換ptr0 = Curr_Volt / 100;Hex-Dect1 = Curr_Volt - (ptr0 * 100);ptr1 = t1 / 10;ptr2 = t1 - (ptr1 * 10);“ UART0_Fu nc.c” 串口程序:#i nclude typedef un sig ned char uchar;/*函數(shù)名稱:In itUART功能:初始化UART端 口參數(shù):無返回值:無* void I
10、n itUART(void)/ P3.4,5 = USART0 TXD/RXD/ En able USART0 T/RXD/ 8-bit character/ UCLK = ACLK/ 32k/9600 - 3.41/P3SEL |= 0x30;ME1 |= URXE0 + UTXE0;UCTL0 |= CHAR;UTCTL0 |= SSEL0;UBR00 = 0x03;UBR10 = 0x00;UCTLO &= SWRST;/Initialize USART state machine/*函數(shù)名稱:Sen d1Char功能:向PC機發(fā)送一個字符參數(shù):sendchar-要發(fā)送的字符返回值:無*
11、 Jvoid Sen d1Char(uchar sen dchar)while (!(IFG1 & UTXIFGO); /TXBUF0 = sen dchar;等待發(fā)送寄存器為空/*函數(shù)名稱:PutSt ing功能:向PC機發(fā)送字符串并換行指令參數(shù):ptr-指向發(fā)送字符串的指針返回值:無*/void PutStri ng(uchar *ptr)while(*ptr != 0)Sen d1Char(*ptr+);/while (!(IFG1 & UTXIFGO);TXBUF0 = n;/*函數(shù)名稱:PutSti ngO功能:向PC機發(fā)送字符串,無換行參數(shù):ptr-指向發(fā)送字符串的指針返回值:無*
12、/void PutStri ng0(uchar *ptr)while(*ptr != 0)Sen d1Char(*ptr+);/發(fā)送數(shù)據(jù)發(fā)送換行指令發(fā)送數(shù)據(jù)2、程序2:轉(zhuǎn)換結(jié)果顯示在 1602顯示模塊上/*#defi ne DataDir#defi ne DataPort#defi ne Busy#defi ne CtrlDir#defi ne CLR_RS P6OUT&=BIT3;#defi ne SET_RS P6OUT|=BIT3;#defi ne CLR_RW P6OUT&=BIT4;#defi ne SET_RW P6OUT|=BIT4;#defi ne CLR_EN P6OUT&=
13、BIT5; #defi ne SET_EN P6OUT|=BIT5;/*/RS = P6.3RW = P6.4EN = P6.5“ ma in .c ”程序#in clude #in clude cry1602.h typedef un sig ned char uchar; typedef un sig ned int uint;定義 */P2DIRP2OUT0x80P6DIR函數(shù)名稱:DispNchar功能:讓液晶從某個位置起連續(xù)顯示參數(shù):x-位置的列坐標(biāo)y-位置的仃坐標(biāo)n-字符個數(shù)ptr-指向字符存放位置的指N個字符返回值:無*/void DispNChar(uchar x,uchar
14、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;LocateXY向液晶輸入顯示字符位置的坐標(biāo)信息X-位置的列坐標(biāo)/* 函數(shù)名稱: 功 能:參 數(shù):y-位置的行坐標(biāo)返回值:無*void LocateXY(uchar x,uchar y)uchar temp;temp = x&OxOf;y &= 0x01;如果在第if(y) temp |= 0x40; / temp |= 0x80;LcdWriteComma nd(temp,1);DispIChar在某個
15、位置顯示一個字符位置的列坐標(biāo)位置的行坐標(biāo)顯示的字符數(shù)據(jù)x-/* 函數(shù)名稱: 功 能:參 數(shù):y- data-返回值:無*/ void Disp1Char(uchar x,uchar y,uchar data)LocateXY( x, y );LcdWriteData( data );/*函數(shù)名稱:LcdReset功 能:對1602液晶模塊進行復(fù)位操作參 數(shù):無返回值:無*/void LcdReset(void) CtrlDir |= 0x07;DataDir = 0xFF;/控制線端口設(shè)為輸出狀態(tài) 數(shù)據(jù)端口設(shè)為輸出狀態(tài)/規(guī)定的復(fù)位操作LcdWriteComma nd(0x38, 0);Dela
16、y5ms();LcdWriteComma nd(0x38, 0);Delay5ms();LcdWriteComma nd(0x38, 0);Delay5ms();LcdWriteComma nd(0x38, 1);LcdWriteComma nd(0x08, 1);LcdWriteComma nd(0x01, 1);LcdWriteComma nd(0x06, 1);LcdWriteComma nd(0x0c, 1);/* 函數(shù)名稱:LcdWriteComma nd 功能:向液晶模塊寫入命令參數(shù):cmd-命令,chk-是否判忙的標(biāo)志,返回值:無/顯示模式設(shè)置/顯示關(guān)閉/ 顯示清屏/寫字符時整體
17、不移動/顯示開,不開游標(biāo),不閃爍1:判忙,0:不判*/void LcdWriteComma nd(uchar cmd,uchar chk)if (chk) WaitForE nable(); /檢測忙信號?CLR_RS;CLR_RW;_NOP();_NOP();SET_EN;_NOP();_NOP(); CLR_EN;/DataPort = cmd;/將命令字寫入數(shù)據(jù)端口產(chǎn)生使能脈沖信號/*函數(shù)名稱:LcdWriteData功能:向液晶顯示的當(dāng)前地址寫入顯示數(shù)據(jù)參數(shù):data-顯示字符數(shù)據(jù)返回值:無*/void LcdWriteData( uchar data )WaitForE nable(
18、);/等待液晶不忙SET_RS;CLR_RW;_NOP();DataPort = data; /將顯示數(shù)據(jù)寫入數(shù)據(jù)端口_NOP();SET_EN;/產(chǎn)生使能脈沖信號_NOP();_NOP();CLR_EN;/*函數(shù)名稱:WaitForE nable功能:等待1602液晶完成內(nèi)部操作參 數(shù):無 返回值:無*/void WaitForE nable(void)P2DIR &= 0x00; / 將P4 口切換為輸入狀態(tài)CLR_RS;SET_RW;_NOP();SET_EN;_NOP();_NOP();檢測忙標(biāo)志while(P2IN & Busy)!=0); /CLR_EN;P2DIR |= 0xFF
19、; /將P4 口切換為輸出狀態(tài) /*函數(shù)名稱:Delay5ms功能:延時約5ms參數(shù):無返回值:無*void Delay5ms(void)uint i=40000;while (i != 0)I-;/*函數(shù)名稱:Delay400ms功能:延時約400ms參數(shù):無返回值:無*void Delay400ms(void)uchar i=50;uint j;while(i-)j=7269; while(j-);“cry1602.c ”程序#in clude #in clude cry1602.h typedef un sig ned char uchar; typedef un sig ned int
20、 uint;/*定義 */#defi ne DataDirP2DIR#defi ne DataPortP2OUT#defi ne Busy#defi ne CtrlDir0x80P6DIR#defi ne CLR_RS P6OUT&=BIT3;#defi ne SET_RS P6OUT|=BIT3;#defi ne CLR_RW P6OUT&=BIT4;#defi ne SET_RW P6OUT|=BIT4;#defi ne CLR_EN P6OUT&=BIT5; #defi ne SET_EN P6OUT|=BIT5;/*/RS = P6.3RW = P6.4EN = P6.5函數(shù)名稱:Di
21、spNchar功 能:讓液晶從某個位置起連續(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功能:向液晶輸入顯示字符位置的坐標(biāo)信息參數(shù):x-位置的列坐標(biāo)y-位置的仃坐標(biāo)返回值:無*/void LocateXY(uchar x,uchar y)uchar te
22、mp;temp = x&OxOf;y &= 0x01;if(y) temp |= 0x40; /如果在第 2 行temp |= 0x80;LcdWriteComma nd(temp,1);/* 函數(shù)名稱:DispIChar功 能:在某個位置顯示一個字符 參 數(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液晶模塊進行復(fù)位操作參數(shù):無返回值:無*Ivoid LcdR
23、eset(void)CtrlDir |= 0x07;/DataDir = 0xFF;/LcdWriteComma nd(0x38, 0);Delay5ms();LcdWriteComma nd(0x38, 0); Delay5ms();LcdWriteComma nd(0x38, 0); Delay5ms();LcdWriteComma nd(0x38, 1);LcdWriteComma nd(0x08, 1);LcdWriteComma nd(0x01, 1);LcdWriteComma nd(0x06, 1);LcdWriteComma nd(0x0c, 1);/* 函數(shù)名稱:LcdWriteComma nd 功能:向液晶模塊寫入命令參數(shù):cmd-命令,chk-是否判忙的標(biāo)志,返回值:無控制線端口設(shè)為輸出狀態(tài) 數(shù)據(jù)端口設(shè)為輸出狀態(tài)/ 規(guī)定的復(fù)位操作/顯示模式設(shè)置/顯示關(guān)閉/ 顯示清屏/寫字符時整體不移動/顯示開,不開游標(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中提前考試數(shù)學(xué)試卷
- 福建省質(zhì)檢卷數(shù)學(xué)試卷
- 高一年泉州統(tǒng)考數(shù)學(xué)試卷
- 福州初中五月數(shù)學(xué)試卷
- 甘肅15高考數(shù)學(xué)試卷
- 教師課件的制作培訓(xùn)
- 2025年浙江醫(yī)療衛(wèi)生招聘金華義烏市中醫(yī)醫(yī)院招聘4人筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025年年唐都醫(yī)院住培醫(yī)師招錄筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025至2030城市建設(shè)規(guī)劃發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 二一年高考數(shù)學(xué)試卷
- 滲濾液處理應(yīng)急預(yù)案
- 肺部結(jié)節(jié)病例討論范文
- 整本書閱讀《平凡的世界》中職語文高教版(2023-2024)基礎(chǔ)模塊上冊
- 全冊背記資料-2024-2025學(xué)年七年級地理上學(xué)期湘教版
- 買賣合同法律知識及風(fēng)險防范培訓(xùn)課件
- 富順縣中醫(yī)醫(yī)院《護理質(zhì)控手冊》模版
- 《水工建筑物》課件-模塊四:土石壩
- 貴陽市云巖區(qū)2023-2024學(xué)年重點中學(xué)小升初數(shù)學(xué)入學(xué)考試卷含解析
- (完整版)小學(xué)六年級奧數(shù)應(yīng)用題100道附答案
- GB/T 9799-2024金屬及其他無機覆蓋層鋼鐵上經(jīng)過處理的鋅電鍍層
- 2020年遼寧省普通高中學(xué)業(yè)水平合格性考試地理真題
評論
0/150
提交評論