單片機課程設計(數(shù)字頻率計)_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機原理與應用課程設計報告</p><p><b>  一、任務技術指標</b></p><p>  根據(jù)單片機課程所學內容,結合其他相關課程知識,設計一個數(shù)字頻率計,以加深對單片機知識的理解,本設計以MCS-51系列單片機為核心,采用常用電子器件設計。利用單片機的定時器和計數(shù)器實現(xiàn)對方波信號的頻率測量,閘門時間可選0.1秒、1秒、10秒,采用

2、六位LED顯示測量的頻率。</p><p><b>  二、總體設計思想</b></p><p><b>  1、基本原</b></p><p>  基本設計原理是直接用十進制數(shù)字顯示被測信號頻率的一種測量裝置。它以測量周期的方法對正弦波、方波、三角波的頻率進行自動的測量。</p><p>  所謂

3、“頻率”,就是周期性信號在單位時間(1s)內變化的次數(shù)。若在一定時間間隔T內測得這個周期性信號的重復變化次數(shù)N,則其頻率可表示為f=N/T。其中脈沖形成電路的作用是將被測信號變成脈沖信號,其重復頻率等于被測頻率fx。時間基準信號發(fā)生器提供標準的時間脈沖信號,若其周期為1s,則門控電路的輸出信號持續(xù)時間亦準確地等于1s。閘門電路由標準秒信號進行控制,當秒信號來到時,閘門開通,被測脈沖信號通過閘門送到計數(shù)譯碼顯示電路。秒信號結束時閘門關閉,

4、計數(shù)器停止計數(shù)。由于計數(shù)器計得的脈沖數(shù)N是在1秒時間內的累計數(shù),所以被測頻率fx=NHz。</p><p>  本系統(tǒng)采用測量頻率法,可將頻率脈沖直接連接到AT89C51的T0端,將T/C1用做定時器。T/C0用做計數(shù)器。在T/C1定時的時間里,對頻率脈沖進行計數(shù)。在1S定時內所計脈沖數(shù)即是該脈沖的頻率。見圖1:</p><p><b>  圖1測量時序圖</b>&l

5、t;/p><p>  由于T0并不與T1同步,并且有可能造成脈沖丟失,所以對計數(shù)器T0做一定的延時,以矯正誤差。具體延時時間根據(jù)具體實驗確定。</p><p><b>  2、系統(tǒng)框圖</b></p><p>  本頻率計的數(shù)據(jù)采集系統(tǒng)主要元器件是單片機AT89C51,由它完成對待測信號頻率的計數(shù)和結果顯示等功能,外部還要有分頻器、顯示器等器件???/p>

6、分為以下幾個模塊:放大整形模塊、秒脈沖產生模塊、換檔模擬轉換模塊、單片機系統(tǒng)、LCD顯示模塊。</p><p><b>  圖2系統(tǒng)框圖</b></p><p><b>  三、具體設計</b></p><p><b>  1.總體設計電路</b></p><p><b&

7、gt;  圖3頻率計原理圖</b></p><p><b>  2.模塊設計</b></p><p>  (1)、硬件系統(tǒng)構成:</p><p>  本頻率計的數(shù)據(jù)采集系統(tǒng)主要元器件是單片機AT89C51,由它完成對待測信號頻率的計數(shù)和結果顯示等功能,外部還要有分頻器、顯示器等器件??煞譃橐韵聨讉€模塊:放大整形模塊、秒脈沖產生模塊、

8、換檔模擬轉換模塊、單片機系統(tǒng)、LCD顯示模塊。系統(tǒng)框圖如下圖2:</p><p><b>  圖2系統(tǒng)框圖</b></p><p>  (2)、AT89C51單片機及其引腳說明:</p><p>  89C51是一種高性能低功耗的采用CMOS工藝制造的8位微控制器,它提供下列標準特征:4K字節(jié)的程序存儲器,128字節(jié)的RAM,32條I/O線,2

9、個16位定時器/計數(shù)器, 一個5中斷源兩個優(yōu)先級的中斷結構,一個雙工的串行口, 片上震蕩器和時鐘電路。</p><p><b>  引腳說明:</b></p><p><b>  ·VCC:電源電壓</b></p><p><b>  ·GND:地</b></p>

