嵌入式系統開發課程_第1頁
嵌入式系統開發課程_第2頁
嵌入式系統開發課程_第3頁
嵌入式系統開發課程_第4頁
嵌入式系統開發課程_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

嵌入式系統開發課程-多路數據采集系統設計多路數據采集系統設計2016.061題目要求所設計的數據采集系統,共有16路信號輸入,每路信號都是0~10mV,每秒鐘采集一遍,將其數據傳給上位PC計算機,本采集地址為50H。要求多路模擬開關用4067,A/D轉換用ADC0809,運算放大器用0》07,單片機用89C51,芯片用MAX232。設計其電路原理圖,用C51語言編制工作程序。2總體方案設計根據題目要求,傳感器首先采集16路信號,然后被多路模擬開關4067選通某一路信號,接著通過信號調理電路,由A/D轉換器進行模/數轉換后發送給單片機,之后通過MAX232由RS232串口進行通訊,最終將數據傳遞到上位PC計算機。因此,數據采集系統主要包括以下幾個主要環節:?]信號選通環節由于題目要求采集的信號路數達到了16路,每一路信號的流通路線均相同。如果為每路信號都設置相應的放大、A/D轉換單元,成本將大幅度提升。因此可以接入一個多路模擬開關4076,輪流選通每一路信號,實現多路信號共用一個運算放大器和A/D轉換單元,即降低了成本,又簡化了電路。4067為16路模擬開關,其內部包括一個16選1的譯碼器和被譯碼輸出所控制的16個雙向模擬開關。當禁止端INH置0時,在I/N0-I/N15中被選中的某個輸入端與輸出公共端X接通,外部地址輸入端A、B、C、D決定了被選通端;當INH置1時所有模擬開關均處于斷路狀態。二信號調理電路為了方便信號的進一步傳輸和處理,一般均要在傳感器的輸出端接入信號調理電路,對傳感器輸出的信號進行變換、隔離、放大、濾波等處理。此處的信號波動范圍只有0?10mV,屬于微弱信號,需要進行放大處理。按照題目要求,本文設計的系統選用運算放大器OP07。OP07是一種高精的度單片運算放大器,其輸入失調電壓和漂移值均很低,適合用作前級放大器。,;A/D轉換器由于單片機只能處理數字信號,所以需要接入A/D轉換器將模擬信號轉換成數字信號。本文采用題目提供的ADC0809,它可以和單片機直接通訊。ADC0809由一個8路模擬開關、一個地址鎖存與譯碼器、一個A/D轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態輸出鎖器用于鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態輸出鎖存器取走轉換完的數據。此處采用中斷的方式使數據在單片機與ADC0809之間進行交換,端口地址為FF50H;P0口和WR信號共同生成單片機的啟動轉換信號;為了在啟動轉換的同時選通通道,將通道地址鎖存信號ALE與START相連;把P0口和RD同時處在有效位的組合信號與ad轉換器的輸出信號OE相連,那么通道的地址選擇和數據輸出共用一個地址,但是兩者不同時出現;轉換結束信號EOC通過非門后接至89C51的面端。二1串口發送電路RS232是用正負電壓來表示邏輯狀態,與TTL以高低電平表示邏輯狀態的規定不同。為了能夠同計算機接口或終端的TTL器件連接,必須在RS232與TTL電路之間進行電平的轉換。本文選用題目提供的MAX232芯片完成TTL,EIA的雙向電平轉換。?系統原理框圖16路模擬信號輸入多路模擬開關(4067)運算放大器(OP07)A/D轉換器(ADC0809)單片機(89C51)通信模塊(MAX232、RS232)PC上位計算機圖1系統原理框圖

3電路原理圖根據上文敘述的設計方案的原理,可以設計相應的硬件電路圖,如圖2所示。圖2電路原理圖4程序設計方案根據前文所述,要實現題目要求,系統程序要包含3個主要模塊,即初始化系統、A/D轉換模塊以及數據通信模塊。程序的總體流程圖如圖3所示。圖3程序總體流程圖系統初始化完成以及選通某一路模擬信號時,單片機啟動A/D轉換器,對信號進行的讀取、存儲操作。當上位機發出請求且要求的地址為50H時,單片機進入中斷處理子程序,上傳數據。]6系統初始化主要完成定時器,串行通信,中斷的相關設置。定時器T0工作于模式1,充當16位定時器,計數初值4C00H(對應50ms),便于實現1s的巡回采樣;定時器T1工作于模式2,充當波特率發生器,計數初值FDH,SMOD=0,得到波特率為9?6K。串行通信SMOD置1,允許單片機接收信號。使能定時器丁0、外中斷1、串行通信的中斷。其中,T0中斷完成1s的巡回采樣,外中斷1完成A/D轉換,串行通信中斷完成與上位機的通信。2"A/D轉換用P1.4作為4067的使能控制;用P1.0、P1.1、P1.2、P1.3的組合狀態作為4067的通道地址選擇信號。用P2.7作為A/D轉換器的使能控制,數據從IN0輸入,地址映射為7FF0H。通過外部中斷1巡回采集16路信號,并存入從50H開始的后續單元里。2.S數據通信當數據轉換完成后,由單片機向上位機發送聯絡信號AAH,然后等待上位機返回應答信號:如果應答信號為BBH,則向上位機發送數據;反之則繼續發送聯絡信號,并等待應答。為了避免意外情況導致的死循環,所以加入了1s的超時驗證,以保證下一次的巡回采樣得以順利進行。3源程序代碼,業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業/********************************************************************Filename:program.cProgrammer:李博業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業f*********************************************************************,業業業業業業業業業業業業業業業業業業業業業業業業業業業<1「廣//Hale業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業//***************************大文件**********************************/#include"reg52.h"#include"absacc.h"f9K?K9K?K9K?K9K?K9K?K9K?K9K?K9K?K9K?K9K?K9K?K9K?KSe?K?TET€±7VJ3K9K3K9K3K9K3K9K3K9K3K9K3K9K3K9K3K9K3K9K3K9K3K9K3K9K3K9K9K9K9K9K3K9K3K//**************************宏定又***********************************/#defineucharunsignedchar#defineIN0XBYTE[0x7FF0]〃定義ADC0809的IN0口地址#defineP27P2A7/ZP2.7口,作為ADC0809的使能信號(低電平有效)

