微控制器中用定時器和計數器來求頻率計算公式是怎麼寫的

時間 2021-08-31 18:47:51

1樓:

也可以用65535-你計數大小,將得到的數轉換成16進位制數,所得到的高兩位元組就是thx,低兩位元組就是tlx。直接用16進位制形式賦值即可。如計時50ms,用65535-50000=15535=0x3caf,則thx=0x3c,tlx=0xaf.

這樣應該容易理解一點!

2樓:迎風搖擺的樹葉

12m的晶振近似計數器計數1,為1us,比如定時20ms=20000us則定時器初值設定為65535-20000.頻率是時間的倒數,反一下就可以了

3樓:宮調天王

用定時器來及頻率,你只需將定時器定時為1秒,1秒內的脈衝個數就是頻率了。如果你一定要公式,非常簡單,用計數器計到的脈衝個數除以定時時間就是頻率了。其中定時器每計一次的時間是晶振的十二分之一,例如,12m晶振就是(12*10^6)*(1/12)=1us.

4樓:r傻強

f=n/(n1*f1)=n/f1/n1=(取樣時間)/(脈衝個數)f:頻率

n:定時器的資料(程式裡面定義好得)

f1:晶振頻率(n/f1為 取樣時間)

n1:計數器的值(脈衝個數)

5樓:小郗的飛

看你用的是哪種方式定時

微控制器中定時計數器的th0和tl0的值如何計算?

6樓:一蜉蝣

微控制器在不同的工抄作方式襲下,計數器的位數不同bai,因而最大計數值du也不同。現

zhi在設最大計數值dao為m,那麼在各方式下的m值如下;

方式0:m=2^13=8192

方式1:m=2^16=65536

方式2:m=2^8=256

方式3:定時器0分為兩個8為定時器,所以兩個m均為256.

因為定時器是做加1計數,並在計滿溢位時產生中斷,因此初值x可以這樣計算:

x=m-計數值

現在舉例說明定時處置的計算方法,若80c51主頻為6mhz,要求產生1ms的定時,計算初值。

在6mhz的主頻下,計數器每加1所需的時間是2us。若果要產生1ms的計時就需要「加1」 500次。那麼500即為計數值,如果要求在方式1下工作,則計數初值x=m-計數值=65536-500=65036=fe0ch

程式設計題 設mcs-51微控制器系統中晶振頻率為12mhz,欲使用定時器/計數器1,採用方式1編寫實現1秒定時時間的程

7樓:擺渡青茫

void sheding()

void zhongduan() interrupt 3}

8樓:匿名使用者

#include

unsigned char i;

void main()}}

void a(void) interrupt 312mhz的51微控制器,經過12分頻後為1mhz,則一個指令週期為1/1mhz = 1us.

則定時50ms為 0xffff - 0x3cb0,即65535 - 15535 = 50000us = 50ms,則20次的定時:20×50ms=1s。

明白了嗎?怪簡單的問題……

祝你順利哦!

9樓:賺五百萬退休

這個太簡單了,給你個方法,你自己弄吧,不會多看看書。

1 使能定時器

2 使能定時器中斷

3 編寫中斷程式

我估計你是覺得1秒的時間,定時器達不到,你可以在中斷裡面再自己寫個計數,或者開啟計數器2,這樣兩兩相乘,時間就能到1秒鐘了。

要做到精確的定時,就要用計數器2,然後在keil裡可以看到時間,再對定時器進行微調就好了。

10樓:匿名使用者

採用12mhz晶振的51微控制器,軟體如下(除錯通過)

#include

#define periodh (65536l-50000l)/0x100 //設50ms中斷1次th1初值

#define periodl (65536l-50000l)%0x100 //設50ms中斷1次tl1初值

//如果需要極精確的延時,應根據實際編譯後的產生的彙編指令,扣除掉中斷響應中重灌所佔用的時間

unsigned int count;//延時時間變數

void timer1() interrupt 3 using 1

else

}//以秒為基本定時單位的子程式

void delay1s(unsigned char x)

main()

} delay1s函式是呼叫時才開始計時,根據需要的定時長度到時停止計時。如果定時精度要求不高,可以不用在中段服務程式中關閉定時器,每次呼叫誤差也就在50ms。

可以用keil**看一下實際時間

11樓:微控制器技術宅

#include

unsigned int num ;

void inittimer1(void)void main(void)

void timer1interrupt(void) interrupt 3

//1s時間到。}

12樓:倉庫管理專員

#include

#define uchar unsigned charuchar times;

void delay()}}

}main()

13樓:匿名使用者

void a(void) interrupt 3

微控制器的定時器計數器以查詢方式工作

都用定時器中斷,然後定時時間20us。p1.0口每經過5箇中斷進行翻轉,p1.1經過6個。這樣能滿足嗎?微控制器的定時器 計數器 以查詢方式工作,在p1.0口線上產生週期為200 s的連續方波,以中斷方式工作,在p1.1口線上產生週期為240 s的連續方波,假設晶振頻率為 12mhz,用組合語言程式...

請問,51微控制器我同時把計數器1和定時器0開啟,定時器1計數到255的時候,把TR1 TR0 0都關閉

aimei126良 要看你的定時器的工作方式,初值是多少。好好看看書吧 簡單 計數器1和定時器0都用中斷,tmod 0x61 定時器0方式1,計數器1方式2th0 0xfc 1ms初值 tl0 0x18 1ms初值 th1 0x0 tl1 0x0 et0 1 tr1 1 et1 1 ea 1 whi...

微控制器計數器問題,有關微控制器計數器的問題

採用中斷,多工查詢,好好協調,不至於有59ms的。請問怎麼讀定時器0的數值?使用傳送指令即可。但是,如果定時器0處於 計數中 數值的準確讀取,就比較困難。外部計數最好用計數中斷來做,要不很容易會漏掉脈衝的 你用中斷就好了 還有就是,如果你用的18b20測溫的話,你就不能一直測了,過段時間採集一次吧 ...