10、<p>  ·P0口:P0口是一組8位漏極開路型雙向I/O口,作為輸出口用時,每個引腳能驅動8個TTL邏輯門電路。當對0端口寫入1時,可以作為高阻抗輸入端使用。</p><p>  當P0口訪問外部程序存儲器或數(shù)據(jù)存儲器時,它還可設定成地址數(shù)據(jù)總線復用的形式。在這種模式下,P0口具有內部上拉電阻。</p><p>  在EPROM編程時,P0口接收指令字節(jié),同時輸出指令

11、字節(jié)在程序校驗時。程序校驗時需要外接上拉電阻。</p><p>  ·P1口:P1口是一帶有內部上拉電阻的8位雙向I/O口。P1口的輸出緩沖能接受或輸出4個TTL邏輯門電路。當對P1口寫1時,它們被內部的上拉電阻拉升為高電平,此時可以作為輸入端使用。當作為輸入端使用時,P1口因為內部存在上拉電阻,所以當外部被拉低時會輸出一個低電流(IIL)。</p><p>  ·P2

12、口:P2是一帶有內部上拉電阻的8位雙向的I/O端口。P2口的輸出緩沖能驅動4個TTL邏輯門電路。當向P2口寫1時,通過內部上拉電阻把端口拉到高電平,此時可以用作輸入口。作為輸入口,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出電流(IIL)。</p><p>  P2口在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如MOVX @ DPTR)時,P2口送出高8位地址數(shù)據(jù)。在這種情況下,P2口使用強大的內

13、部上拉電阻功能當輸出1時。當利用8位地址線訪問外部數(shù)據(jù)存儲器時(例MOVX @R1),P2口輸出特殊功能寄存器的內容。</p><p>  當EPROM編程或校驗時,P2口同時接收高8位地址和一些控制信號。</p><p>  ·P3口:P3是一帶有內部上拉電阻的8位雙向的I/O端口。P3口的輸出緩沖能驅動4個TTL邏輯門電路。當向P3口寫1時,通過內部上拉電阻把端口拉到高電平,

14、此時可以用作輸入口。作為輸入口,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出電流(IIL)。</p><p>  P3口同時具有AT89C51的多種特殊功能,具體如下表1所示:</p><p>  表1 P3口的第二功能</p><p>  ·RST:復位輸入。當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期的高電平將使單片機復位。</p>

15、<p>  ·ALE/:當訪問外部存儲器時,地址鎖存允許是一輸出脈沖,用以鎖存地址的低8位字節(jié)。當在Flash編程時還可以作為編程脈沖輸出()。</p><p>  一般情況下,ALE是以晶振頻率的1/6輸出,可以用作外部時鐘或定時目的。但也要注意,每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。</p><p>  ·:程序存儲允許時外部程序存儲器的讀選通

16、信號。當AT89C52執(zhí)行外部程序存儲器的指令時,每個機器周期兩次有效,除了當訪問外部數(shù)據(jù)存儲器時,將跳過兩個信號。</p><p>  ·/VPP:外部訪問允許。為了使單片機能夠有效的傳送外部數(shù)據(jù)存儲器從0000H到FFFH單元的指令,必須同GND相連接。需要主要的是,如果加密位1被編程,復位時EA端會自動內部鎖存。</p><p>  當執(zhí)行內部編程指令時,應該接到VCC端。

17、</p><p>  ·XTAL1:振蕩器反相放大器以及內部時鐘電路的輸入端。</p><p>  ·XTAL2:振蕩器反相放大器的輸出端。</p><p>  在本次設計中,采用89C51作為CPU處理器,充分利用其硬件資源,結合D觸發(fā)器CD4013,分頻器CD4060,模擬轉換開關CD4051,計數(shù)器74LS90等數(shù)字處理芯片,主要控制兩大硬

18、件模塊,量程切換以及顯示模塊。下面還將詳細說明。</p><p>  (3)、信號調理及放大整形模塊: 放大整形系統(tǒng)包括衰減器、跟隨器、放大器、施密特觸發(fā)器。它將正弦輸入信號Vx整形成同頻率方波Vo,幅值過大的被測信號經(jīng)過分壓器分壓送入后級放大器,以避免波形失真。由運算放大器構成的射級跟隨器起阻抗變換作用,使輸入阻抗提高。同相輸入的運算放大器的放大倍數(shù)為(R1+R2)/R1,改變R1的大小可以改變放大倍數(shù)