#definechannelP1/*P1.4作為4067的使能信號(低電平有效),P1.0、P1.1、P1.2、P1.3#definechannelP1/*P1.4作為4067的使能信號(低電平有效),P1.0、P1.1、P1.2、P1.3作為通道選擇*///4067使能控制端口(低電平有,業業業業業業業業業業業業業業業業業業業業業業業業業業口業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業,/**************************全局^量***********************************/uchardata*result=0X50;//A/D轉換的結果存入0X50及其后續地址單元ucharT0_count;〃定時器T0計數,實現1s延時/*********************系統初始化函數initial。***************************/voidinitial。/**************************定時器初始化*******************************/TMOD=0X21;/*定時器T0工作于模式1,充當16位定時器;T1工作于模式2,充當波特率發生器*/〃定時器T0的計數初值設為4C00H(對應50ms)TL0=0X00;TH0=0X4C;TL1=0XFD;TH1=0XFD;/*定時器T0工作于模式1,充當16位定時器;T1工作于模式2,充當波特率發生器*/〃定時器T0的計數初值設為4C00H(對應50ms)TL0=0X00;TH0=0X4C;TL1=0XFD;TH1=0XFD;T0count=20;g業業業業業業業業業業業業業業業業業業業業業業業業業業uttA±^4n-rJtZkZi>業業業業業業業業業業業業業業業業業業業業業業業業業業業業業//**************************串仃通信初始化*****************************/SMOD=0X00;〃波特率的SMOD=0SCON=0X50;〃工作于方式1,使能接收(REN==1)bithUl-?|iJ^ZvIl>—————————————————————————————————f/**************************中斷初始化*********************************/IT1=1;〃設置外中斷1中斷請求信號為下降沿IE=0X96;〃允許中斷淀時器丁0、外中斷1、串行通信TR0=1;〃啟動T0TR1=1;〃啟動T1,業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業/*****************************************************************************************AD轉換函數ADC0809。*****************************業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業,/voidADC0809(){channel=0X00;sbitADC_flag;換〃使能4067,同時選擇到channel1/*標志位:中斷響應前為0,voidADC0809(){channel=0X00;sbitADC_flag;換結束;轉換結束后,進入中斷胃1*/uchari;for(i=0;i<16;i++)ADC_flag=0;IN0=0;while(!ADC_flag);*(result+i)=IN0;channel=i;〃中斷響應前為0,以便循環等待轉換結束〃通過uchari;for(i=0;i<16;i++)ADC_flag=0;IN0=0;while(!ADC_flag);*(result+i)=IN0;channel=i;〃中斷響應前為0,以便循環等待轉換結束〃通過P2.7==0和WR啟動AD轉換/*AD轉換結束后,進入中斷程序,執行,flag置1,跳出循環,繼續執行下面的語句*/〃把轉換結果存入89C51的RAM中〃選中下一路通道p27=1;E4067=1;〃4067不使能,A/DC不使能/****執行完后,channel=15,result仍指向50H,4067不使能,ADC不使能業業業業業業業業業業//,業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業/********************串行通信函數rs232()*******************************業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業f**********************************************************************/voidRS232(){uchari;uchardata*receive=0X60;*receive=0X00;SBUF=0XAA;while(TI==0);TI=0;while(RI==0&&T0_count!=0);//把60H作為接受上位機信號的存儲單//在60H單元中放入初值00H〃向上位機發送AAH作為聯絡信號//等待發送完成,并置TI為0,以等待下一次發送/*等待上位機的應答信號***并加入加入1s超時的判斷***/if(T0_count!=0){RI=0;*receive=SBUF;receiveif(receive==0XBB)〃把接受到的應答信號存入〃上位機準備好接收數據,向上位機傳送數ET0=0;〃關掉T0中斷,保證在傳送數據的過程中不進行下一次采樣for(i=0;i<16;i++){SBUF=*(result+i);while(TI==0);TI=0;}ET0=1;〃開啟T0中斷,業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業/亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍亍mm^A/DC轉換INT1中斷,向單片機傳送數據*********************業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業,**********************************************************************/voidINT_ADC()interrupt2{ADC_flag=1;,業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業******************************************************************************************定時器T0中斷,實現1s定時**************************業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業業/**********************************************************************/voidINT_T0()interrupt1〃定時器T0計數初值4C00H(對應50ms){TL0=0X00;TH0=0X4C;T0_count--;faleatealeatealeatealeatealeatealeatealeatealeatealeatealeate

溫馨提示

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

評論

0/150

提交評論