8052頻率計(計數器2和定時器0的結合)

2022-02-06 03:21:40 字數 2212 閱讀 7048

在scdn上發了一篇博文,

這裡在對其進行了些許修改,以便把量程改一下,同時改為6位led顯示:

/*

******

************************************

函式功能:51微控制器製作的頻率計(當然這個頻率計的頻率範圍是有限制的理論值為2hz-1mhz)

編譯環境:keil4

測試環境:科技創新實驗室學習板

設計思想:測頻率,其實就是乙個定時計數的過程,在一定時間內,檢測脈衝的個數,最後用脈衝個數除以時間便可以得到頻率

修改 : liming wangqidong

板子 : ccdz-c board

cpu : stc89c52rc

晶振 : 12mhz

修改部分:

1、led顯示部分,改為6位顯示

2、修改delay函式 延時5ms 優化led顯示 改為乙個for迴圈 **更為簡練

3、刪除定時器1的8位過載計數器,

4、新增定時器2,並設定為16位過載計數器提高量程範圍

在2hz~999999hz之間

訊號輸入引腳為p1.0(t2)

版本 : 0.4.0

********

***************************************

*/#include

#include

#define uchar unsigned char

#define uint unsigned intsbit dula=p2^6

;sbit wela=p2^7;//

uchar seg_du=;

//數碼管的段選

uchar seg_du=;

//數碼管的段選

uchar dbuf[

6]=; //

用來裝顯示資料的空陣列

unsigned int count; //

定時1s只之用

unsigned int

coul;

unsigned

char

timer2_cnt;

unsigned

long

frequency;

void delay(void) //

延時函式用於數碼管動態掃瞄

void display_simplified(void)}

void timer0 (void)interrupt 1

//定時器0中斷,用與定時計數}//

timer 2 interrupt isr

void timer_2_isr(void) interrupt 5

//timer 0 timer mode mode-2: 8 bits-reload

//250us*4000=1s

void timer0_init() //

定時器0初始化

//用作計數器:16位過載模式的計數器

void timer2_init(void

)void

main()

}

具體的思想大家可以慢慢體驗,在以後我再寫點自己的理解。

8052計數器(定時器0和計數器1)

之前由於同學的乙個小實驗,需要用到頻率計,所以自己想搞乙個出來,於是網上找了很多資料,簡單的有用8052微控制器的定時器和計數器的結合來測其訊號的頻率,還有的是c8051f的捕捉功能,想來想去,還是想用用自己熟悉的8052的計數器功能,畢竟平時都用的是定時器功能,很少用到計數器功能,以便更加深入的運...

定時器 計數器

它由高8位和低8位兩個暫存器thx和tlx組成。tmod是定時器 計數器的工作方式暫存器,即控制它的工作方式。tcon是控制t0 t1的啟動和停止及設定溢位標誌。1 工作方式暫存器tmod注 tomd不可位定址 m1m0 工作方式 功能說明 00方式0 相容8048微控制器的13位定時器,thx的8...

定時器 計數器

定時 計數器的實質是加1計數器 16位的 由高8位和低8位兩個暫存器thx和tlx組成。低四位為外部中斷使用,高四位控制定時器 計數器。其中tf0 tf1為計數溢位中斷標誌位。tr0 tr1置1時,允許定時器 計數器執行 必要條件 如果該位為0,則一定禁止使能 符號1符號2 名稱說明 tr0計數執行...