




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、A/D轉(zhuǎn)換實(shí)驗(yàn)一、轉(zhuǎn)換原理MSP430F149的A/D轉(zhuǎn)換器原理請(qǐng)參考相關(guān)書籍。實(shí)驗(yàn)板上與AD相關(guān)的硬件電路: 編程工作實(shí)際就是對(duì)以下寄存器的操作:寄存器類型寄存器縮寫寄存器的含義轉(zhuǎn)換控制寄存器ADC12CTL0轉(zhuǎn)換控制寄存器0ADC12CTL1轉(zhuǎn)換控制寄存器1中 斷控制寄存器ADC12IFG中斷標(biāo)志寄存器ADC12IE中斷使能寄存器ADC12IV中斷向量寄存器存 儲(chǔ)及其控制寄存器ADC12MCTL0 ADC12MCTL15存儲(chǔ)控制寄存器015ADC12MEM0 ADC12MEM15存儲(chǔ)寄存器015設(shè)計(jì)主程序和中斷服務(wù)程序。二、轉(zhuǎn)換程序1、程序1:轉(zhuǎn)換結(jié)果發(fā)送到PC主程序中進(jìn)行A/D初始化,中
2、斷服務(wù)程序讀A/D轉(zhuǎn)換結(jié)果,主程序中通過(guò)串口發(fā)送結(jié)果?!癿ain.c”主程序與中斷程序:/*程序功能:將ADC對(duì)P6.0端口電壓的轉(zhuǎn)換結(jié)果按轉(zhuǎn)換數(shù)據(jù)和對(duì)應(yīng)的 模擬電壓的形式通過(guò)串口發(fā)送到PC機(jī)屏幕上顯示-通信格式:N.8.1, 9600-測(cè)試說(shuō)明:打開串口調(diào)試精靈,正確設(shè)置通信格式,觀察接收數(shù)據(jù)*/#include <msp430.h>#include "allfunc.h"#include "UART0_Func.c"#include "ADC_Func.c"#define Num_of_Results 32uint r
3、esultsNum_of_Results; /保存ADC轉(zhuǎn)換結(jié)果的數(shù)組uint average;uchar tcnt = 0;/*主函數(shù)*/void main( void ) uchar i; uchar buffer5; WDTCTL = WDTPW + WDTHOLD; /關(guān)狗 /*下面六行程序關(guān)閉所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DI
4、R = 0XFF;P6OUT = 0XFF; P6DIR |= BIT2;P6OUT |= BIT2; /關(guān)閉電平轉(zhuǎn)換 P6DIR|=BIT6;P6OUT&=BIT6; /關(guān)閉數(shù)碼管顯示 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)
5、; Trans_val(average,buffer); buffer3 = buffer2; buffer2 = buffer1; buffer1 = 0x2e - 0x30; for(i = 0; i < 4; i+) bufferi += 0x30; PutString0("The analog value is: "); PutString(buffer); /*函數(shù)名稱:ADC12ISR功 能:ADC中斷服務(wù)函數(shù),在這里用多次平均的 計(jì)算P6.0口的模擬電壓數(shù)值參 數(shù):無(wú) 返回值 :無(wú)*/#pragma vector=ADC_VECTOR_interrupt
6、 void ADC12ISR (void) static uchar index = 0; resultsindex+ = ADC12MEM0; / Move results if(index = Num_of_Results) uchar i; average = 0; for(i = 0; i < Num_of_Results; i+) average += resultsi; average >>= 5; /除以32 index = 0; tcnt+; if(tcnt = 250) /主要是降低串口發(fā)送速度 LPM1_EXIT; tcnt = 0; “ADC_Func.
7、c” A/D轉(zhuǎn)換相關(guān)程序:#include <msp430.h>typedef unsigned int uint;/*函數(shù)名稱:Init_ADC功 能:初始化ADC參 數(shù):無(wú)返回值 :無(wú)*/void Init_ADC(void) P6SEL |= 0x01; / 使能ADC通道 ADC12CTL0 = ADC12ON+SHT0_15+MSC; / 打開ADC,設(shè)置采樣時(shí)間 ADC12CTL1 = SHP+CONSEQ_2; / 使用采樣定時(shí)器 ADC12IE = 0x01; / 使能ADC中斷 ADC12CTL0 |= ENC; / 使能轉(zhuǎn)換 ADC12CTL0 |= ADC12
8、SC; / 開始轉(zhuǎn)換/*函數(shù)名稱:Hex2Dec功 能:將16進(jìn)制ADC轉(zhuǎn)換數(shù)據(jù)變換成十進(jìn)制 表示形式參 數(shù):Hex_Val-16進(jìn)制數(shù)據(jù) ptr-指向存放轉(zhuǎn)換結(jié)果的指針返回值 :無(wú)*/void Hex2Dec(uint Hex_val,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功
9、 能:將16進(jìn)制ADC轉(zhuǎn)換數(shù)據(jù)變換成三位10進(jìn)制 真實(shí)的模擬電壓數(shù)據(jù),并在液晶上顯示參 數(shù):Hex_Val-16進(jìn)制數(shù)據(jù) 返回值 :無(wú)*/void Trans_val(uint Hex_Val,uchar *ptr) unsigned long caltmp; uint Curr_Volt; uchar t1; caltmp = Hex_Val; caltmp = (caltmp << 5) + Hex_Val; /caltmp = Hex_Val * 33 caltmp = (caltmp << 3) + (caltmp << 1); /caltmp =
10、caltmp * 10 Curr_Volt = caltmp >> 12; /Curr_Volt = caltmp / 2n ptr0 = Curr_Volt / 100; /Hex->Dec變換 t1 = Curr_Volt - (ptr0 * 100); ptr1 = t1 / 10; ptr2 = t1 - (ptr1 * 10);“UART0_Func.c”串口程序:#include <msp430.h>typedef unsigned char uchar;/*函數(shù)名稱:InitUART功 能:初始化UART端口參 數(shù):無(wú)返回值 :無(wú)*/void Ini
11、tUART(void) P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD ME1 |= URXE0 + UTXE0; / Enable USART0 T/RXD UCTL0 |= CHAR; / 8-bit character UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x03; / 32k/9600 - 3.41 UBR10 = 0x00; / UMCTL0 = 0x4A; / Modulation UCTL0 &= SWRST; / Initialize USART state machine/*函數(shù)名稱:Send
12、1Char功 能:向PC機(jī)發(fā)送一個(gè)字符參 數(shù):sendchar-要發(fā)送的字符返回值 :無(wú)*/void Send1Char(uchar sendchar) while (!(IFG1 & UTXIFG0); /等待發(fā)送寄存器為空 TXBUF0 = sendchar; /*函數(shù)名稱:PutSting功 能:向PC機(jī)發(fā)送字符串并換行指令參 數(shù):ptr-指向發(fā)送字符串的指針返回值 :無(wú)*/void PutString(uchar *ptr) while(*ptr != '0') Send1Char(*ptr+); / 發(fā)送數(shù)據(jù) while (!(IFG1 & UTXIF
13、G0); TXBUF0 = 'n' /發(fā)送換行指令/*函數(shù)名稱:PutSting0功 能:向PC機(jī)發(fā)送字符串,無(wú)換行參 數(shù):ptr-指向發(fā)送字符串的指針返回值 :無(wú)*/void PutString0(uchar *ptr) while(*ptr != '0') Send1Char(*ptr+); / 發(fā)送數(shù)據(jù) 2、程序2:轉(zhuǎn)換結(jié)果顯示在1602顯示模塊上“main.c”程序#include <msp430x14x.h>#include "cry1602.h"typedef unsigned char uchar;typedef u
14、nsigned int uint;/*宏定義*/#define DataDir P2DIR#define DataPort P2OUT#define Busy 0x80#define CtrlDir P6DIR#define CLR_RS P6OUT&=BIT3; /RS = P6.3#define SET_RS P6OUT|=BIT3;#define CLR_RW P6OUT&=BIT4;/RW = P6.4#define SET_RW P6OUT|=BIT4;#define CLR_EN P6OUT&=BIT5;/EN = P6.5#define SET_EN P6
15、OUT|=BIT5;/*函數(shù)名稱:DispNchar功 能:讓液晶從某個(gè)位置起連續(xù)顯示N個(gè)字符參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo) n-字符個(gè)數(shù) ptr-指向字符存放位置的指針返回值 :無(wú)*/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 = 1;/*函數(shù)名稱:LocateXY功 能:向液晶輸入顯示字符位置的坐標(biāo)信息參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo)返回值 :無(wú)*/void Loca
16、teXY(uchar x,uchar y) uchar temp;temp = x&0x0f;y &= 0x01;if(y) temp |= 0x40; /如果在第2行temp |= 0x80; LcdWriteCommand(temp,1);/*函數(shù)名稱:Disp1Char功 能:在某個(gè)位置顯示一個(gè)字符參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo) data-顯示的字符數(shù)據(jù)返回值 :無(wú)*/void Disp1Char(uchar x,uchar y,uchar data) LocateXY( x, y );LcdWriteData( data );/*函數(shù)名稱:LcdReset功
17、 能:對(duì)1602液晶模塊進(jìn)行復(fù)位操作參 數(shù):無(wú)返回值 :無(wú)*/void LcdReset(void) CtrlDir |= 0x07; /控制線端口設(shè)為輸出狀態(tài) DataDir = 0xFF; /數(shù)據(jù)端口設(shè)為輸出狀態(tài) LcdWriteCommand(0x38, 0); /規(guī)定的復(fù)位操作Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 1);/顯示模式設(shè)置 LcdWriteCommand(0x08, 1);/顯示關(guān)閉 LcdWriteCo
18、mmand(0x01, 1); /顯示清屏LcdWriteCommand(0x06, 1);/寫字符時(shí)整體不移動(dòng)LcdWriteCommand(0x0c, 1);/顯示開,不開游標(biāo),不閃爍/*函數(shù)名稱:LcdWriteCommand功 能:向液晶模塊寫入命令參 數(shù):cmd-命令, chk-是否判忙的標(biāo)志,1:判忙,0:不判返回值 :無(wú)*/void LcdWriteCommand(uchar cmd,uchar chk) if (chk) WaitForEnable(); / 檢測(cè)忙信號(hào)?CLR_RS;CLR_RW; _NOP();DataPort = cmd; /將命令字寫入數(shù)據(jù)端口 _NOP
19、();SET_EN; /產(chǎn)生使能脈沖信號(hào)_NOP();_NOP();CLR_EN;/*函數(shù)名稱:LcdWriteData功 能:向液晶顯示的當(dāng)前地址寫入顯示數(shù)據(jù)參 數(shù):data-顯示字符數(shù)據(jù)返回值 :無(wú)*/void LcdWriteData( uchar data ) WaitForEnable(); /等待液晶不忙SET_RS;CLR_RW; _NOP(); DataPort = data; /將顯示數(shù)據(jù)寫入數(shù)據(jù)端口 _NOP();SET_EN; /產(chǎn)生使能脈沖信號(hào)_NOP(); _NOP(); CLR_EN;/*函數(shù)名稱:WaitForEnable功 能:等待1602液晶完成內(nèi)部操作參 數(shù)
20、:無(wú)返回值 :無(wú)*/void WaitForEnable(void) P2DIR &= 0x00; /將P4口切換為輸入狀態(tài)CLR_RS;SET_RW;_NOP();SET_EN; _NOP();_NOP();while(P2IN & Busy)!=0); /檢測(cè)忙標(biāo)志CLR_EN; P2DIR |= 0xFF; /將P4口切換為輸出狀態(tài) /*函數(shù)名稱:Delay5ms功 能:延時(shí)約5ms參 數(shù):無(wú)返回值 :無(wú)*/void Delay5ms(void) uint i=40000; while (i != 0) i-; /*函數(shù)名稱:Delay400ms功 能:延時(shí)約400ms參
21、 數(shù):無(wú)返回值 :無(wú)*/void Delay400ms(void) uchar i=50;uint j; while(i-)j=7269;while(j-);“cry1602.c”程序#include <msp430x14x.h>#include "cry1602.h"typedef unsigned char uchar;typedef unsigned int uint;/*宏定義*/#define DataDir P2DIR#define DataPort P2OUT#define Busy 0x80#define CtrlDir P6DIR#define
22、 CLR_RS P6OUT&=BIT3; /RS = P6.3#define SET_RS P6OUT|=BIT3;#define CLR_RW P6OUT&=BIT4;/RW = P6.4#define SET_RW P6OUT|=BIT4;#define CLR_EN P6OUT&=BIT5;/EN = P6.5#define SET_EN P6OUT|=BIT5;/*函數(shù)名稱:DispNchar功 能:讓液晶從某個(gè)位置起連續(xù)顯示N個(gè)字符參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo) n-字符個(gè)數(shù) ptr-指向字符存放位置的指針返回值 :無(wú)*/void DispNCha
23、r(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 = 1;/*函數(shù)名稱:LocateXY功 能:向液晶輸入顯示字符位置的坐標(biāo)信息參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo)返回值 :無(wú)*/void LocateXY(uchar x,uchar y) uchar temp;temp = x&0x0f;y &= 0x01;if(y) temp |= 0x40; /如果在第2行temp |= 0x80; LcdWri
24、teCommand(temp,1);/*函數(shù)名稱:Disp1Char功 能:在某個(gè)位置顯示一個(gè)字符參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo) data-顯示的字符數(shù)據(jù)返回值 :無(wú)*/void Disp1Char(uchar x,uchar y,uchar data) LocateXY( x, y );LcdWriteData( data );/*函數(shù)名稱:LcdReset功 能:對(duì)1602液晶模塊進(jìn)行復(fù)位操作參 數(shù):無(wú)返回值 :無(wú)*/void LcdReset(void) CtrlDir |= 0x07; /控制線端口設(shè)為輸出狀態(tài) DataDir = 0xFF; /數(shù)據(jù)端口設(shè)為輸出狀態(tài) Lcd
25、WriteCommand(0x38, 0); /規(guī)定的復(fù)位操作Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();LcdWriteCommand(0x38, 1);/顯示模式設(shè)置 LcdWriteCommand(0x08, 1);/顯示關(guān)閉 LcdWriteCommand(0x01, 1); /顯示清屏LcdWriteCommand(0x06, 1);/寫字符時(shí)整體不移動(dòng)LcdWriteCommand(0x0c, 1);/顯示開,不開游標(biāo),不閃爍/*函數(shù)名稱:LcdWriteCommand功 能:向液晶模塊寫入命令參 數(shù):cmd-命令, ch
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寄賣合同協(xié)議書
- 小孩上學(xué)租房合同
- 翻譯服務(wù)協(xié)議合同
- 天花吊頂裝修合同
- 合同之店員聘用合同
- 房屋中介居間合同
- 學(xué)校食堂肉類供貨合同年
- 有關(guān)設(shè)備購(gòu)銷合同
- 新材料生產(chǎn)加工合同
- 星酒店投資技術(shù)服務(wù)合同
- 2025年中國(guó)國(guó)投高新產(chǎn)業(yè)投資集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 年產(chǎn)10噸功能益生菌凍干粉的工廠設(shè)計(jì)改
- 《中小學(xué)綜合實(shí)踐活動(dòng)課程指導(dǎo)綱要》附件
- 設(shè)備故障報(bào)修維修記錄單
- 學(xué)校安全隱患網(wǎng)格化管理平臺(tái)系統(tǒng)操作手冊(cè)
- 體驗(yàn)式家長(zhǎng)會(huì)PPT學(xué)習(xí)教案
- 史上最全石油英語(yǔ)詞匯
- 表面粗糙度等級(jí)對(duì)照表模板.doc
- 天然氣門站操作規(guī)程
- 律師事務(wù)所主任在司法行政工作會(huì)議上的發(fā)言稿
- 初中三角函數(shù)計(jì)算題100道
評(píng)論
0/150
提交評(píng)論