單片機頻率計數器的設計ppt課件內容預覽:
1.掌握單片機的工作原理,最小系統的設計,外部中斷和
定時中斷。
2、了解數字頻率計測頻率與測周期的基本原理;熟練掌握
數字頻率計的設計與調試方法。
3、掌握3.掌握C51編寫中斷程序。
4、掌握PROTEUS仿真,燒寫器的使用,硬件電路設計、焊
接、裝配,培養學生利用單片機技術解決生活中的實際
問題的能力。
一、任務描述
1、設計一個能夠計數和計時的產品,測量1s內的脈沖個數即
頻率計,利用單片機外部中斷和定時中斷。
2、利用Keil C 軟件編寫主函數、外部中斷和定時中斷C程序
代碼。
3、測量信號:方波 ;正弦波;三角波;采用用液晶顯示頻率值。
4、測量頻率范圍: 1Hz到9999Hz之間,要求頻率誤差小于1%。
1、進行功能分析,工作框架搭建,工作分工。
2、使用軟硬件開發平臺proteus 7.4進行電路仿真。設計要點:新建電路圖設計文件,查找元器件,放置元器件,布局布線,修改元器件屬性,進行仿真單片機程序。
3、使用單片機集成開發環境keil C2.0。要點:C程序構成, 關鍵詞,運算符與表達式,數據結構,結構化語句。
4、使用單片機下載軟件STC_ISP_V3.3,通過串口或USB將單片機程序下載到單片機芯片中進行調試。
5、完善單片機產品硬件電路,進行合適的電容、電阻、芯片、傳感器、顯示器件等進行焊接,通電運行后觀察硬件電路是否滿足要求。
6、完成實驗文檔編寫,包括:題目、作者、摘要、關鍵詞,緒論,硬件電路,軟件流程、代碼,數據分析。
誤差來源:
(1)、單片機計數速率的限制引起誤差。因為采用的是12 MHz的晶振,單
片機最大計數速度為500 kHz,所以當被測信號越接近500 kHz時,
測量結果與實際頻率的誤差就越大。而當被測信號大于500 kHz時,
頻率計將測不出信號頻率。
(2)、原理上存在±1誤差。由于該設計是在計數門限時間1秒內的頻率信
號脈沖數,所以定時開始時的第一個脈沖和定時時間到時的最后一個
脈沖信號是否被記錄,存在隨機性。
(3)、晶振的準確度會影響一秒定時的準確度,從而引起測量結果誤差。
減小誤差措施
(1)、選用頻率較高和穩定性好的晶振。
(2)、測量頻率低的信號時,可適當調整程序,延長門限時間,減少原理上
±1的相對誤差。
(3)、測量頻率較高的信號時,可先對信號進行分頻,再進行測量。
單片機源程序如下:
- #include<reg51.h>
- #include <stdio.h>
- #define uchar unsigned char
- uchar display_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
- //定義數組存放顯示數據的編碼
- uchar display_data[8]={0,0,0,0,0,0,0,0}; //定義數組存放顯示數據的各位
- uchar c1,b1;
- sbit P1_1=P1^1;
- void delay(void) //延時
- {
- uchar i;
- for(i=500;i>0;i--);
- }
- void display() //顯示程序
- {
- uchar i,k;
- k=0x01;
- for(i=0;i<8;i++)
- {
- P2=0;
- P0=display_code[display_data[i]];
- P2=k;
- k=k<<1;
- delay();
- }
- P2=0;
- }
- void convert() //轉換程序
- {
- uchar i,f2;
- long f,f1,k;
- f=c1*65536+TH1*256+TL1 ;
- f1=f-f%10; //此變量是為了讓八位LED的高位為0時不顯示而設置
- for(i=7;i>0;i--) //此循環將計數值轉換為顯示數組,從高位到低位依次存放在
- //display_data[0]至display_data[7]
- {display_data[i]=f%10;
- f=f/10;
- }
- display_data[0]=f;
- k=1e7; //從這開始到本子程序結束的語句完成讓八位LED的高位為0時不顯示
- for(i=0;i<7;i++)
- {f2=f1/k;
- if(f2==0)
- {
- display_data[i]=10;
- k=k/10;
- }
- }
- }
- void timer1(void) interrupt 3 //定時器1中斷服務程序
- {
- c1++;
- }
- void timer0(void) interrupt 1 //定時器0中斷服務程序
- {
- TH0=0xb1; //裝入時間常數
- TL0=0xe0;
- P1_1=!P1_1; //P1.1取反,從P1.1引腳輸出25Hz的方波信號,通過導線連接
- //到P3.5引腳輸入,以方便調試程序。若使用其它信號源,則去掉即可。
- if (b1==49)
- {
- convert();
- c1=0; //將計數值清零
- b1=0;
- TH1=0;
- TL1=0;
- }
- else b1++;
- }
- void main(void) //主函數
- {
- P1_1=0;
- c1=0;
- b1=0;
- TH1=0;
- TL1=0;
- TMOD=0x51;
- TH0=0Xb1;
- TL0=0Xe0;
- IE=0x8a;
- TCON=0x50;
- while(1)
- {
- display();
- }
- }
復制代碼
所有資料51hei提供下載:
任務2 簡易數顯頻率計數器的設計.rar
(986.15 KB, 下載次數: 86)
2018-3-21 09:14 上傳
點擊文件名下載附件
|