19、。系統(tǒng)的整形電路由施密特觸發(fā)器組成,整形后的方波送到閘門以便計數(shù)。</p><p>  由于輸入的信號幅度是不確定、可能很大也有可能很小,這樣對于輸入信號的測量就不方便了,過大可能會把器件燒毀,過小可能器件檢測不到,所以在設計中采用了這個信號調理電路對輸入的波形進行阻抗變換、放大限幅和整形,信號調理部分電路具體實現(xiàn)電路原理圖和參數(shù)如下圖4:</p><p>  圖4 信號放大模塊電路圖&l

20、t;/p><p>  (4)、時基信號產生電路:</p><p>  CD4013------雙上升沿D觸發(fā)器 ,引腳及功能見如下圖5:</p><p>  圖5 D觸發(fā)器引腳及功能圖</p><p>  CD4013 由兩個相同的、相互獨立的數(shù)據(jù)型觸發(fā)器構成。每個觸發(fā)器有獨立的數(shù)據(jù)置位復位時鐘輸入和 Q及Q非輸出。此器件可用作移位寄存器,且通過

21、將Q非輸出連接到數(shù)據(jù)輸入,可用作計數(shù)器和觸發(fā)器。在時鐘上升沿觸發(fā)時,加在D 輸入端的邏輯電平傳送到Q輸出端。置位和復位或復位線上的高電平完成。</p><p>  CD4060------14位二進制串行計數(shù)器,引腳及功能見如下圖6: </p><p>  CD4060 由一震蕩器和14極二進制串行計數(shù)器位組成,震蕩器的結構可以是RC或晶振電路。CR為高電平時,計數(shù)器清零且振蕩器使用無效,

22、所有的計數(shù)器位均為主從觸發(fā)器 CP1非(和 CP0)的下降沿計數(shù)器以二進制進行計數(shù),在時鐘脈沖線上使用施密特觸發(fā)器對時鐘上升和下降時間無限制。 </p><p>  圖6 進制串行計數(shù)器引腳及功能圖</p><p>  時基信號的產生原理:</p><p>  本電路采用32768HZ晶體震蕩器,利用CD4060芯片經(jīng)過14級分頻得到2HZ的信號(32768/21

23、4),在經(jīng)過CD4013雙D觸發(fā)器經(jīng)過二分頻得到0.5HZ的方波,即輸出秒脈沖信號使單片機進行計數(shù)。</p><p><b>  (5)、顯示模塊</b></p><p><b>  1602基本技術:</b></p><p><b>  1)、主要功能</b></p><p>

24、;  A、 40通道點陣LCD 驅動;</p><p>  B、 可選擇當作行驅動或列驅動;</p><p>  C、 輸入/輸出信號:輸出,能產生20×2個LCD驅動波形;輸入,接受控制器送出的串行數(shù)據(jù)和控制信號,偏壓(V1∽V6);</p><p>  D、 通過單片機控制將所測的頻率信號讀數(shù)顯示出來。</p><p><

25、b>  2)、技術參數(shù)</b></p><p>  2.1)極限參數(shù)表2:</p><p><b>  表2 極限參數(shù)表</b></p><p>  2.2) 電參數(shù)表3:</p><p><b>  表3 電參數(shù)表</b></p><p>  3)、時序特

26、性表4:</p><p><b>  表4 時序特性表</b></p><p>  4)、引腳和指令功能</p><p>  4.1)模塊引腳功能表5:</p><p>  表5 模塊引腳功能表</p><p>  4.2)寄存器選擇功能表6:</p><p>  表6 寄

27、存器功能選擇表</p><p><b>  4.3) 指令功能</b></p><p>  格式:RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p>  共11種指令:清除,返回,輸入方式設置,顯示開關,控制,移位,功能設置,CGRAM地址設</p><p> 

28、 置,DDRAM地址設置,讀忙標志,寫數(shù)據(jù)到CG/DDRAM,讀數(shù)據(jù)由CG/DDRAM。</p><p>  5)、顯示位與DD RAM 地址的對應關系表7:</p><p>  表7 顯示位與DD RAM地址關系表</p><p><b> ?。?)、軟件設計</b></p><p>  1)、主程序main流程圖&l

29、t;/p><p><b>  圖7 主程序流程圖</b></p><p><b>  (2)、程序</b></p><p>  /*簡易數(shù)字頻率計:T1定時計器,T0計數(shù)器,由P34(/T0)口輸入待測頻率*/</p><p>  /*T1定時1S,在這1S內T1的計數(shù)值就是待測的頻率值。*/</

