51定時器初值計算有什麼簡便演算法嗎?

  • 作者:由 匿名使用者 發表于 動漫
  • 2022-09-02

51定時器初值計算有什麼簡便演算法嗎?晴說科技 2019-08-02

51微控制器定時器初值計算:

void main(void)

{

s1=1;

TMOD=0x01; //使用定時器T0的模式1

51定時器初值計算有什麼簡便演算法嗎?

TH0=(65536-46083)/256; //定時器T0的高8位設定初值

TL0=(65536-46083)%256; //定時器T0的低8位設定初值

函式功能:定時器T0的中斷服務函式

void Time0(void ) interrupt 1 using 0 //定時器T0的中斷編號為1,使用第1組工作暫存器

{

count++; //每產生1次中斷,中斷累計次數加1

if(count==20) //如果中斷次數計滿20次

count=0; //中斷累計次數清0

s++; //秒加1

定時器初值 46083 是怎麼計算出來的? 一般我們如用 AT892051的話 定時50MS 就是 TH0=(65536-50000)/256。使用的12M晶體 ,20次為1S。

擴充套件資料:

使用說明

以12M晶振為例:每秒鐘可以執行1000000次機器週期個機器週期。而T 每次溢位最多65536 個機器週期。我們儘量應該讓溢位中斷的次數最少(如50ms),這樣對主程式的干擾也就最小。

開發的時候可能會根據需要更換不同頻率的晶振(比如c51微控制器,用11。0592M的晶振,很適合產生串列埠時鐘,而12M晶振很方便計算定時器的時間),使用插接式比較方便。

對12MHz 1個機器週期 1us 12/fosc = 1us,方式0 13位定時器最大時間間隔 = 2^13 = 8。192ms,方式1 16位定時器最大時間間隔 = 2^16 = 65。536ms,方式2 8位定時器最大時間間隔 = 2^8 = 0。256ms =256 us。

定時5ms,計算計時器初值 M = 2^K-X*Fosc/12 12MHz。方式0: K=13,X=5ms,Fosc=12MHz 則 M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78。

THx = 0CH,TLx = 78H,方式1: K=16,X=5ms,Fosc=12MHz 則 M = 2^16 - 5*10^(-3)*12*10^6/12= 60536 = 0xEC78。

THx = ECH,TLx = 78H,50ms 12MHz THx = 3CH,TLx = B0H,10ms THx = D8H,TLx = F0H。

51定時器初值計算有什麼簡便演算法嗎?天天奕想 推薦於2017-11-24

交給微控制器去算咯,不用自己算

例如:12M晶振 50ms: TH1 = (65536 - 50000) / 256;TL1 = (65536 - 50000) % 256;

11。0592M晶振 50ms: TH1 = (65536 - (11。0592/12)*50000) / 256;

TL1 = (65536 - (11。0592/12)*50000) % 256;

51定時器初值計算有什麼簡便演算法嗎?47okey 2011-08-09

下載一個MCUtool ,很方便的。

51定時器初值計算有什麼簡便演算法嗎?mailzss 2011-08-09

網上有工具。

或者你自己用VC寫一個。

Top