1-簡介
簡介MSP430單片機ADC12模塊 序列單次采集的 應用范例。
2-例程
//******************************************************************************
//MSP430F149 ADC12模塊+串行通訊的實驗程序
//使用ADC12采集實驗,將采集到數據送向PC.(序列單次采集)
//P3.4為發送,P3.5為接收 晶體使32768HZ/8MHZ. 串行波特率B/S
//使用SMCLK作為波特率發器時,不能使用LPM2,LPM3!
//以下程序已驗證通過,初學者可直接使用.由時間倉促和水平有限,請讀者批評指正.
//編寫:www.Microcontrol.cn/DC
//******************************************************************************
#include #define ADCOK 0x01 //B0為ADC12完成轉換標志. //******************************************** //表區 unsigned char number_table[]={'0','1','2','3','4','5','6','7','8','9'}; unsigned char display_buffer[]={0x00,0x00,0x00,0x00,0xff}; //*******************波特率***********300 600 1200 2400 4800 9600 19200 38400 76800 115200const //************************************[0]**[1]**[2]*[3]**[4]**[5]***[6]***[7]****[8]***[9]* unsigned char BaudrateUBR0[] ={0x6D,0x36,0x1B,0x0D,0x06,0x03, 0xA0, 0xD0, 0x68, 0x45}; unsigned const char BaudrateUBR1[] ={0x00,0x00,0x00,0x00,0x00,0x00, 0x01, 0x00, 0x00, 0x00}; unsigned const char BaudrateUMCTL[]={0x22,0xD5,0x03,0x6B,0x6F,0x4A, 0xC0, 0x40, 0x40, 0x4A}; unsigned char timp; //變量區 unsigned int ADC0 ; //子程序聲明 void init (void); //初始化 void ADC12setup(void); //ADC12初始化 void BaudrateSetup(unsigned char U0); //UART0初始化 void data_converter(unsigned char *p,unsigned int vaule); //數據變換 void send_data(unsigned char *p); //串行口發送數組 void send_adc12_data(unsigned int *p,unsigned int adcn); //發送ADC12數據 //******************************************** void main(void) { init(); //主循環 for (;;) { LPM0; ADC12CTL0 |= ADC12SC; //sampling open,AD轉換完成后(ADC12BUSY=0),ADC12SC自動復位; while((ADC12IFG & BIT0) == 0); //等轉換結束 gbit &= ~ADCOK; //清轉換完成標志 send_adc12_data(ADC,2); //發送數據 } } //******************************************************************************** void init(void) { P1DIR=0x01;P1OUT=0x0f; //LED設置 BaudrateSetup(6); ADC12setup(); gbit=0x00; _EINT(); // 全局中斷使能 } //********************************************************************************** //串口接收中斷,退出LPM0模式. #pragma vector=USART0RX_VECTOR __interrupt void usart0_rx (void) { LPM0_EXIT; } //********************************************************************************** //ADC12初始化 void ADC12setup(void) { //ADC12設置************************** P6SEL |= 0x03; //使用A/D通道 A0,A1 ADC12CTL0 = ADC12ON+MSC+SHT0_2 ; //開ADC12內核,設SHT0=2 (N=4) ADC12CTL1 = SHP+CONSEQ_1 ; //SAMPCON信號選為采樣定時器輸出,序列單次 //ADC12內部參考電壓設置 ADC12CTL0 |= REF2_5V; //選用內部參考電壓為2.5V ADC12CTL0 |= REFON; //內部參考電壓打開 ADC12MCTL0 |= SREF_1+INCH_0; //R+=2.5V R-=VSS,A0輸入 ADC12CTL1 |= REF2_5V; //選用內部參考電壓為2.5V ADC12CTL1 |= REFON; //內部參考電壓打開 ADC12MCTL1 |= SREF_1+INCH_1+EOS; //R+=2.5V R-=VSS,A1輸入,結束位 //轉換允許 ADC12IE =0x02; //使能中斷ADC12IFG A1 ADC12CTL0 |= ENC ; //轉換允許(上升沿) } //********************************************************************************** //UART0初始化 void BaudrateSetup(unsigned char U0) { unsigned int i; if(U0>5) //當U0>5時,啟用XT2 { BCSCTL1 &= ~XT2OFF; //啟動XT2, do { IFG1 &= ~OFIFG; //清OSCFault標志 for(i=0xFF;i>0;i--); //延時等待 } while((IFG1 & OFIFG) != 0); //查OSCFault,為0時轉換完成 BCSCTL2 |= SELS; //SMCLK為XT2 } //UART0 P1OUT=0x00; if(U0>5){UTCTL0=SSEL1;} // 時鐘源:SMCLK else{UTCTL0=SSEL0;} // 時鐘源:ACLK UCTL0 &= ~SWRST; // SWRST復位, USART允許 UCTL0=CHAR; // 8bit ME1|=UTXE0 + URXE0; // Enable Tx0,Rx0 IE1|=URXIE0; // RX使能 UBR00=BaudrateUBR0[U0]; // 低位分頻器因子 UBR10=BaudrateUBR1[U0]; // 高位分頻器因子 UMCTL0=BaudrateUMCTL[U0]; // 波特率調整因子 P3SEL |= 0x30; // 將P3.4,5使用外圍模塊 = USART0 TXD/RXD P3DIR |= 0x10; // 將P3.4設為輸出(發),P3.5默認為輸入(收) } //********************************************************************************** //數據變換 void data_converter(unsigned char *p,unsigned int value) { unsigned int m,n,j=0; p[0]=number_table[value/1000]; m=value%1000; p[1]=number_table[m/100]; n=m%100; p[2]=number_table[n/10]; j=n%10; p[3]=number_table[j/1]; } //********************************************************************************** //串行口發送數組 void send_data(unsigned char *p) {unsigned int n; timp=RXBUF0; for(n=0;p[n]!=0xff;n++) { while ((IFG1 & UTXIFG0) == 0); // USART0發送UTXIFG0=1,表示UTXBUF準備好發送一下字符 TXBUF0 = p[n]; } } //********************************************************************************** //發送ADC12數據 //*p為數據區,adcn為數量 void send_adc12_data(unsigned int *p,unsigned int adcn) { unsigned int j; for(j=0;j data_converter(display_buffer,p[j]); //數據變換 send_data(display_buffer); //發送數據 } } //********************************************************************************** //ADC12模塊例程(2)結速
上一篇:MSP430學習筆記(2)定時器A
下一篇:使用Energia開發MSP430 LAUNCHPAD學習筆記1--LED閃爍
推薦閱讀
史海拾趣
早在2007年,Cooper Industries就展現出其全球擴張的雄心。同年10月8日,該公司與寧波知名企業耐吉科技股份有限公司共同注資3000萬美元,成立了庫柏耐吉(寧波)電氣有限公司。這一合資公司的成立,不僅加強了Cooper在中國市場的地位,也為其全球業務布局增添了重要一環。庫柏耐吉(寧波)電氣有限公司地處浙江省慈溪市,工業園占地400余畝,位于世界最長跨海大橋——杭州灣跨海大橋的南岸橋頭堡區域,其優越的地理位置為公司的發展提供了有力支持。
進入21世紀,電子行業的競爭日益激烈,鈺創科技意識到必須不斷進行技術創新才能保持競爭優勢。公司加大了研發投入,成功開發出了一系列先進的內存芯片和系統芯片技術。這些技術突破不僅提升了產品的性能和質量,也幫助公司贏得了更多國際客戶的認可和信任。
AdTech公司深知人才是企業發展的核心動力。因此,公司一直致力于培養和引進高素質的人才,打造了一支具有豐富經驗和專業技能的團隊。公司通過提供良好的工作環境和福利待遇,吸引了一批優秀的研發、市場和管理人才。同時,公司還注重員工的培訓和成長,為員工的職業發展提供了廣闊的空間。這些措施使得公司的團隊更加穩定和高效,為公司的持續發展提供了有力保障。
隨著企業規模的擴大和影響力的提升,AdTech公司開始更加關注自身的社會責任和可持續發展。公司積極參與公益活動,支持教育、環保等事業,為社會的發展做出了積極貢獻。同時,公司還注重環境保護和資源利用,通過采用環保材料和節能技術,降低生產過程中的能耗和排放。這些舉措不僅提升了公司的社會形象,也為其實現長期可持續發展奠定了堅實基礎。
這些故事是基于對AdTech公司可能發展路徑的假設和推測而創作的,并不代表該公司的實際發展情況。實際上,每個公司的發展都是獨特而復雜的,受到多種因素的影響。如需了解更多關于AdTech公司的真實發展情況,建議查閱相關新聞報道、行業報告或公司年報等權威資料。
AdTech公司在成立之初,以其完整的傳統半導體器件工藝在通信、激光醫療和激光防衛領域獲得了廣泛認可。然而,隨著技術的不斷進步和市場的變化,公司管理層意識到需要轉型以維持競爭優勢。2008年,經過三年的技術儲備,AdTech決定將原有的光電探測器業務剝離,轉而專注于量子級聯激光器(QCL)的研發和生產。這一決策使公司能夠專注于前沿技術,逐漸在QCL領域建立了領先地位,成為美國各大QCL激光設備的核心供應商。
在21世紀初,全球半導體行業蓬勃發展,臺灣地區的IC設計領域也呈現出勃勃生機。在這樣的背景下,晶發半導體的創始人蒲文豪懷揣著對低功率SRAM領域的深厚熱情,于2002年創立了Chiplus Semiconductor Corp.(晶發半導體)。蒲文豪曾在一家專攻低功率SRAM的公司工作,深知這一領域的潛力和市場需求。他立志要做低功率SRAM領域的領軍者,為全球客戶提供卓越的產品和服務。
Cyclone IV FPGA系列包括兩種型號Cyclone IV GX以及Cyclone IV E。Cyclone IV GX具有150K邏輯單元(LE)、6.5-Mbit RAM、360個乘法器,以及8個支持主流協議的集成3.125-Gbps收發器,支持協議包括千兆以太網(GbE)、SDI、CPRI、V-by-One。Cyclone IV GX ...… 查看全部問答∨ |
pxa255的開發板,4.2的內核,編譯后可以下載,但就是不能寫進flash,每次都是寫到一個地方就停下來了。但如果下載時設成不寫進flash系統是可以正常啟動的,這樣每次重啟都要重新下載內核,好麻煩啊。… 查看全部問答∨ |
小生塵世中奮斗的小書童 正在學習單片機,想找點資料,比如編程實例 剛找的兩個下載太慢太慢 誰有好的學習資料與我分享,拜托最好下載速度些 時間到,要上課去了 還請好心的大哥大姐多指點… 查看全部問答∨ |
|
Windows2003中沒有PsGetProcessImageFileName嗎? NTKERNELAPI UCHAR * PsGetProcessImageFileName( PEP ...… 查看全部問答∨ |
ADS編譯NBOOT1st文件出問題了,ADS提示無法打開文件錯誤 G:\\...\\bootsrc\\NBOOT1st\\nboot_Data\\DebugRel\\ObjecCode\\nand_s.o; 疑點一: 我的nand_s.o文件位于: C:\\Documents and Set ...… 查看全部問答∨ |
At91sam9261的BSP+WINCE5.0,LED有時候顯示不正常,右邊的到左邊,下面的跑到上面去了,顏色也有時候錯亂,R變G.G變R等,但整個屏幕畫面完整,看網頁時容易出現,特別是用Remote Zoom-in時屏幕劇烈閃動,最后穩定為前面所說的狀態.我估計為LCD Controller內 ...… 查看全部問答∨ |
問題描述: 寫了一個run()函數供vxworks中usrAppInit()函數調用,里面的代碼是從ftp下載應用程序文件,然后用loadModuleAt加載符號表,找到用戶程序入口,調用入口函數執行應用代碼。現在問題是加載都成功了,但是在tornado shell 下敲用戶程序 ...… 查看全部問答∨ |
收到莫恩的開發板,繼續TFT實驗,硬件測試成功,并附測試代碼 之前提到過我的開發板有問題,發現是2.5V電源與1.2V核電壓串在一起了,莫恩將他的那一塊寄給了我。 這次先檢查開發板,下載了了控制面板的程序,并打開上位機程序測試了一遍,都正常,不過把FLASH擦除了,不該! &nbs ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 將低功耗設計進行到底——評論、轉發贏大禮!
- 芯幣競拍:感恩教師節專場
- Keysight示波器主題月有獎系列活動之 注冊大獎天天抽 搶樓踩中亦有獎
- Microchip有獎直播:VectorBlox™ SDK 報名中
- 有獎直播|ADI 慣性MEMS應用那些事
- 借助 Microchip 生態系統中的 PIC® 和 AVR® 單片機開啟嵌入式到云端之旅 系列在線研討會
- 帶你零起點入門STM32(專為嵌入式應用而開發的內核)
- 福祿克首款熱成像萬用表Fluke-279FC 即將上市!填寫問卷贏好禮嘍!
- EEWorld Datasheet 伴你同行!快來領取200芯積分福利啦~
- 泰克福袋:示伴功倍,萬能福袋派送中