30、p><p>  #include<reg52.h>//頭文件</p><p>  #include<intrins.h>//頭文件</p><p>  #define uchar unsigned char//宏定義</p><p>  #define uint unsigned int//宏定義</

31、p><p>  sfr16 DPTR=0x82;//定義DPTR</p><p>  bit status_F=1;//狀態(tài)標志位</p><p>  uint aa, qian, bai,shi,ge,bb,wan,shiwan; //定義變量</p><p>  uchar cout;</p><p>  unsig

32、ned long temp;//定義長整型變量</p><p>  /*數(shù)碼管顯示0-9*/</p><p>  uchar code </p><p>  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p><

33、;p><b>  /*子函數(shù)聲明*/</b></p><p>  void delay(uint z);</p><p>  void init();</p><p>  void display(uint shiwan,uint wan,uint qian,uint bai,uint shi,uint ge);</p>

34、<p>  void xtimer0();</p><p>  void xtimer1();</p><p><b>  /*主函數(shù)*/</b></p><p>  void main()</p><p><b>  {</b></p><p>  P0

35、=0XFF; //初始化P0口</p><p>  init();//調用定時器,計數(shù)器初始化</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(aa==19)//定時20*50MS=1S</p><p>

36、<b>  {</b></p><p>  aa=0;//定時完成一次后清0</p><p>  status_F=1;//完成計數(shù) </p><p>  TR1=0; //關閉T1定時檻,定時1S完成</p><p>  delay(46); //延時較正誤差</p><p>  TR0=0;

37、//關閉T0</p><p>  DPL=TL0; //計數(shù)量的低8位</p><p>  DPH=TH0;//計數(shù)量的高8位</p><p>  temp=DPTR+cout*65535; //計數(shù)值放入變量</p><p>  shiwan=temp%1000000/100000;</p><p>  wan=te

38、mp%100000/10000;</p><p>  qian=temp%10000/1000;//顯示千位</p><p>  bai=temp%1000/100;//顯示百位</p><p>  shi=temp%100/10;//顯示十位</p><p>  ge=temp%10;//顯示個位</p><p>&

39、lt;b>  }</b></p><p>  display(shiwan,wan,qian,bai,shi,ge); //調用顯示函數(shù)</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*定時器,計數(shù)器初始化*/</p

40、><p>  void init()</p><p><b>  {</b></p><p>  temp=0;//變量賦初值</p><p><b>  aa=0;</b></p><p><b>  cout=0;</b></p><

41、;p>  IE=0X8A;//開中斷,T0,T1中斷</p><p>  TMOD=0x15;//T1為定時器工作于方式1,T0為計數(shù)器工作于方式1</p><p>  TH1=0x3c;//定時器賦高8初值 , 12M晶振</p><p>  TL1=0xb0;//定時器賦低8初值 , 12M晶振</p><p>  TH0=0;

42、//計數(shù)器賦高8初值初值</p><p>  TL0=0;//計數(shù)器賦低8初值</p><p>  TR1=1;//開定時器1</p><p>  TR0=1;//開計數(shù)器0</p><p><b>  }</b></p><p><b>  /*顯示子函數(shù)*/</b><

43、;/p><p>  void display(uint shiwan,uint wan,uint qian,uint bai,uint shi,uint ge)</p><p><b>  {</b></p><p>  P0=0xdf;//P0口是位選 1101 1111 改成 1111 1101 ==0XDF</p><

44、;p>  P2=table[shiwan];//顯示shiwan位</p><p><b>  delay(5);</b></p><p>  P0=0xef;//P0口是位選 1110 1111 改成 1111 1110 ==0XFE</p><p>  P2=table[wan];//顯示wan位</p><

45、;p><b>  delay(3);</b></p><p>  P0=0xf7;//P0口是位選 1111 01111 改成 0111 1111==0X7F </p><p>  P2=table[qian];//顯示千位</p><p><b>  delay(3);</b></p>&l

46、t;p>  P0=0xfb;//P0口是位選 1111 1011 改成 1011 1111==0XBF</p><p>  P2=table[bai];//顯示百位</p><p><b>  delay(3);</b></p><p>  P0=0xfd; //P0口是位選 1111 1101 改成 1101 1111

47、 ==0XDF</p><p>  P2=table[shi];//顯示十位</p><p><b>  delay(3);</b></p><p>  P0=0xfe;//P0口是位選 1111 1110 改成 1110 1111 ==0XEF</p><p>  P2=table[ge];//顯示個位</p

48、><p><b>  delay(3);</b></p><p><b>  }</b></p><p>  /*定時中斷子函數(shù)*/</p><p>  void xtimer1() interrupt 3</p><p><b>  {</b><

49、/p><p>  TH1=0x3c;//定時器賦高8初值</p><p>  TL1=0xb0;//定時器賦低8初值</p><p><b>  aa++;</b></p><p><b>  }</b></p><p>  /*計數(shù)器中斷子函數(shù)*/</p><

50、;p>  void xtimer0() interrupt 1</p><p><b>  { </b></p><p><b>  cout++;</b></p><p><b>  }</b></p><p>  /*延時子函數(shù)。延時1MS*/</p>

51、<p>  void delay(uint z)</p><p><b>  {</b></p><p><b>  uint i,j;</b></p><p>  for(i=0;i<z;i++)</p><p>  for(j=0;j<110;j++);//j上限為1

52、25</p><p><b>  }</b></p><p><b>  3.仿真結果與分析</b></p><p>  此間易頻率計的特點是由于加入了延時補償,對于低頻率脈沖能夠準確計數(shù),對于較高頻率,則頻率越高,誤差越大。但總體來講,誤差相對較小。</p><p> ?。?).在1~3257HZ

53、,測量結果是準確的,如圖8所示1HZ,1KHZ,3257HZ的仿真圖:</p><p>  圖8 1HZ,1KHZ,3257HZ的仿真圖</p><p> ?。?).在3258HZ~9.5KHZ的時候測量有誤差并且慢慢減少。</p><p>  在3258HZ時候達到最大誤差0.03069%,如圖9。9.5KHZ時候達到最小誤差0.01368%。如圖10:</

54、p><p>  圖9 測量3258HZ的仿真結果</p><p>  圖10 測量95013HZ的仿真結果</p><p> ?。?).從9.6KHZ~999.7629KHZ,測量誤差越來越大,在9.6KHZ為0.01458%,在999.7629KHZ</p><p><b>  時為0.0237%</b></p>

