在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計數執行...