**菜鳥關於51類微控制器的定時器初值計算問題的計算**
首先先來介紹微控制器的幾個週期:
1、時鐘週期,也稱為振盪週期:定義為時鐘脈衝的倒數,在微控制器中也就等於晶振的倒數。
51微控制器中把乙個時鐘週期定義為乙個節拍(用p表示),2個節拍定義為狀態週期(用s表示)
時鐘週期是微控制器中最小的時間單位。
eg:12m晶振的微控制器,時鐘週期=振盪週期=1/12 us。
2、機器週期:定義為完成一項基本操作所需要的時間,稱為機器週期。
在計算機中,為了方便管理,把一條指令的執行過程分為若干個階段,每個階段去執行一項基本操作。
如:取指令,儲存器讀,儲存器寫等。
在51微控制器中1個機器週期由6個狀態週期組成,也就是12個時鐘週期=12 x 1/12 us =1 us
定義機器週期是因為時鐘週期時間太短,根本做不了什麼。
3、指令週期:定義為執行一條指令所需的時間。
通常,包含乙個機器週期的指令稱為單週期指令,比如 mov指令,clr指令等。
包含兩個機器週期的指令稱為雙週期指令。
另外還有四週期指令。
小夥伴們看完了上面的週期是不是看懵了………hahahahahahaha
不要慌,其實我們這節課要用到的就一句話——在51微控制器中1個機器週期由6個狀態週期組成,也就是12個時鐘週期=12 x 1/12 us =1 us
這裡我們知道了乙個機器週期的時間是1us,所以如果我們要延時1ms就是1000個機器週期;
可能大家我們剛開始了解定時器的時候都會與疑惑,為什麼要用定時器這麼麻煩的東西,自己用delay()慢慢調乙個合適的引數就可以了。 其實如果深入了解定時器真的比delay() 強大太多我先列舉幾點:
1.就如上面所說用定時器定時1ms,這裡就要注意了,這個1ms不是和delay延時1ms一樣哦,這個1ms是精確的1ms哦,越往後學需要的定時就要求越高,所以定時器是一定要搞定的。
2.相比於delay計時,delay是要直接讓微控制器做空迴圈,死等。而定時器則是利用定時器的溢位間隔,如果時間上不夠,可以在溢位中斷中配合軟體計數器來實現。 前者浪費cpu,後者更高效。
言歸正傳,現在來計算初值了,直接用例子說明,就比如用定時器0延時50ms
一言不合,先上**
void main()
void t0_time() interrupt 1
}
首先乙個機器週期=12*乙個時鐘週期=12*(1/晶振) 一般的51晶振頻率為11.0592m
則乙個機器週期= 1.085069444444444 us 單位是微秒
所以如果要定時50ms 則要50 000/1.085069444444444~=46080個機器週期
又因為tomd|=0x01選擇了16位的模式,就是th0高八位 tl0低八位,所以最大到溢位就是65536
故初值設為65536-46080即程式執行了大約46080個機器週期即50ms
而後面的/256 %256就是劃分低八位和高八位的
這是我的第一篇部落格,就是希望大家有所幫助(雖然有些地方都可以有問題haha),自己的對玩微控制器更加的理解,利己利彼。學微控制器學acm的都知道,乙個點想不清楚的時候網上找到乙個好的解答是多麼的珍貴。所以希望大家一起加油,在微控制器中找到更多的樂趣。。。。。。 51微控制器定時器初值的計算
什麼是時鐘週期?什麼是機器週期?什麼是指令週期?時鐘週期1.晶振12m 12mhz除12為1mhz,也就是說一秒 1000000次機器週期。10ms 10000次 機器週期。65536 10000 55536 d8f0 th0 0xd8,tl0 0xf0 2.晶振11.0592m 11.0592mh...
51微控制器定時器初值計算問題
最近在看51微控制器的定時器與中斷,作為51微控制器比較重點的內容,很多人也花費了很長時間在這上面,有些問題網上的資料方法各不相同,也看得雲裡霧裡,比如定時器的初值計算問題,在此我想以此篇作為學習筆記,希望可以對大家有所幫助。定時器內部一暫存器,每隔乙個機器週期就會自動加1,直到加到65535就會溢...
單 片 機 定 時 器 初 值 例項計 算
一 10ms定時器初值的計算 1.晶振12m 12mhz除12為1mhz,也就是說一秒 1000000次機器週期。10ms 10000次 機器週期。65536 10000 55536 d8f0 th0 0xd8,tl0 0xf0 2.晶振11.0592m 11.0592mhz除12為921600hz...