55、;<p>  圖11 測量9.6KHZ、 999.7629KHZ的仿真結果</p><p><b>  四、結論</b></p><p>  在單片機應用系統(tǒng)設計時,必須先確定該系統(tǒng)的技術要求,這是系統(tǒng)設計的依據(jù)和出發(fā)點,整個設計過程都必須圍繞這個技術要求來工作。在設計時遵循從整體到局部也即自上而下的原則。把復雜的問題分解為若干個比較簡單的、容易處理的問

56、題,分別單個的加以解決。將總任務分解成可以獨立表達的子任務,這些子任務再向下分,直到每個子任務足夠簡單,能夠直接而容易的實現(xiàn)為止。在程序調試時應按各個功能模塊分別調試。</p><p>  在程序設計時,正確合理的設計是非常重要的,正確的程序設計包括程序的結構是否合理,一些循環(huán)結構和循環(huán)指令的使用是否恰當,能否使用較少的循環(huán)次數(shù)或較快的指令,是否能把某些延遲等待的操作改為中斷申請服務,能否把某些計算方法和查表技術

57、適當簡化等。另外程序的設計要具有可擴展性,程序的結構要標準化,便于閱讀、修改和擴充。</p><p>  通過本次課程設計,我更加地了解和掌握單片機的基本知識和基本的編寫程序,也更加深入地了解單片機這么課程,掌握匯編語言的設計和調試方法。對于認識到自己在知識方面存在的不足,明確今后的學習方向是非常有益的。在設計過程中,得到了我的指導老師的悉心指導與幫助,在此一并表示衷心的感謝。</p><p&

58、gt;<b>  參考資料</b></p><p>  [1] 張毅坤,陳善久.單片微型計算機原理及應用.西安電子科技大學出版社,2002.</p><p>  [2] 張友德,趙志英,徐時亮.單片微機原理應用與實驗.復旦大學出版社,2000.</p><p>  [3] 張毅剛,彭善元,董繼承.單片機原理及應用.高等教育出版社,2003.&l

溫馨提示

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

評論

0/150

提交評論